绑核实际上就是把vcpu跟物理核之间进行binding,这样在操作系统层面就知道如何把vcpu的线程如何去调度。具体策略上我们都可以控制,比如下面的几种形式
- 不绑定,纯自由竞争 - 目前云主机的模式
2. 1:1绑核 vCPU和逻辑核一一绑定(指超线核|逻辑核) - EPC的模式
3. 区间绑核|范围绑核 - 一个vcpu绑定到物理核的一个范围上。
假设一台虚拟机有2c,物理机有16c,我们可以把这2c绑定到物理机的0-7c之间,也可以绑定到0-16c的区间,甚至可以把2c都绑定0c上。最后一种模式就会产生类似超售的效果。
我们也可以把多台虚拟机的2c帮到0-7c之间,这种叠加状态也类似于超售卖。
区间绑核 共享L3缓存 ,在负载比较低的情况下,可以享受单边Socket的总内存带宽(交织模式interleave)
,和单边numa节点的缓存,争抢内存和缓存性能(CPU不会争抢),可能比1:1绑核性能更好。
1:1绑核 开了超线程 共享L1、L2缓存 ,但是享受不到多的缓存,性能不一定比范围绑核好,看业务场景,对L1、L2有需求的业务可能会好点。
https://www.expreview.com/70525.html
新调度做的叫naf策略(numa affinity 策略),内容更倾向于是区间绑核|范围绑核,属于区间绑核 的一类。
主要内容:CPU和内存尽量分配在一边的numa 上,确保性能。
做这个策略的时候,需要观察这个宿主上所有虚机分布。
面临的问题:存量用户是否享受到这个策略,迁移虚机需要关机?还有一些高性能计算/程序 线程进程根据现在的虚机分布的numa节点来运行的,迁移虚机是否客户感知到?
未来是否会做到更细致粒度的绑核?比如单边numa,有8个CCX,每个8C,把CPU和内存绑在CCX范围内。
其他知识:
比如AMD 7542 ,128C ,2个numa节点,一边numa 有4个CCD,每个CCD有2个L3缓存
AMD一边numa可能有多个缓存
Intel 一边numa共享一个L3缓存,内存架构也不是均衡分布的,所以单socket不一定享受到一半的内存带宽,amd是平均分布的就可以
交织模式:把同一块内存分布到不同的通道中去,这种技术叫做交织,Interleaving. 这样无论Cache命中与否都可以同时存取,多通道的技术才能发挥更大的用处。内存都交织在一起,单边socket享受更多的内存带宽。
内存交织开启配置生效前提条件为每个内存通道都插了内存