lkml.org 
[lkml]   [2000]   [Sep]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
Subject2.4.0t8 SMP interrupt high latency ?
I've been testing out the 2.4.0 kernels as Linus wants.  
My particular area is looking at SMP interrupt handling
trying to write `burnAPIC`.

First, the good news: average int overhead measured by
`clockwatcher.c` [posted last year] is down from ~960 CPU
clocks in 2.2.13 to ~740 clocks in 2.4.0t8. Impressive.

Now the bad: Sometimes (~15%) it takes at least 25,000 CPU
clocks (68 us @ 366) for an IRQ to be handled. [Both module
prink's come out before the kernel intr printk's] Then the
the second of the closed-spaced pair gets lost. I use a write
to the APIC Intr Cmd Reg to simulate hardware interrupts
[`movl 0x840D0, 0xFFFFE300` in the kernel module below].
Naturally I hit uninstalled IRQs, and the default handler
takes care of it with a nice printk.

Now I don't know if the same behaviour happens with real
hardware interrupts, but the possibility is there. And
long interrupt latency will cause real trouble for high
interrupt machines. An innocent Linux box might suffer
sitting on a 100baseTX ethernet polluted by broadcast
runts from poxy MS-Windows NetBIOS boxen. It'd only have
6 us to handle the garbage packets.

I don't know what would cause high IRQ latency. I would
hope that the APIC page at 0xFFFFF000 isn't mapped cacheable.

-- Robert author `cpuburn` http://users.ev1.net/~redelm

# modAPIC - Generate hw interrupts
# Copyright 2000 RJ Redelmeier GPL - NO WARRANTEE.

.globl init_module
.globl cleanup_module
.extern printk

.text
.align 4
init_module:
pushl %ebp
movl %esp,%ebp
# movl $0x000840E0, 0xFFFFE300
# movl $0x000840D0, 0xFFFFE300
rdtsc
pushl %eax
pushl $strLoad
call printk
rdtsc
pushl %eax
pushl $strLoad
call printk
xorl %eax, %eax
leave
ret

cleanup_module:
pushl %ebp
movl %esp,%ebp
movl $0x000840D0, 0xFFFFE300
movl $0x000840E0, 0xFFFFE300
rdtsc
pushl %eax
pushl $strUnload
call printk
rdtsc
pushl %eax
pushl $strUnload
call printk
xorl %eax, %eax
leave
ret

.section .modinfo
__module_kernel_version:
.ascii "kernel_version=2.2.15\0"

.section .rodata
.align 32
strLoad: .ascii "<1> Asm Module Loaded! @ %u\n\0"
strUnload: .ascii "<1> Asm Module Unloaded @ %u\n\0"
#
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 12:38    [W:0.038 / U:0.104 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site