开发者
资源
修改 CPU 的预取开关
修改 CPU 的预取开关
发表于2024/04/21
1126
局部性原理分为时间局部性原理和空间局部性原理: 

● 时间局部性原理(temporal locality):如果某个数据项被访问,那么在不久的将来它可能再次被访问。 

● 空间局部性原理(spatial locality):如果某个数据项被访问,那么与其地址相邻的数据项可能很快也会被访问。 

CPU将内存中的数据读到CPU的高速缓冲Cache时,会根据局部性原理,除了读取本次要访问的数据,还会预取本次数据的周边数据到Cache里面,如果预取的数据是下次要访问的数据,那么性能会提升,如果预取的数据不是下次要取的数据,那么会浪费内存带宽。 

对于数据比较集中的场景,预取的命中率高,适合打开CPU预取,反之需要关闭CPU预取。目前发现speccpu和X265软件场景适合打开CPU预取,STREAM测试工具、Nginx和数据库场景需要关闭CPU预取。 

修改方式 

按照B 进入BIOS界面的步骤进入BIOS,然后在BIOS的如下位置设置CPU的预取开关。 

cke_1669.png

cke_2065.png

在Linux内核2.6.17版本之前,Linux内核为每个CPU设置一个周期性的时钟中断,Linux内核利用这个中断处理一些定时任务,如线程调度等。这样导致即使CPU不需要定时器的时候,也会有很多时钟中断,导致资源的浪费。Linux 内核2.6.17版本引入了nohz机制,实际就是让时钟中断的时间可编程,减少不必要的时钟中断。 

修改方式 

执行cat /proc/cmdline查看Linux 内核的启动参数,如果有nohz=off 关键字,说明nohz机制被关闭,需要打开。修改方法如下: 

说明修改前后,可以通过如下命令观察timer_tick的调度次数,其中$PID为要观察的进程ID,可以选择CPU占用高的进程进行观察: 

perf sched record -- sleep 1 -p $PID 

perf sched latency -s max 

输出信息中有如下信息,其中591字段表示统计时间内的调度次数,数字变小说明修改生效。 

timer_tick:(97) | 7.364 ms | 591 | avg: 0.012 ms | max: 1.268 ms 

步骤1 在“/boot”目录下通过find -name grub.cfg找到启动参数的配置文件。 

步骤2 在配置文件中将nohz=off去掉。 

步骤3 重启服务器。 

----结束 

收藏举报
Level 1
0
帖子
0
粉丝
0
获赞