上下文切换、页表与 TLB
线程比进程轻,轻在切换之后 TLB 和缓存还能接着用,不在切换本身。TLB 没有 MESI:同一个进程里任何一个线程改了页表,此刻还装着这份页表的核都要被打断一次,绑核和 isolcpus 挡不住,所以热路径进程跑起来以后地址空间只读不改。
标签
4 篇
线程比进程轻,轻在切换之后 TLB 和缓存还能接着用,不在切换本身。TLB 没有 MESI:同一个进程里任何一个线程改了页表,此刻还装着这份页表的核都要被打断一次,绑核和 isolcpus 挡不住,所以热路径进程跑起来以后地址空间只读不改。
谁先跑、跑多久:调度类和时间片,实时优先级的三个坑,优先级反转的两种修法,PREEMPT_RT 为什么 HFT 常常不用,以及一台低延迟机器从 BIOS 到 sysctl 要动哪些开关。
先用 stat 看总账,再用 record 和 report 找到占 98% 样本的函数,最后用 annotate 看到样本全落在加法后面一条指令上:那是一条一环扣一环的加法链,拆成四路就快了 3.3 倍。拿不到硬件计数器时,cpu-clock 采样照样能用;报告里只剩地址,先查符号表和程序所在的路径。
低延迟系统怕的是抖动,不是平均值。目标是让热线程成为它那个物理核上唯一在跑的东西:绑核消掉迁移,隔离参数把调度、时钟中断、RCU 和设备中断赶到打杂核,关超线程、禁深睡、锁频率去掉核自身的波动,最后让热线程只碰本节点的内存。
