蓝盟IT小贴士,来喽!
概要
开发人员在高性能系统性能调整过程中,经常遇到各种背景噪声干扰,收集到的数据不准确。 本文主要从CPU和Linux的角度分析各种噪声的成因和去除方法。 最终目标是建立基准,在特定cpu上实现“0”噪声。
Cpu运行中存在的几种背景噪声源
1 .调度程序:
进程调度程序对系统的影响很小。 Linux内核通常使用公平的时分调度策略( CFS )。 要调整调度程序的行为,需要特定的参数来最大限度地减少对测量过程的干扰。
2 .中断:
中断是系统必须响应的事件,具有高优先级,可以抢占正常用户进程。
a .硬件故障
主要是外部事件,CPU需要非常及时的响应。 例如,需要注意的是,最常见的IO、时钟和Linux内核所支持的硬件中断的数量很大并且具有兼容性。 可以取消响应相对特殊的中断。
b .软件中断软件irq
软中断是硬件中断处理的派生子系统。 LInux硬件中断响应只需处理必须立即响应的操作,就可以将处理延迟的操作传递给软中断。 Linux有10种软中断,然后进行分析。
c. Workqueue
Workqueue也是LInux中常见的延迟操作任务类型
3 .电源管理:
现代处理器通常支持高级电源管理功能,以更高效地利用能源。 这些电源管理功能会影响性能评估,即使使用不当也是如此。
4 .时间来源:
为了进行绩效评价,时间戳是必不可少的。 时间戳的正确收集方法也很重要。
以上几个因素常常相互纠缠。 例如,过程调度器需要时钟中断,并且功率管理子系统需要调度器。 时间戳的收集和微体系结构也是相关的。 然后,分析每个案例。
isol CPUs=受管理的_ IRQ CPUs列表
Isolcpus主要从调度器的调度算法中分离目标cpu。 换句话说,从用户进程的角度来看,调度程序不会主动将进程调度到目标cpu。 但是,仅使用此参数不能保证所有软/硬中断和其他内核组件都不能在目标cpu上运行。
nohzfull=cpulist此参数具有相对削弱的nohz版本。 nohz表示当目标cpu的runqueue中没有可调度实体时,cpu将处于空闲状态,cpu将停止时钟tick (默认值为10ms )。 当runqueue上只有一个活动实体时,nohzfull会继续停止时钟tick。 这大大减少了对唯一正在运行的进程的干扰(而不是100% )。 值得注意的是,nohzfull通常不会在非服务器版本的内核中打开,必须重新编译内核。 可以选中相应的内核编译选项CONFIGNOHZFULL=y。 如果未打开,启动日志将显示警告。 同时nohzfull也抑制了rcunocbs=cpulist