我进行低延迟应用程序开发,我使用 isocpu 并设置线程关联性来减少(排除?)在我的关键线程期间进行上下文切换。但是,我不确定我的关键线程仍然可能受到哪些其他类型的中断?
虽然我很了解 x86 CPU 架构,但我对中断/上下文切换、各种类型等了解不多。使用时getrusage
显示自主性和不自觉的上下文切换?
还使用了内核旁路,因此网卡将数据直接写入用户级缓冲区 - 这可能会排除此问题的一些可能答案。
答案1
检查/proc/interrupts
每个 CPU 处理哪些硬件。除非将所有进程和所有中断配置为使用其他 CPU 内核,否则系统会尝试将所有任务和中断平衡到所有 CPU。此外,您的主板固件可能会实现一些“硬件”SMI 中断可能会在没有操作系统控制的情况下中断至少一些 CPU 内核。
当您的程序向操作系统请求某些内容(例如open()
,malloc()
/ brk()
,sleep()
)时,会发生自愿上下文切换,而当您的程序连续使用 CPU 但 CPU 想要中断该进程以在其间运行另一个进程(硬件中断处理程序或另一个用户模式任务)。
可以中断实时优先级运行的进程的列表:
在同一核心上运行的具有更高实时优先级的其他实时任务。
中断处理程序绑定到同一个 CPU 内核。
国家管理研究所
星米
如果您的任务作为普通用户模式进程运行,则在同一 CPU 上运行的任何其他进程(包括优先级较低的进程)都可能会中断您的进程。