我有一个对延迟敏感的应用程序。虽然我关心吞吐量,但极低的延迟对我来说更重要。
请建议如何优化我的服务器以实现尽可能低的延迟 - 即从网络接口(或inifiniband卡)接收请求到发布响应的尽可能低的响应时间。
最初的想法是
- 将所有操作系统活动固定到一组核心上,并将其他活动专用于我的(不知道最好的方法是什么)
- 环境过度使用内存不要过度承诺
文章优化服务器和流程以提高速度似乎是一个好的开始,但欢迎其他指点。
欢迎提出任何其他建议
答案1
首先,我认为您应该安装并使用linux-rt
内核。此内核已打过补丁,允许几乎所有内核被抢占,但少数非常小的代码区域(“raw_spinlock 关键区域”)除外。这是通过用支持优先级继承的互斥锁替换大多数内核自旋锁以及将所有中断和软件中断移至内核线程来实现的。
抢占是暂时中断计算机系统正在执行的任务的行为,不需要其合作,并打算稍后恢复该任务。
读实时抢占概述。这将使您了解事物的工作原理,这将使您能够针对特定应用程序微调内核。
还有RTLinux免费由 Wind River Systems 开发,如果你有闲钱的话它还有商业版本。
我linux-rt
建议阅读RT 维基
也许您的应用程序支持实时人工智能?
答案2
也许调整硬件时钟频率很重要?这可能会影响 ACPI 电源状态的切换,例如,如果您的机器预计会在一段时间内处于空闲状态,并且必须快速响应网络请求。或者,如果您需要(极其)准确的计时和记录。
看链接文本进行更多讨论。我不确定最近有多近,但上次我检查时(大约 6 个月前)硬件时钟选项仍然存在。