离奇的CPU利用率

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

继续阅读“离奇的CPU利用率”
推荐阅读:
去年的DCDC,我主要介绍了基
之前收到公司一个大牛的PPT,
既然都是9102年了,云计算早

DCDC’19-NUMA的优势和陷阱

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

继续阅读“DCDC’19-NUMA的优势和陷阱”
推荐阅读:
接到一个黑盒的case:一套双
之前收到公司一个大牛的PPT,
既然都是9102年了,云计算早

高性能编程的困境

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

继续阅读“高性能编程的困境”
推荐阅读:
一直没有写过关于Linux内核
尽管当前已经是多核心SMP时代
接到一个黑盒的case:一套双

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

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

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

Hyper Thread超线程的种种

说起HT技术,这早就是15年以前的技术了,当下主流的X86 CPU就没见过不支持HT技术的。简而言之,HT技术就是一个把物理CPU core虚拟成多个逻辑CPU并允许并行执行指令的功能。之所以写这篇文章主要是回答几个常见的问题:

  • 为什么有HT技术,为什么HT只有单核心双线程?
  • HT和真实的core到底有什么区别?
继续阅读“Hyper Thread超线程的种种”
推荐阅读:
长久以来,我们对计算机资源的理
如果大家了解一点CPU的知识,
RDT技术,全称为Resour

LLC缓存一致性保障原理

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

继续阅读“LLC缓存一致性保障原理”
推荐阅读:
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基
之前收到公司一个大牛的PPT,

CPU的电源状态分类

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

继续阅读“CPU的电源状态分类”
推荐阅读:
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基
之前收到公司一个大牛的PPT,

应用程序状态切换检测

任何一个合理的应用程序的运行时间内,微观上都会存在或多或少的“状态切换”。所谓状态切换的定义就是在用户可感知的特征变化。可感知的特征可以理解为对各种资源的需求变化的特性。
有点绕,举个简单例子:一个SQL数据库,在只有一个用户连接的时候,每次用户的访问都会出发一个状态切换事件,而当用户使用长连接(pipe line)去执行多个SQL命令时,由于SQL的不同,每个SQL之间就是一个状态切换。

继续阅读“应用程序状态切换检测”
推荐阅读:
5月中旬,我参加了在加利福尼亚
讲点关于工程师的理念和哲学吧。
似乎每次开头都要讲述一下计算机

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

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

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

时延的误区

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

继续阅读“时延的误区”
推荐阅读:
接到一个黑盒的case:一套双
去年的DCDC,我主要介绍了基
之前收到公司一个大牛的PPT,