[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

deferring work using kernel threads



Hi,

I am trying to improve the performance of a device
driver.The developer implemented it as a loadable
kernel module.The device notifies the driver of
available incoming data using interrupts. 
The design uses kernel threads as the mechanism to
defer processing from the interrupt handler: 

the interrupt handler merely acknowledges the
interrupt and notifies the kernel thread using a
binary semaphore. The kernel thread waits forever on
the semaphore until it gets notification from the
interrupt handler. 

The device generates about 100,000 interrupts per
second. I stubbed the kernel thread out so everything
it does is to read two 32-bit words from a memory
mapped device every time it receives the interrupt.
Tbhe kernel thread is consuming about 41.5% of the CPU
(a XScale core at 700MHz). 

Although I do intend to do perform some more tests to
validate my assumptions, after reading the chapters
"kernel synchronization methods" and "which bottom
half should I use" of Robert Love's book, it seems to
me that the notification mechanism implemented is not
optimal. 

I would like to hear from an experienced kernel device
driver developer if he some other bottom half
mechanism such as a tasket would not be more suitable
for a data rate of 100,000+ data interrupts/sec. 

Rgds, 
Josilton 


__________________________________________________
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/