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 answers
Related Questions in LINUX
- Is there some way to use printf to print a horizontal list of decrementing hex digits in NASM assembly on Linux
- Why does Hugo generate different taxonomy-related HTML on different OS's?
- Writes in io_uring do not advance the file offset
- Why `set -o pipefail` gives different output even though the pipe is not failing
- what really controls the permissions: UID or eUID?
- Compiling eBPF program in Docker fails due to missing '__u64' type
- Docker container unable to make HTTPS requests to external API
- Whow to use callback_query_handler in Python 3.10
- Create kea runtime directory at startup in Yocto image
- Problem on CPU scheduling algorithms in OS
- How to copy files into the singularity sandbox?
- Android kernel error: undefined reference to `get_hw_version_platform'
- Is there a need for BPF Linux namespace?
- Error when trying to execute a binary compiled in a Kali Linux machine on an Ubuntu system
- Issue with launching application after updating ElectronJs to version 28.0.0 on Windows and Linux
Related Questions in LINUX-KERNEL
- Android kernel error: undefined reference to `get_hw_version_platform'
- Is there a need for BPF Linux namespace?
- Facing fatal errors while running "yum update" command on CentOS 7/Cloudlinux 7
- crash utility itself crashes while decoding kdump generated from null pointer dereference in kernel module
- How to compile the Linux kernel with -O0 for more detailed debug?
- Linux support for parallel Pixel data Image sensor
- Can't upgrade to newest version of linux-image-6.5.0-26-generic
- How to protect a page so that it cannot be write in mips arch?
- How to extract the .img file into normal kernel source file in the linux?
- Storage size of struct hash_desc desc; isn't known
- How can I intercept failed file openning calls?
- struct nameidata-Linux Kernel Module
- How to modify a 'struct msghdr' in Linux Kernel Module?
- How to allocate 500MB+ physically contiguous memory in a Linux kernel module and copy data to that memory from a userspace process?
- Hyper Threading: nosmt in grub configuration
Related Questions in LINUX-DEVICE-DRIVER
- Linux support for parallel Pixel data Image sensor
- Linux to QNX USB driver convert
- IRQ interrupt obtaining abnormal possibilities
- Error compiling dts (Device Tree source) file for dtb
- How to write the external interrupt callback function of Linux kernel v3.10?
- Does traffic control (tc) command have a rate limit?
- The module first installed the alarm when it started
- How does the Linux kernel now what to put in platform_data?
- How to reduce cached memory used by Linux kernel on embedded linux platform
- Notifying Linux MMC subsystem about power loss
- Linux kernel 6.6 from block_device how to find out if it has mounted file system
- Linux SPI read and write may occasionally be slow?
- gettimeofday calculates the runtime, with occasional significant deviations?
- uImage is not supported in kexec_file
- Linux of_platform_depopulate() does not remove drivers
Related Questions in INTERRUPT
- the end of the I/O operation is notified to the system by an interrupt.how much system time do the mentioned operations occupy?
- Unable to set an interrupt affinity in linux?
- fastLED degrades PWM outputs Arduino
- Difficulty understanding virtual LPIs in GICv3
- IRQ interrupt obtaining abnormal possibilities
- MKL02Z32xxx4 (FRDM-KL02Z Board) Timer overflow interrupt not firing
- Interrupt handling with push buttons in ARMv7
- Ultrasonic range finder HC-SR04 using one timer
- Does the Direct Memory Access (DMA) interfere with the execution of user program execution?
- How to write the external interrupt callback function of Linux kernel v3.10?
- Interaction with a thread from ISR using C++ Standard Library on ESP32
- Global variable value doesn't change in ISR in C
- The module first installed the alarm when it started
- ATTiny1606 Timer TCA0 interrupt not triggering
- RT linux isr routine
Related Questions in SOFTIRQ
- Linux FTRACE function_graph process context
- Sending netlink_multicast message from softirq context like netfilter hooks
- Linux softirq and SMP
- Reducing Timer Softirq and local interrupts
- Stack overflow if softirq preempt by hardware interrupt many times
- 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 there a way to debug softirq?
- RISC-V - Software Interrupts
- hardirq and softirq run on the same core/processor?
- softirq -- how far in network stack does it last?
- The reasons why rps procedure use spinlock with local_irq_disable
- Is it safe to call send_sig_info() inside URB completion routine?
- Pausing a kthread in Linux
- Why is time servicing softirqs increased on kernel 4.1 in compare with kernel 3.4?
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?
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)
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.