首页 存档 技术 查看内容

如何避免陷入处理器的各种“拖延症”?

2018-3-30 13:00 |来自: 互联网 378 0

摘要: 请关注我们的微信号:i_server_arch 一切皆因时间而起 “延迟”一词英文原词为:Latency,英文词典中解释为“潜伏期”,作为医学名词,它描述了从感染到发作的时间段。而在服务器领域,它描述的是存取某个数据、执 ...

请关注我们的微信号:i_server_arch


一切皆因时间而起

“延迟”一词英文原词为:Latency,英文词典中解释为“潜伏期”,作为医学名词,它描述了从感染到发作的时间段。而在服务器领域,它描述的是存取某个数据、执行某个指令、或者是提供某项服务等所产生的时间消耗。非要给“延迟”下一个定义的话:一项操作从执行开始到结束的时间消耗,即为延迟。事实上还有很多和延迟相关的同义词,比如“delay time” 和 “response time”等,它们无意外地都描述着一件和时间有关系的事儿。

延迟是一项重要性能指标

延迟在服务器领域是一项比较重要的指标,它是衡量服务质量的标准之一:比如用户点击鼠标提交操作后,页面多久时间返回用户所期望的数据。在这样一个用户能够感知时间存在的操作中,里面包含了各种网络传输延迟、服务器各种计算和数据存取延迟。

本文我们主要来聊一聊处理器的各种“拖延症”。

处理器各级存储器的访问延迟

我们搜寻了一张处理器各级缓存以及内存的访问延迟图:


要点1:处理器频率越高计算延迟越小

从上图中不难发现处理器中最快速的存储器莫过于寄存器,它的访问延迟通常为处理器的一个时钟周期,小于一个纳秒,并且这个时间取决于处理器频率的高低:频率越高,寄存器的访问延迟就越低。而关于处理器L1、L2、及L3缓存的访问延迟,也通常是以处理器的时钟周期数来衡量,分别对应约3、12及38个时钟周期。

优化建议:应该尽量选用频率高的处理器而不是一味追求核心数量;

要点2:程序频繁切换核导致延迟飙升

由于L1、L2均为单个物理核的独立缓存,在处理同一个程序的时候需要同步数据,因此如果同一个程序经常在不同的核间切换计算,就会消耗这些核心的L1、L2缓存数据同步时间,频繁地同步核间的缓存数据无疑造成了整体计算时间的飙升。

优化建议:应该尽量避免程序的单个线程或者单个任务在多个核心间频繁切换;

要点3:内存访问延迟相对处理器缓存慢了一个数量级

我们知道处理器的缓存是极为昂贵的,尤其是访问越快的存储器成本也就越高,而内存容量大且成本低。但是随之而来的问题便是延迟相比处理器的缓存要高了一个数量级:内存访问延迟约65ns,而处理器L2缓存访问延迟仅3ns,差了20多倍!

优化建议:优化程序减少内存访问,比如优化循环代码后减少了内存访问的频率,使得单位时间内循环次数增加;


要点4:交叉访问内存带来了延迟的增加

为了能够跨处理器访问内存,于是诞生了QPI总线以及类似思想的设计。但是QPI总线总归存在访问延迟,而且内存访问本身也存在延迟。因此,跨处理器访问内存的方式经过延迟叠加后,访问延迟会达到非跨处理器访问方式的近两倍。

优化建议:应该尽量避免程序跨处理器频繁切换计算,尤其是对延迟敏感的应用更应该避免;


感谢您的阅读和支持!我们的订阅微信号是:

i_server_arch

保存下面的二维码用微信扫一扫即可关注我们!

本文转载自:微信公众账号 - 互联网服务器架构,版权归原作者所有!

声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部