Looking for comments on Bottom-Half/Tasklet/SoftIRQ
Greetings,
I was reading the unreliable guide to kernel hacking and was looking for
a little clarification on something. 2 Bottom halves cannot run at the same time, why?
Also, could someone give me an example of a service which is a bottom half/
tasklet/SoftIRQ?
Thanks in advance,
Chuck
Quoted 4 lines · [email protected] wrote:
Greetings,
I was reading the unreliable guide to kernel hacking and was looking for
a little clarification on something. 2 Bottom halves cannot run at the same time, why?
Per linux definition of bottom halves, there can only run one buttom half at one system wide. But dont use those - They are old and waists resources. Try tasklets instead. Multible tasklets can run in parrallel (but not the same tasklet)
Quoted 2 lines
Also, could someone give me an example of a service which is a bottom half/
tasklet/SoftIRQ?
Simple.
Imagine some hardware that generates interrupts.
Now we want to write a driver that keeps the hardware busy, so we implement a top half handler (IRQ-handler), and let it retrieve som data from the hardware. Instead of processing it right away, we shedule a tasklet to do that job. This way we can handle more interrupts/sec from the card, and the hardware is kept busy.
To summerize.
Buttom halves are the strictest (only one at a time.)
Takslets can run in parralel, but still no need to worry about reentrant code. SoftIrq give no guarrentee at all, and should be used with great care (code need to be reentrant).
Also try to readLinux device drivers by A. Rubini:
http://www.xml.com/ldd/chapter/book/index.html
Hope it helps.
Anders Fugmann
Quoted 10 lines
Thanks in advance,
Chuck
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Thanks.
So, Bottom halves don't need to be re-entrant as do tasklets. SoftIRQ's
need to be re-entrant. The advantage of tasklets is that each tasklet can be farmed out to different CPU's AND they don't need to be re-entrant because only one instance is allowed at a time. I think I got it.
Could you direct me to some code in the kernel which uses tasklets
so I can see the inner workings?
Thanks much,
Chuck
Quoted 54 lines · Anders Peter Fugmann
Quoted 4 lines · [email protected] wrote:
Greetings,
I was reading the unreliable guide to kernel hacking and was looking for
a little clarification on something. 2 Bottom halves cannot run at the same time, why?Per linux definition of bottom halves, there can only run one buttom half at one system wide. But dont use those - They are old and waists resources. Try tasklets instead. Multible tasklets can run in parrallel (but not the same tasklet)
Quoted 2 lines
Also, could someone give me an example of a service which is a bottom half/
tasklet/SoftIRQ?Simple.
Imagine some hardware that generates interrupts.
Now we want to write a driver that keeps the hardware busy, so we implement a top half handler (IRQ-handler), and let it retrieve som data from the hardware. Instead of processing it right away, we shedule a tasklet to do that job. This way we can handle more interrupts/sec from the card, and the hardware is kept busy.To summerize.
Buttom halves are the strictest (only one at a time.) Takslets can run in parralel, but still no need to worry about reentrant code.
SoftIrq give no guarrentee at all, and should be used with great care (code need to be reentrant).Also try to readLinux device drivers by A. Rubini:
http://www.xml.com/ldd/chapter/book/index.htmlHope it helps.
Anders FugmannQuoted 10 lines
Thanks in advance,
Chuck
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Quoted 5 lines · [email protected] wrote:
Thanks
So, Bottom halves don't need to be re-entrant as do tasklets. SoftIRQ's
need to be re-entrant. The advantage of tasklets is that each tasklet can
be farmed out to different CPU's AND they don't need to be re-entrant because only one instance is allowed at a time. I think I got it.
That is 100% correct.
Quoted 3 lines
Could you direct me to some code in the kernel which uses tasklets
so I can see the inner workings?
Actually very few systems in the kernel has been rewritten to use tasklets instead og BH's.
But as they are very simillar to BH's, you should be able to use the same thinking, its just a new API.
Take a look at include/linux/interrupt.h
(or http://lxr.linux.no/source/include/linux/interrupt.h, an invaluable source when coding for linux).
Regards
Anders Fugmann
Many thanks once again.
Chuck
Quoted 27 lines · Anders Peter Fugmann
Quoted 6 lines · [email protected] wrote:
Thanks
So, Bottom halves don't need to be re-entrant as do tasklets. SoftIRQ's
need to be re-entrant. The advantage of tasklets is that each tasklet can be farmed out to different CPU's AND they don't need to be re-entrant because only one instance is allowed at a time. I think I got it.That is 100% correct.
Quoted 3 lines
Could you direct me to some code in the kernel which uses tasklets
so I can see the inner workings?Actually very few systems in the kernel has been rewritten to use tasklets instead og BH's.
But as they are very simillar to BH's, you should be able to use the same thinking, its just a new API.
Take a look at
include/linux/interrupt.h
(or http://lxr.linux.no/source/include/linux/interrupt.h, an invaluable source when coding for linux).Regards
Anders Fugmann
Quoted 8 lines · [email protected] wrote:
Thanks.
So, Bottom halves don't need to be re-entrant as do tasklets. SoftIRQ's
need to be re-entrant. The advantage of tasklets is that each tasklet can be farmed out to different CPU's AND they don't need to be re-entrant because only one instance is allowed at a time. I think I got it.
Quoted 45 lines
Could you direct me to some code in the kernel which uses tasklets
so I can see the inner workings?Thanks much,
ChuckQuoted 38 lines · Anders Peter Fugmann
Quoted 4 lines · [email protected] wrote:
Greetings,
I was reading the unreliable guide to kernel hacking and was looking for
a little clarification on something. 2 Bottom halves cannot run at the same time, why?Per linux definition of bottom halves, there can only run one buttom half at one system wide. But dont use those - They are old and waists resources. Try tasklets instead. Multible tasklets can run in parrallel (but not the same tasklet)
Quoted 2 lines
Also, could someone give me an example of a service which is a bottom half/
tasklet/SoftIRQ?Simple.
Imagine some hardware that generates interrupts.
Now we want to write a driver that keeps the hardware busy, so we implement a top half handler (IRQ-handler), and let it retrieve som data from the hardware. Instead of processing it right away, we shedule a tasklet to do that job. This way we can handle more interrupts/sec from the card, and the hardware is kept busy.To summerize.
Buttom halves are the strictest (only one at a time.) Takslets can run in parralel, but still no need to worry about reentrant code.
SoftIrq give no guarrentee at all, and should be used with great care (code need to be reentrant).Also try to readLinux device drivers by A. Rubini:
http://www.xml.com/ldd/chapter/book/index.htmlHope it helps.
Anders FugmannQuoted 1 line
A simple example is the ../kernel/timer.c code. The "run_task_list()" function is called from a tasklet. "do_timer()" is called from interrupt and "mark_bh(TIMER_BH)" puts the tasklet in the queue. "timer_bh()" (old names die hard) is the tasklet.
George
Quoted 5 lines · george anzinger
A simple example is the
../kernel/timer.ccode. The "run_task_list()"
function is called from a tasklet. "do_timer()" is called from
interrupt and "mark_bh(TIMER_BH)" puts the tasklet in the queue. "timer_bh()" (old names die hard) is the tasklet.
mark_bh is the use of old BH's.
You want to use tasklet_schedule if a tasklet should be sheduled. (_not_ tasklet_hi_schedule, those are the BH's)
Regards
Anders Fugmann
Quoted 8 lines
George
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Thanks all for the info. You have been very helpful.
Many Thanks,
Chuck
Quoted 61 lines · george anzinger
Quoted 8 lines · [email protected] wrote:
Thanks.
So, Bottom halves don't need to be re-entrant as do tasklets. SoftIRQ's
need to be re-entrant. The advantage of tasklets is that each tasklet can be farmed out to different CPU's AND they don't need to be re-entrant because only one instance is allowed at a time. I think I got it.Quoted 45 lines
Could you direct me to some code in the kernel which uses tasklets
so I can see the inner workings?Thanks much,
ChuckQuoted 38 lines · Anders Peter Fugmann
Quoted 4 lines · [email protected] wrote:
Greetings,
I was reading the unreliable guide to kernel hacking and was looking for
a little clarification on something. 2 Bottom halves cannot run at the same time, why?Per linux definition of bottom halves, there can only run one buttom half at one system wide. But dont use those - They are old and waists resources. Try tasklets instead. Multible tasklets can run in parrallel (but not the same tasklet)
Quoted 2 lines
Also, could someone give me an example of a service which is a bottom half/
tasklet/SoftIRQ?Simple.
Imagine some hardware that generates interrupts.
Now we want to write a driver that keeps the hardware busy, so we implement a top half handler (IRQ-handler), and let it retrieve som data from the hardware. Instead of processing it right away, we shedule a tasklet to do that job. This way we can handle more interrupts/sec from the card, and the hardware is kept busy.To summerize.
Buttom halves are the strictest (only one at a time.) Takslets can run in parralel, but still no need to worry about reentrant code.
SoftIrq give no guarrentee at all, and should be used with great care (code need to be reentrant).Also try to readLinux device drivers by A. Rubini:
http://www.xml.com/ldd/chapter/book/index.htmlHope it helps.
Anders FugmannQuoted 1 line
A simple example is the
../kernel/timer.ccode. The "run_task_list()" function is called from a tasklet. "do_timer()" is called from interrupt and "mark_bh(TIMER_BH)" puts the tasklet in the queue. "timer_bh()" (old names die hard) is the tasklet.George