超低延迟如何设计?
原文标题: Awesome Low Latency
翻译标题: 超低延迟
这里讲述超低延时是如何设计的,属于翻译本。
来源于以下开源项目
低延迟编程在各种应用场景中都变得越来越重要。然而,许多低延迟编程的技巧和诀窍仍然只是开发者们口口相传的经验之谈。本文旨在将这些知识系统化,帮助人们(重新)发现低延迟编程的精髓。
模式
如何正确测量延迟
延迟是一种分布
避免协同性遗漏
使用累积分布函数或直方图可视化延迟
避免数据移动
计算和数据共置,例如内存处理或近内存处理
复制数据以加快访问速度
最大化缓存命中率
控制内存访问模式
避免工作
驯服的算法复杂度
避免动态内存管理
避免按需分页以防止内存抖动,例如使用更大的内存页(Linux 上的大页、FreeBSD 上的超级页等)。
尽可能减少工作量(例如,使用内联避免函数调用开销)
避免进行CPU密集型计算。
避免等待
对数据进行分区以避免共享(从而避免同步)
将共享数据结构设为只读(如果可能)
减少排队首位阻塞
避免切换上下文
使用无等待数据同步
使用忙轮询代替唤醒
禁用纳格尔算法
使用非阻塞式 I/O
隐藏延迟
并行处理对不同服务的请求
请求对冲(向多个副本引擎发送冗余请求,使用速度最快的引擎的响应)
针对合适的问题使用优化的 SIMD 指令
多进程和多线程
调整以降低延迟
使用抢占式内核
中断和进程亲和性
注意检查不良的设备驱动程序。
高级主题
使用内核旁路网络,例如 DPDK 或 XDP
利用加速器和FPGA进行硬件卸载
博客
Ben Darfler (2014) 提出的11 个低延迟系统最佳实践。
Alexey Ivanov (2017)优化 Web 服务器以实现高吞吐量和低延迟。
出版物
《规模化的尾巴》,作者:杰弗里·迪恩和路易斯·安德烈·巴罗索(2013 年)
《尾部延迟的故事:硬件、操作系统和应用程序层面的尾部延迟来源》,作者:李嘉琳等(2014)
克里斯蒂娜·德利米特鲁和克里斯托斯·科兹拉基斯 (2018) 的《阿姆达尔尾部延迟定律》
图书
计算机系统性能分析的艺术:实验设计、测量、仿真和建模技术,作者:Raj Jain (1991)
系统性能:企业与云,第二版,作者:Brendan Gregg(2020 年)
延迟:减少软件系统中的延迟,作者:Pekka Enberg (2025)
Comment