CPU 与内存:地图、数字、怎么估算
一次访存经过哪些框,每个框多大、多快,以及怎么把这些数合起来,估一段代码的访存时间。
随时要翻的东西:硬件地图、架构地图、各个部件的数字、估算方法、perf 怎么用、性能瓶颈卡片。和文章不同,这几页会跟着新文章一直更新。
一次访存经过哪些框,每个框多大、多快,以及怎么把这些数合起来,估一段代码的访存时间。
一条行情从网卡进来,到变成一笔报单、拿回成交,经过哪些线程和数据结构;每一段大概多久;工业级系统怎么分线程、在哪里放队列、哪里必须汇合。
perf 回答两个问题:时间花在哪个函数、哪条指令上,CPU 是在算还是在等。四个命令各管一件事:perf stat 出总账,record 加 report 找热函数,annotate 找热指令,c2c 查多线程抢缓存行。开工前查权限、符号表和采样事件;IPC、缓存缺失率、分支失败率、热点占比各有一条判读线(出自 Intel 开源的 intel-performance-skills)。最后在一台拿不到硬件计数器的虚拟机上真跑一遍:perf 指到一个单累加器求和,样本落在加法的下一条指令上,拆成四个累加器后快了 3.3 倍。
常见的性能瓶颈各一张卡片:在 perf 里看到什么、为什么慢、怎么改、怎么确认改对了,再链到站内讲这个机制的文章。后两节是写新代码时一开始就避开的坑,以及让程序在不同 CPU 上自动选指令集。