一个测试性能不稳定的问题

经常会通过一些通用的测试工具测试一些服务器的性能,个人非常喜欢SPEC的一系列产品,特别是SPECcpu。SPECcpu原理上通过接近30种不同特性的组件的执行时间对服务器的计算吞吐能力进行一个客观的评价。当然,由于计算机的硬件配置不同,不同的程序跑分各有千秋,但有一点也是SPECcpu能够成为业界标准之一的原因是跑分结果的稳定。这么说不夸张:如果其中的一个测试组件两次跑分差距超过5%,请仔细检查环境有没有变化。

继续阅读“一个测试性能不稳定的问题”
推荐阅读:
首先,提个问题:64bit x
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基

Linux的用户内存上限

首先,提个问题:64bit x86 Linux中用户空间最大可以使用多少物理内存?根据Kernel的定义,这个值是64T,Redhat官方给的是12T,但含糊的说了64T的限制。那64bit x86的寻址位宽是多少?答:48bit,理论上应该是支持2<<48=256T才是,Linux kernel为什么会强制限定了一个64T的最大内存?

继续阅读“Linux的用户内存上限”
推荐阅读:
经常会通过一些通用的测试工具测
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基

离奇的CPU利用率

接到一个黑盒的case:一套双志强的服务器上,运行一个典型的索引服务,通过taskset命令将改服务的CPU绑定到socket1之后,理论上socket0应该没有工作负载,但实际上的结果是socket0非但有负载,而且对于一颗24core的CPU来说,CPU利用率接近100%——比socket1的负载还高!且更加头疼的是无论怎么对server端施加压力,serve的CPU利用率和性能不会有太大的提升。

继续阅读“离奇的CPU利用率”
推荐阅读:
经常会通过一些通用的测试工具测
首先,提个问题:64bit x
去年的DCDC,我主要介绍了基

DCDC’19-NUMA的优势和陷阱

去年的DCDC,我主要介绍了基于RDT技术对云计算场景做优化,转眼就一年过去了。2019年DCDC依旧还是Santa Clara、台北、上海、北京4处分会场。不同的是今年SC的presentation已经由我在美国的同事代领;台北今年取消了所有的云计算的专题;仅存京沪两地的演讲计划将在下周开始。照旧,这次分享下基于英文版本的内容(PS:不得不删除部分内容,整体略凌乱见谅!)。

继续阅读“DCDC’19-NUMA的优势和陷阱”
推荐阅读:
经常会通过一些通用的测试工具测
首先,提个问题:64bit x
接到一个黑盒的case:一套双

高性能编程的困境

之前收到公司一个大牛的PPT,里边详细分析了一个典型的代码段在短短2~3秒钟时间内的内存访问特征。内容翔实紧凑,说的有理有据。技术类PPT的惯例,文中有几页折线图表达了整个过程中每一细微时间粒度上的内存带宽变化,扫了一眼细细密密的横坐标,一方面感慨大牛的数据之精确,另一方面忽然有了放challenge的冲动。

继续阅读“高性能编程的困境”
推荐阅读:
一直没有写过关于Linux内核
尽管当前已经是多核心SMP时代
经常会通过一些通用的测试工具测

从核心性能不一致到sub-numa

既然都是9102年了,云计算早就成了服务器的主要任务,就如同我之前说过的:“那种期待一个应用就把一台主机塞满的时代是回不来了!”不同于服务传统的称之为“科学计算”的模式,云计算的业务场景要求CPU的隔离性更优于性能,尽可能的各个core之间是搭积木似的即可随意打通(单虚机多CPU)又要互不干扰的。Xeon为代表的服务器CPU给出的主流解决方式是单socket,更多核心。

继续阅读“从核心性能不一致到sub-numa”
推荐阅读:
首先列出本站之前相关的几篇帖子
事出这一段时间做了不少基于SP
继续在NUMA和性能差异的路上

LLC缓存一致性保障原理

如果大家了解一点CPU的知识,应该能够了解到当前的x86架构的CPU都通过多级缓存实现内存的快速访问。目前较为流行的做法是3级缓存的设置,L1/L2为每个CPU core独享,而L3 或者LLC(last level cache)则由同一个socket上的所有物理core共享。这个时候如果考虑双路甚至多路CPU的话,由于内存中的数据有且只有一份,但多个CPU很可能在此基础上创建属于自己socket的缓存。对于内存的读访问来说,多份数据并不会影响到一致性,但一旦有一个socket上的某个core修改了数据,一致性问题则会凸显。究竟CPU是如何实现一致性保障的呢?

继续阅读“LLC缓存一致性保障原理”
推荐阅读:
经常会通过一些通用的测试工具测
首先,提个问题:64bit x
接到一个黑盒的case:一套双

CPU的电源状态分类

有感于CPU的各种电源状态描述复杂且混乱无比。常见的诸如S0/S1/S3,C0/C3一会儿又成了P开头的P0,P1,还有一堆P01~P0n之类的让人一时半会儿摸不着头脑,这次就一次性归纳一下吧。

继续阅读“CPU的电源状态分类”
推荐阅读:
经常会通过一些通用的测试工具测
首先,提个问题:64bit x
接到一个黑盒的case:一套双

一个物理内存分布导致的问题

事出前些日子有人咨询我:“在某个关闭NUMA的双CPU机器上,通过lat_mem_rd跑分,为什么会出现差不多2倍的跑分差距?” 话说这里的lat_mem_rd是lmbench 的一个组件,它通过模拟排序来测试系统的内存读性能——主要是时延为主。

继续阅读“一个物理内存分布导致的问题”
推荐阅读:
继续在NUMA和性能差异的路上
首先列出本站之前相关的几篇帖子
NUMA(Non-Unifor

时延的误区

时延 latency(亦称为延时、潜伏时间等),是衡量一个系统性能的重要指标。这里就简单的谈谈在时延这个概念上经常容易犯的几个误区吧。

继续阅读“时延的误区”
推荐阅读:
经常会通过一些通用的测试工具测
首先,提个问题:64bit x
接到一个黑盒的case:一套双