[olug] 2.4 kernel/ SMP and APIC
Brian Wiese
bwiese at cotse.com
Wed Dec 11 23:22:11 UTC 2002
see response below..
On Wed, 11 Dec 2002 15:43:31 -0600
"VincentR" <vincentr at cox.net> wrote:
|Booting with the noapic option would certainly stop the error messages.
|If it's not a really busy system, you shouldn't see degraded performance.
|Are there any errors listed in /proc/interrupts ?
|
|[root at --- root]# grep ERR /proc/interrupts
|ERR: 0
liberty:/var/log # grep ERR /proc/interrupts
ERR: 14882
Hrmm... I dunno if that's cummulative or what? I only use this as a
destkop workstation, but my uptime is:
liberty:/var/log # uptime
5:16pm up 112 days, 6:36, 1 user, load average: 0.09, 0.16, 0.25
Is that many interrupts a bad thing??? My CPUs taking a beating?
|You could also do something like this to ignore the messages:
|
|[root at --- root]# alias MESSAGES='tac /var/log/messages | egrep -v
APIC\|ntp | more'
|[root at --- root]# MESSAGES
|Dec 11 14:47:27 --- kernel: DROP:IN=eth0 OUT=
MAC=00:01:02:e9:0a:84:0.....
it's actually in my /var/log/warn logfile... this is the only computer I
know of that has such a log, but it doesn't bother me -- I never look at
it. ;) and those APIC error's are literally the only traffic in there...
albeit it is quite frequent, about 30 - 130 every day.
=(
|:)
|
|----- Original Message -----
|From: "Brian Wiese" <bwiese at cotse.com>
|To: <olug at olug.org>
|Sent: Wednesday, December 11, 2002 12:31 PM
|Subject: Re: [olug] 2.4 kernel/ SMP and APIC
|
|
|> is there anyway to stop this kind of stuff from filling up my
|> /var/log/warn ?
|>
|> ...
|> Oct 21 11:06:37 liberty kernel: APIC error on CPU0: 02(02)
|> Oct 21 11:27:25 liberty kernel: APIC error on CPU0: 02(02)
|> Oct 21 11:32:16 liberty kernel: APIC error on CPU1: 04(04)
|> Oct 21 11:32:16 liberty kernel: APIC error on CPU0: 02(08)
|> Oct 21 11:38:08 liberty kernel: APIC error on CPU0: 08(08)
|> Oct 21 11:38:08 liberty kernel: APIC error on CPU1: 04(04)
|>
|> all the time. running:
|> Linux liberty 2.4.10-64GB-SMP #1 SMP Fri Sep 28 17:26:36 GMT 2001 i686
|> unknown
|> on SuSE 7.3 pro, dual celeron 366s on abit bp6 ?
|>
|> I searched online once before, and I don't think there was any
solution,
|> just that it's a common hardware problem that happens? Doesn't seem to
|> slow me down any... but I wouldn't know either way, it's just always
done
|> this. =(
|>
|> peace
|> Brian
|>
|> On Tue, 10 Dec 2002 17:11:03 -0600
|> "VincentR" <vincentr at cox.net> wrote:
|>
|> |This is mostly an FYI thing for thought...
|> |There's a little used feature in the 2.4 kernel which enables you to
bind
|> an
|> |IRQ to a specific CPU. Why would you do this? In my case it was
because
|> |UDP packets in a stream were getting out of sequence due to the APIC
|> |allowing multiple CPU's to service interrupts on the same ethernet
|> device.
|> |You could just turn off APIC with boot loader options
(append="noapic"),
|> but
|> |that would disable most of the advantages of an SMP system. You could
|> also
|> |increase the number of packets serviced within an interrupt if your
|> driver
|> |allows that configuration in modules.conf (options 3c59x
|> |max_interrupt_work=60). That helps, but it doesn't fix the problem.
|> |Here's an init script to set the smp_affinity for each network device
|> (word
|> |wrap will probably screw it up):
|> |
|> |[root at --- /root]# cat /etc/init.d/eth_affinity
|> |#!/bin/bash
|> |#
|> |# eth_affinity
|> |#
|> |# chkconfig: 345 15 85
|> |# description: Set IRQ affinity for eth devices.
|> |
|> |# Define which networks get which CPU.
|> |# You must use the first three octets.
|> |CPU0="10.100.116 10.5.7 10.5.9 10.129.7 10.0.9"
|> |CPU1="10.10.10 10.10.11 10.10.0"
|> |
|> |# Where is /proc?
|> |PROC=/proc
|> |IPV4=/proc/sys/net/ipv4
|> |
|> |# Got root?
|> |if [ `id -u` -gt "0" ]; then
|> | echo "You are not root!"
|> | exit 1
|> |fi
|> |# Check kernel version.
|> |if [ ! `uname --release | cut -d. -f1-2` = "2.4" ]; then
|> | echo "You are not running a 2.4 kernel"
|> | echo "Version detected: "`uname --release`
|> | exit 1
|> |fi
|> |# Is this an SMP kernel?
|> |if [ ! -f /proc/1/cpu ]; then
|> | echo "Get an SMP system to do this on!"
|> | exit 1
|> |fi
|> |# Check for the required files and directories.
|> |if [ ! -d $PROC/irq ] || [ ! -d $IPV4/conf ]; then
|> | echo "I couldn't find a required file or directory;
Exiting..."
|> | file $PROC/irq $IPV4/conf
|> | exit 1
|> |fi
|> |
|> |#DEBUG SECTION##################################################
|> |# Set DEBUG=1 to test this in /tmp.
|> |DEBUG=0
|> |if [ "$DEBUG" = "1" ]; then
|> | PROC=/tmp
|> | IPV4=/tmp/ipv4
|> |fi
|> |# Copy files to /tmp if needed.
|> |if [ ! -d $PROC/irq ] || [ ! -d $IPV4/conf ]; then
|> | cp -a /proc/irq /tmp
|> | cp -a /proc/sys/net/ipv4 /tmp > /dev/null 2>&1
|> |fi
|> |#DEBUG SECTION##################################################
|> |
|> |# Here we go...
|> |case "$1" in
|> | start)
|> | # Find each eth's irq and network; set the affinity.
|> | for ETH in `/bin/ls $IPV4/conf | egrep -v all\|default\|lo`;
do
|> | IRQ=`ifconfig $ETH | grep Interrupt | awk -F: '{print
|> $2}' |
|> |awk '{print $1}'`
|> | NET=`ifconfig $ETH | grep "inet addr" | awk -F:
'{print
|> $2}'
|> || cut -d. -f1-3`
|> | for net in `echo $CPU0`; do
|> | if [ "$NET" = "$net" ]; then
|> | echo 1 > $PROC/irq/$IRQ/smp_affinity
|> | fi
|> | done
|> | for net in `echo $CPU1`; do
|> | if [ "$NET" = "$net" ]; then
|> | echo 2 > $PROC/irq/$IRQ/smp_affinity
|> | fi
|> | done
|> | done
|> | touch /var/lock/subsys/eth_affinity
|> | $0 status
|> | ;;
|> | stop)
|> | # Find each eth's irq; unset the affinity.
|> | for ETH in `/bin/ls $IPV4/conf | egrep -v all\|default\|lo`;
do
|> | IRQ=`ifconfig $ETH | grep Interrupt | awk -F: '{print
|> $2}' |
|> |awk '{print $1}'`
|> | echo ffffffff > $PROC/irq/$IRQ/smp_affinity
|> | done
|> | rm -f /var/lock/subsys/eth_affinity
|> | $0 status
|> | ;;
|> | status)
|> | # Find each eth's irq and network; display the affinity.
|> | for ETH in `/bin/ls $IPV4/conf | egrep -v all\|default\|lo`;
do
|> | IRQ=`ifconfig $ETH | grep Interrupt | awk -F: '{print
|> $2}' |
|> |awk '{print $1}'`
|> | NET=`ifconfig $ETH | grep "inet addr" | awk -F:
'{print
|> $2}'
|> || cut -d. -f1-3`
|> | AFFINITY=`cat $PROC/irq/$IRQ/smp_affinity`
|> | if [ "$AFFINITY" = "00000001" ]; then
|> | echo "$ETH IRQ $IRQ has affinity with CPU0 on
|> |network $NET."
|> | fi
|> | if [ "$AFFINITY" = "00000002" ]; then
|> | echo "$ETH IRQ $IRQ has affinity with CPU1 on
|> |network $NET."
|> | fi
|> | if [ "$AFFINITY" = "ffffffff" ]; then
|> | echo "$ETH IRQ $IRQ has affinity with ALL on
|> network
|> |$NET."
|> | fi
|> | if [ ! "$AFFINITY" = "00000001" ] && [ ! "$AFFINITY" =
|> |"00000002" ] && [ ! "$AFFINITY" = "ffffffff" ]; then
|> | echo -e "$ETH IRQ $IRQ network $NET has an
|> affinity
|> |of $AFFINITY."
|> | echo "I have no idea what this means!"
|> | fi
|> | done
|> | ;;
|> | *)
|> | echo "Usage: eth_affinity {start|stop|status}"
|> | exit 1
|> |esac
|> |#EOF
|> |
|> |
|> |_______________________________________________
|> |OLUG mailing list
|> |OLUG at olug.org
|> |http://lists.olug.org/mailman/listinfo/olug
|> |
|>
|>
|> Brian Wiese | bwiese at cotse.com | aim: unolinuxguru
|> ------------------------------------------------------
|> GnuPG/PGP key 0x1E820A73 | "FREEDOM!" - Braveheart
|> ------------------------------------------------------
|> This is not about Napster or DVDs. It's about your Freedom.
|> I'll see your DMCA and raise you a First Amendment.
|> http://www.anti-dmca.org
|> _______________________________________________
|> OLUG mailing list
|> OLUG at olug.org
|> http://lists.olug.org/mailman/listinfo/olug
|
|
|_______________________________________________
|OLUG mailing list
|OLUG at olug.org
|http://lists.olug.org/mailman/listinfo/olug
|
Brian Wiese | bwiese at cotse.com | aim: unolinuxguru
------------------------------------------------------
GnuPG/PGP key 0x1E820A73 | "FREEDOM!" - Braveheart
------------------------------------------------------
This is not about Napster or DVDs. It's about your Freedom.
I'll see your DMCA and raise you a First Amendment.
http://www.anti-dmca.org
More information about the OLUG
mailing list