What makes the softirq so special that we use it for high frequency uses., like in network drivers and block drivers.
Why softirq is used for highly threaded and high frequency uses?
29.8k Views Asked by Virendra Kumar At
1
There are 1 best solutions below
Related Questions in LINUX
- How do I recursively find and replace only in files named index.php on Linux webserver?
- passing text with \n as one argument in shell
- kernel module does not print packet info
- How to send ESC/POS commands to thermal printer in Linux
- (x64 Nasm) Writeline function on Linux
- How do I set the Hive user to something different than the Spark user from within a Spark program?
- Default priority of thread with SCHED_FIFO
- Calling a python function with options from shell script
- How to split a directory into parts without compressing or archiving?
- Cross compile simple standard C program on Linux for Mac
- How to offload NAPI poll function to workqueue
- python netifaces - How to get currently used network interface
- Unexpected output from function
- mingw-64 conflicting declarations when cross-compiling
- Different behavior of async with Visual Studio 2013(Windows8.1) and GCC 4.9(Ubuntu14.10)
Related Questions in LINUX-KERNEL
- kernel module does not print packet info
- android linux kernel communicate with user space about NETLINK_USER
- How to offload NAPI poll function to workqueue
- Why Device Tree Structure (DTS) file is needed both in bootloader and kernel source code?
- Bootloader in Assembly with Linux kernel
- pktgen not sending packets more than 1kb big
- Use static analysis tools to check null pointers and memory leaks in Linux device drivers
- How to build Linux kernel to support SO_ATTACH_BPF socket option?
- How do I know the last sched time of a process
- linux kernel compile error....udevd[63]: error getting socket
- Process in background mode trying to read from stdin
- board firmware update through uefi capsule feature from Linux
- spin_lock before writing status register
- Kernel module configuration locked built in?
- Install Subversion 1.7 on Debian jessie
Related Questions in LINUX-DEVICE-DRIVER
- How to offload NAPI poll function to workqueue
- Kernel module configuration locked built in?
- I want to sleep while holding a mutex
- Insmod is not working
- USB Full Speed polling interval
- disabling CONFIG_NET_DMA
- Measure memory usage of a certain Linux driver module
- Documentation for regulator framework with device tree
- how is DMA-capable memory defined?
- TechWell TW6869 driver does not generate interrupts on embedded device
- How to share same header files between kernel modules and userspace applications.
- Detect active touchscreen on Linux (and if multitouch)
- how to use single platform device driver for multiple devices
- When to Update ALSA Audio Driver Buffer Pointer
- How to print kernel stack's lower and upper address in linux for process using pid and without using pid
Related Questions in INTERRUPT
- Arduino RPM Detection
- Interrupting long working thread
- How to set privilaged mode in ARM Cortex-A8?
- TechWell TW6869 driver does not generate interrupts on embedded device
- Using class member function pointers in C++ for Arduino
- What's the shortcut to interrupt the kernel in Canopy?
- How to interrupt a thread with infinite loop and sleep in Java
- Why page fault is considered as trap
- externally ending infinite loop java
- DB2 SQLSTATE = 57014 error
- Using Thread.currentThread().isInterrupted() with Thread.sleep()
- Canceling a long-running function using an ISR
- TelosB GPIO interrupts in Contiki
- Interrupts for Data Ready pin
- How exactly do I interrupt a thread?
Related Questions in SOFTIRQ
- softirq -- how far in network stack does it last?
- Why softirq is used for highly threaded and high frequency uses?
- amd radeon r9 series smp_affinity
- Linux FTRACE function_graph process context
- Is there a way to debug softirq?
- Containers: high cpu usage in %soft (soft IRQ) for network-intensive workloads
- Failed to trace the trace point of softirq_raise in Linux-5.11.4
- Is it safe to call send_sig_info() inside URB completion routine?
- The reasons why rps procedure use spinlock with local_irq_disable
- ksoftirq is NOT using CPU and should be, why?
- The linux softirq cpu usage looks strange
- ksoftirqd behaviour on high network traffic
- How to define and trigger my own new softirq in linux kernel?
- How to stop/disable IPI(inter process interrupts) in linux?
- Why is time servicing softirqs increased on kernel 4.1 in compare with kernel 3.4?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
SoftIrqs are typically used to complete queued work from a processed interrupt because they fit that need very well - they run with second-highest priority, but still run with hardware interrupts enabled.
Processing hw interrupts is the utmost priority, since if they are not processed quickly, then either too high of latency will be introduced and user experience suffers, or the hardware buffer will fill before the interrupt services the device, and data is lost. Dont service a network adapter fast enough? It's going to overwrite data in the fifo and you'll lose packets. Don't service a hard disk fast enough? The hard drive stalls queued read requests because it has nowhere to put the results.
SoftIrqs allow the critical part of servicing hardware interrupts to be as short as possible; instead of having to process the entire hw interrupt on the spot, the important data is read off the device into RAM or otherwise, and then a SoftIrq is started to finish the work. This keeps the hardware interrupts disabled for the shortest period of time, while still completing the work with high priority.
This article is a decent reference on the matter: https://lwn.net/Articles/520076/
Edits for questions:
SoftIrqs are re-entrant - they can be processed on any cpu. From the article I linked:
Emphasis added. They can be processed inline - I believe this means they can be processed without causing a context switch, which means as soon as hardware interrupts are enabled, we can jump straight to the SoftIrq right where we are with as little CPU cache abuse as possible. All of this contributes to SoftIrqs being lightweight but flexible, which makes them ideal for high-frequency processing.