HyperThread的种种

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

  • 为什么有HT技术,为什么HT只有单核心双线程?
  • HT和真实的core到底有什么区别?
继续阅读“HyperThread的种种”
推荐阅读:
如果大家了解一点CPU的知识,
有感于CPU的各种电源状态描述
任何一个合理的应用程序的运行时

Linux CFS调度器

一直没有写过关于Linux内核调度器的内容,这几天被问起,简单的讲了讲,收到一堆challenge,这次决定做一个通篇总结方便自己整理思路。
要说Linux2.4和2.6最大的差异就在于CFS调度器的引入。CFS是 Completely Fair Scheduler 的缩写。不过讲真话,个人并不完全认同“完全公平”调度是这个算法的本意,如何裁决资源抢占(preempt,字面上是优先权)才是这个调度器的本意。

继续阅读“Linux CFS调度器”
推荐阅读:
尽管当前已经是多核心SMP时代
近一段时间一直在做些任务负载特
众所周知的是,CPU的频率和它

LLC缓存一致性保障原理

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

继续阅读“LLC缓存一致性保障原理”
推荐阅读:
有感于CPU的各种电源状态描述
事出前些日子有人咨询我:“在某
时延 latency(亦称为延

CPU的电源状态分类

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

继续阅读“CPU的电源状态分类”
推荐阅读:
如果大家了解一点CPU的知识,
事出前些日子有人咨询我:“在某
时延 latency(亦称为延

应用程序状态切换检测

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

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

Linux的tickless设置

尽管当前已经是多核心SMP时代,但作为”多用户,多任务“操作系统,Linux还是通过分时复用的方式,即给一个个任务分配不同的时间片从而实现用户感知上的多任务。而各种中断则拥有最高的响应权限,可以直接导致线程的切换。

问题来了。记得我之前曾经在某篇帖子上说过:低时延和大吞吐量有的时候是一对矛盾。解决低时延,系统需要多个不断切换的线程接收用户端的数据——想象一下加特林机枪的射速是通过多枪管轮流发射达到低时延的目的;而大吞吐量往往需要一个不受干扰的持续运行状态——就如一条生产线,每一次更换产品都会带来一系列的时间损失。

继续阅读“Linux的tickless设置”
推荐阅读:
一直没有写过关于Linux内核
近一段时间一直在做些任务负载特
众所周知的是,CPU的频率和它

如何让SElinux和Docker并存

作为Redhat/Centos/Fedora 系的Linux特性之一,SElinux是一个相对简单易用安全管理工具。具体的细节我们这边就先不展开,简单的举个例子就是,假设现在某个网站的漏洞允许用户上传一个页面文件(比如php文件)到任意目录,如果有了SELinux的保护,不同的MAC权限保证了上传的文件依然无法被执行。

继续阅读“如何让SElinux和Docker并存”
推荐阅读:
自打从硬件方向研究性能优化起,
之前我们通过几个概念简单的介绍
这一段时间,凡是提及容器技术的

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

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

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

时延的误区

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

继续阅读“时延的误区”
推荐阅读:
如果大家了解一点CPU的知识,
有感于CPU的各种电源状态描述
事出前些日子有人咨询我:“在某

从stream的多线程协同效率说起

似乎每次开头都要讲述一下计算机或者说x86架构的演进历史,这似乎成了站长Litrin的一种习惯。现在的x86架构CPU频率以及最大IPC已经接近极限,厂商倾向于将越来越多的核心通过SMP技术多线程负载。不妨做一个思想实验:将计算机的任务想象为搬砖,CPU核心则是搬砖的工人。根据我们的常识,工人越多则任务完成的越快,也就是意味着核心数和性能是成正比的。然而事实真的如此吗?

继续阅读“从stream的多线程协同效率说起”
推荐阅读:
继续在NUMA和性能差异的路上
任何一个合理的应用程序的运行时
5月中旬,我参加了在加利福尼亚