[olug] 2.4 kernel/ SMP and APIC
VincentR
vincentr at cox.net
Wed Dec 11 21:43:31 UTC 2002
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
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.....
:)
----- 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
More information about the OLUG
mailing list