暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

信创操作系统层面提供的CPU性能应当如何优化?

190

点击标题下「蓝色微信名」可快速关注

技术社群的这篇文章《信创操作系统层面提供的CPU性能应当如何优化?》,探讨的是信创操作系统层面提供的CPU性能应当如何优化,可以帮我们了解有什么相对通用的方法或配置能提升操作系统对硬件资源的有效利用。


观点1

对于CPU的性能调优,可以从两个角度着手:

一是找出不必要的工作,降低工作负载;

二是提高目前CPU的性能上限。

对于第一种情况,通过对CPU使用的观测分析,优化相关的应用程序。常用的分析方法可以是:"工具法","USE方法"(见参考文献)。

1)可以遍历操作系统现有的统计分析工具,例如top\vmstat\mpstat\pidstat\perf等,排序CPU占用进程、栈跟踪等;

2)使用USE方法(Utilization Saturation and Errors Method),检查CPU的使用率、饱和度、错误。

3)基于1和2的结果,通过cgroup资源控制,或nice等级设定,按照用户或进程粒度,来压降某些应用的CPU占用,从而控出更多CPU资源。

第二种情况,有如下几种方式:

1)固化CPU的频率,为了节能降耗,一些设备在出厂后将CPU模式置为均衡模式,在空闲情况下CPU主频较低,需要在持续的高密集运算后升高频率。在BIOS层面,调整CPU的电源策略调整为Performance(最大性能),此时无动态调频,可保持运行在标称频率。

2)第一步完成后,确认是动态调频器是否为性能模式:

cat sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

确认值是否为performance,如果不是,则修改。

3)xc环境下,部分CPU产品的跨路访问延迟问题,相较于Intel,还是比较大的,多核 CPU 服务器,可开启 NUMA 绑核功能。在资源条件充裕的情况下,可考虑使用NUMA绑核有提高性能。通过 BIOS 选项开启绑核支持。在云环境下,需要在平台侧配置绑核;物理机层可通过numactl绑核。

4)减少进程间的CPU抢占,通过taskset与启动参数isolate隔离,将特定的core空闲出来,给指定进程使用;

参考文献:Brendan gregg.性能之巅[M].第2版.徐章宁,吴寒思,余亮译.北京:电子工业出版社,2022年:242-250


观点2

绑定核心

中断是CPU Core收到的,可以让关键线程绑定在某个Core上,然后避免各种中断源(IRQ)向这个Core发送中断。

绑定程序在一个核上运行,有两种方法:taskset和sched_setaffinity,其中sched_setaffinity是程序代码对绑核的实现,我们主要介绍通过taskset进行绑核。

CPU Affinity

CPU亲和性,是指在SMP结构下,能够将一个或多个进程绑定到一个或多个处理器上运行。

查看进程分配的CPU Core,可以使用taskset命令查看:

taskset -c -p

该CPU亲和力列表表明该进程可能会被安排在3-5中任意一个CPU Core上。

更具体地查看某进程当前正运行在哪个CPU Core上,我们可以使用top命令查看:

top -p

taskset

使用taskset命令将进程绑定到指定核,比如将31693绑定到1,2,3核上

taskset -cp 1,2,3 31693

该例会将PID为31693的进程绑定到1-3核上运行。

屏蔽硬中断(硬盘、网卡)

中断源(IRQ)向CPU Core发送中断,CPU Core调用中断处理程序对中断进程处理。我们可以通过改写/proc/irq/*/smp_affinity文件,避免中断源(IRQ)向某些CPU Core发送中断。该方法对硬盘、网卡等设备引起的硬中断有效。

SMP_AFFINITY

SMP,即symmetric multiprocessing(对称多处理器),通过多个处理器处理程序的方式。smp_affinity文件处理一个IRQ的中断亲和性。我们可用/proc/irq/{IRQ_NUMBER}/smp_affinity_list来制定所需要绑定的核,这里的IRQ_NUMBER就是前面中断输出中的IRQ号,比如我们想将ens160的所有中断绑定到CPU1和CPU2。

内核参数

Watchdog

Watchdog在进行监控的过程中会触发中断,会引起抖动,可通过以下命令进行关闭:

echo 0 > proc/sys/kernel/watchdog

sched_latency_ns

指定在发生任务切换之前,任务可以在一个 CPU 核心上运行的最长时间(以纳秒为单位)

echo 24000000 > proc/sys/kernel/sched_latency_ns

sched_min_granularity_ns

指定了最小的时间粒度(以纳秒为单位)不会被抢占的时间,在这个时间粒度内,一个任务可以在一个 CPU 核心上运行。

echo 10000000 > proc/sys/kernel/sched_min_granularity_ns

sched_rt_runtime_us

用于控制系统中实时任务的运行时间片(以微秒为单位),默认值为950000,总共为1000000。设置为-1则禁止这个限制。

echo -1 > proc/sys/kernel/sched_rt_runtime_us

stat_interval

以秒为单位的更新虚拟内存统计信息的间隔。默认值是 1 秒,这导致每秒进行信息统计。将其更改为 1000 秒可以避免这些中断,至少延迟了 16 分钟。

调频策略

scaling_governor调配策略的作用是控制CPU如何管理和调整其运行频率以平衡性能和能耗,同以下命令,选择“performance”使CPU保持在最高频率,以提供最大的计算性能。

echo performance > sys/devices/system/cpu/cpu57/cpufreq/scaling_governor


观点3

优化操作系统层面提供的CPU性能可以通过以下方式实现:

调整调度策略:优化进程和线程的调度算法,确保任务在CPU上高效运行。可以考虑使用多级反馈队列调度算法等。

CPU亲和性设置:将特定的进程或线程与特定的CPU核心关联,以减少CPU核心间的上下文切换和缓存失效,提高性能。

实时性能监控:实时监控CPU的利用率、负载和响应时间等指标,及时发现并解决性能瓶颈。

调整中断处理:优化中断处理程序,减少中断延迟和消耗,提高系统响应速度。

CPU频率调节:根据负载情况动态调节CPU的频率,实现能效与性能的平衡。

内存管理优化:优化内存分配算法和页面置换策略,减少内存访问延迟,提高CPU性能。

使用多线程和并行编程:充分利用多核CPU的并行计算能力,通过多线程和并行编程技术提高CPU利用率和性能。

通过这些优化措施,可以提高操作系统层面提供的CPU性能,提升系统的整体运行效率。


如果您认为这篇文章有些帮助,还请不吝点下文章末尾的"点赞"和"在看",或者直接转发朋友圈,



近期更新的文章:
统一安全管理平台有什么用?
信创云原生的关键是什么?
快速了解RAG
MySQL中使用utf8的见解
MySQL大数据表处理策略

热文鉴赏:
揭开"仿宋"和"仿宋_GB2312"的神秘面纱
Linux的"aarch"是多了个"a"?
中国队“自己的”世界杯
你不知道的C罗-Siu庆祝动作
大阪环球影城避坑指南和功略
推荐一篇Oracle RAC Cache Fusion的经典论文
"红警"游戏开源代码带给我们的震撼

文章分类和索引:
公众号1600篇文章分类和索引

文章转载自bisal的个人杂货铺,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论