[TOC]
目前的调度器设计总是假设 M 到 P 的访问速度是一样的,即不同的 CPU 核心访问多级缓存、内存的速度一致。 但真实情况是,假设我们有一个田字形排布的四个物理核心:
L2 ------------+
| |
+--+--+ |
L1 L1 |
| | |
+------+------+ |
| CPU1 | CPU2 | |
+------+------+ L3
| CPU3 | CPU4 | |
+------+------+ |
| | |
L1 L1 |
+--+--+ |
| |
L2-------------+
那么左上角 CPU1 访问 CPU 2 的 L1 缓存,要远比访问 CPU3 或 CPU 4 的 L1 缓存,在物理上,快得多。 这也就是我们所说的 NUMA(non-uniform memory access,非均匀访存)架构,更一般地说这种架构的系统是也是一个分布式的系统。
针对这一点,Go 官方已经提出了具体的调度器设计 [VYUKOV, 2014],但由于工作量巨大,甚至没有提上日程。
TODO: 介绍设计
TODO:
- [VYUKOV, 2014] Vyukov, Dmitry. NUMA-aware scheduler for Go. 2014
Go under the hood | CC-BY-NC-ND 4.0 & MIT © changkun