我列出了所有中断:
cat /proc/interruts
它给出了这个:
CPU0 CPU1 CPU2 CPU3
0: 126 0 0 0 IO-APIC-edge timer
1: 941 0 0 0 IO-APIC-edge keyboard
... (etc.)
19: 941 0 0 0 IO-APIC-fasteoi eth0
... (etc.)
此表中的第一列是否给出优先级中断?我只是想学习优先级,因为我想提高NIC的中断优先级以获得更好的网络性能。我想,前两个中断无法更改(我猜是因为intel x86架构)。
无论如何,这是我的问题:
是否可以提高NIC中断的优先级?
答案 0 :(得分:5)
vanilla内核没有优先考虑中断。这是内核开发的早期设计决策。有两种方法可以解决这个问题。
首先,您可以编写一个内核模块来为您的处理器编程中断控制器,以便为NIC中断提供最高优先级。这将在硬件级别更改内核下的NIC中断优先级。
其次,您可以使用PREEMPT_RT补丁构建内核,并为处理NIC中断的内核线程提供最高优先级。
这两种方法都会提高处理网络中断的优先级。但是,这些都不可能为您提供更好的网络性能(无论这意味着什么),因为IP的大部分开销,无论是UDP的TCP都在IP堆栈中,而不是在NIC中断的处理中。事实上,使用PREEMPT_RT补丁甚至可能导致网络性能下降。