CPU 中央处理器调优

news2024/11/25 12:40:32

文章目录

      • 1.1 CPU处理方式:
      • 1.2 查看CPU一秒钟有多个切换多少次。
      • 1.3 调整进程优先级使用更多CPU
      • 1.4 CPU亲和力
      • 1.5 CPU 性能监控
      • 1.6 CPU 利用率比例分配:


1.1 CPU处理方式:

  1. 批处理,顺序处理请求。(切换次数少,吞吐量大)
  2. 分时处理。(如同"独占",吞吐量小)(时间片,把请求分为一个一个的时间片,一片一片的分给CPU处理)我们现在使用x86就是这种架构
  3. 实时处理

例:
批处理——以前的大型机(Mainframe)上所采用的系统,需要把一批程序事先写好(打孔纸带),然后计算得出结果
分时——现在流行的PC机和服务器都是采用这种运行模式,即把CPU的运行分成若干时间片分别处理不同的运算请求
实时——一般用于单片机上,比如电梯的上下控制,对于按键等动作要求进行实时处理

1.2 查看CPU一秒钟有多个切换多少次。

查看内核一秒钟中断CPU次数:

grep HZ /boot/config-6.6.0-28.0.0.34.oe2403.x86_64
CONFIG_NO_HZ_COMMON=y
# CONFIG_HZ_PERIODIC is not set
# CONFIG_NO_HZ_IDLE is not set
CONFIG_NO_HZ_FULL=y
CONFIG_NO_HZ=y
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
# CONFIG_HZ_300 is not set
CONFIG_HZ_1000=y
CONFIG_HZ=1000
CONFIG_MACHZ_WDT=m

下面是这些配置项的含义:

  1. CONFIG_NO_HZ_COMMON=y:启用无时钟滴答(No HZ)的通用部分。无时钟滴答是一种内核调度器优化,它减少了定时器中断的频率,从而减少了处理器的开销。

  2. CONFIG_HZ_PERIODICCONFIG_NO_HZ_IDLE 被注释掉了,这意味着它们没有被设置。CONFIG_HZ_PERIODIC 用于设置周期性时钟滴答,而 CONFIG_NO_HZ_IDLE 用于设置空闲时钟滴答。

  3. CONFIG_NO_HZ_FULL=y:启用完全无时钟滴答模式。在这种模式下,当CPU处于空闲状态时,时钟滴答会被完全关闭,以节省能源。

  4. CONFIG_NO_HZ=y:启用无时钟滴答功能。

  5. CONFIG_HZ_100CONFIG_HZ_250CONFIG_HZ_300 被注释掉了,这意味着它们没有被设置。这些选项用于设置内核时钟滴答频率,单位是赫兹(Hz)。例如,CONFIG_HZ_100 会设置时钟滴答频率为100Hz。

  6. CONFIG_HZ_1000=y:设置内核时钟滴答频率为1000Hz。

  7. CONFIG_HZ=1000:定义了时钟滴答频率为1000Hz。

  8. CONFIG_MACHZ_WDT=m:这是一个模块化的配置选项,用于启用一个高精度的看门狗定时器(Watchdog Timer),它通常用于系统监控和恢复。

这些配置项通常在Linux内核的.config文件中设置,用于在编译内核之前配置内核的行为。不同的配置项会影响内核的性能、功耗和实时性。

1.3 调整进程优先级使用更多CPU

调整进程nice值,让进程使用更多的CPU
优先级控制:
nice值 #范围, -20 ~ 19 越小优先级越高 普通用户0-19
nice
作用:以什么优先级运行进程 。默认优先级是0
语法: nice -n 优先级数字 命令
例:

[root@localhost ~]#  nice -n -5 vim a.txt   # vim进程以-5级别运行
查看:
[root@localhost ~]# ps -axu | grep a.txt
root        3345  0.0  0.0  22116  2248 pts/0    S+   13:56   0:00 grep --color=auto a.txt
[root@localhost ~]#  top -p   3345
[root@localhost ~]# renice -n -21 24129  #检测一下范围: -20 - 19
24129: old priority 5, new priority -20
[root@localhost ~]# renice -n 20 24129
24129: old priority -20, new priority 19

1.4 CPU亲和力

taskset 作用:在多核情况下,可以认为指定一个进程在哪颗CPU上执行程序,减少进程在不同CPU之前切换的开销

安装:

[root@xuegod63 ~]# rpm -qf `which taskset `
util-linux-2.23.2-43.el7.x86_64

语法: taskset -c N 命令
例1:本机是4核CPU ,指定vim命令在第一个CPU上运行

[root@xuegod63 ~]# taskset -c 0 vim a.txt    #1号CPU ID是0
[root@xuegod63 ~]# ps -axu | grep vim
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      2614  1.3  0.2 143696  3332 pts/0    S+   18:39   0:00 vim a.txt
[root@xuegod63 ~]# taskset -p  2614    #  -p 要查看的进程ID
pid 2614's current affinity mask: 1    #CPU亲和力掩码,1代表第一个CPU核心

例2:查sshd进程运行在哪几个CPU上

[root@xuegod63 ~]# ps -axu | grep sshd
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      2030  0.0  0.0  64068  1140 ?        Ss   18:26   0:00 /usr/sbin/sshd
 [root@xuegod63 ~]# taskset -p 2030
pid 2030's current affinity mask: f   #说明sshd在4颗CPU上随机进行切换。

说明:
Cpu ID 号码,对应的16进制数为:
CPU ID: 7 6 5 4 3 2 1 0
对应的10数为: 128 64 32 16 8 4 2 1
当前, 我的系统中cpu ID 的为(0,1,2,3)
pid 2030’s current affinity mask: f的值为cpu ID 16进制的值的和(1+2+4+8=f),转换成二进制为:1111
这个说明了(pid=2030)的这个sshd进程工作在cpu ID 分别为0,1,2,3这个四个cpu上面的切换。
注: 我们的CPU是4核心,所以taskset -c后可以跟: 0,1,2,3

例:指定vim c.txt 程序运行在第2和第4个CPU上


[root@xuegod63 ~]#  taskset -c 1,3 vim b.txt
[root@xuegod63 ~]#  ps -axu | grep vim
Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.8/FAQ
root      6314  1.5  0.2 143612  3280 pts/1    S+   14:41   0:00 vim b.txt
root      6317  0.0  0.0 103300   848 pts/2    S+   14:41   0:00 grep vim
[root@xuegod63 ~]# taskset -p    6314 
pid 6314's current affinity mask: a  

a为十进制的10=2+8
注:在哪个CPU上运行,那一位就赋为1 。

1.5 CPU 性能监控

理解运行队列,利用率,上下文切换对怎样CPU 性能最优化之间的关系,早期提及到性能是相对于基准线数据的,在一些系统中,通常预期所达到的性能包括:
Run Queues ­ 每个处理器应该运行队列不超过1­3 个线程.
例如: 一个双核处理器应该运行队列不要超过6 个
注:有两个特殊的进程永远在运行队列中待着:当前进程和空进程idle。
在这里插入图片描述
在这里插入图片描述

1.6 CPU 利用率比例分配:

如果一个CPU 被充分使用,利用率分类之间均衡的比例应该是
65% ­ 70% User Time #用户态
30% ­ 35% System Time #内核态
0% ­ 5% Idle Time #空闲
Context Switches ­ 上下文切换的数目直接关系到CPU 的使用率,如果CPU 利用率保持在上述均衡状态时,有大量的上下文切换是正常的。

实例1:持续的CPU 利用率
在这个例子中,这个系统的CPU被充分利用

[root@xuegod63 ~]# vmstat  1 10  # 本机为单核CPU,执行vmstat显示以下内容
procs    --------memory----------      ---swap--  -----io----   --system--  -----cpu-----
 r  b      swpd  free   buff  cache    si   so     bi    bo   in     cs     us sy  id  wa  st
 3  0      0  130644  86244 609860    0    0     4     1    531   25 	 0  0  20  0   0
 4  0      0  130620  86244 609860    0    0     0     0    638   62 	 0  0  14  0   0
2  0      0  130620  86244 609860    0    0     0     0     658   62 	 0  0  13  0   0
4  0      0  130620  86244 609860    0    0     0     0     688   62 	 0  0  11  0   0

注:
根据观察值,我们可以得到以下结论:
1、有大量的中断(in) 和较少的上下文切换(cs)。这意味着一个单一的进程正在大量使用cpu
2、进一步显示某单个应用,user time(us) 经常在86%或者更多。
执行top -》按P-》查看使用CPU最多的进程
3、运行队列还在可接受的性能范围内,其中有2个地方,是超出了允许限制.

实例2:超负荷调度
在这个例子中,内核调度中的上下文切换处于饱和
#vmstat 1 #通过查看vmstat输出结果,分析当前系统中出现的问题

procs memory swap io system cpu
r b swpd    free   buff   cache si so bi   bo      in   cs   us sy  wa  id
2 1 207740 98476 81344 180972 0 0 2496 0      900 2883  4 12  57  27
0 1 207740 96448 83304 180984 0 0 1968 328    810 2559  8 9   83   0
0 1 207740 94404 85348 180984 0 0 2044 0      829 2879   9 6   78  7
0 1 207740 92576 87176 180984 0 0 1828 0      689 2088   3 9   78  10
2 0 207740 91300 88452 180984 0 0 1276 0      565 1282   7 6   83  4
3 1 207740 90124 89628 180984 0 0 1176 0      551 1229   2 7   91  0

根据观察值,我们可以得到以下结论:
1、上下文切换数目高于中断数目,说明kernel中相当数量的时间都开销在:上下文切换线程.
2、大量的上下文切换将导致CPU 利用率不均衡,很明显实际上等待io 请求的百分比(wa)非常高,以及user time百分比非常低(us).  说明磁盘比较慢,磁盘是瓶颈
3、因为CPU 都阻塞在IO请求上,所以运行队列里也有相当数个的可运行状态线程在等待执行.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2232420.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#:强大而优雅的编程语言

在当今的软件开发领域,C#作为一种广泛应用的编程语言,以其强大的功能、优雅的语法和丰富的生态系统,受到了众多开发者的喜爱。本文将深入探讨 C#的各个方面,展示它的魅力和优势。 一、C#的历史与发展 C#是由微软公司开发的一种面…

信息安全工程师(74)网络安全风险评估技术方法与工具

前言 网络安全风险评估是依据有关信息安全技术和管理标准,对网络系统的保密性、完整性、可控性等安全数据进行科学评价的过程。 一、网络安全风险评估技术方法 风险评估程序 资产评估:确定需要保护的资源。威胁评估:确定可能对资产造成危害的…

【InfluxDB】InfluxDB 2.x基础概念及原理

InfluxDB简介 什么是时序数据库 时序数据库,全称时间序列数据库(Time Series Database,TSDB),用于存储大量基于时间的数据。时序数据库支持时序数据的快速写入、持久化,多维度查询、聚合等操作&#xff0…

sparkSQL面试题

一、查询所有数学课程成绩大于语文课程成绩的学生学号 数据 1,yuwen,43 1,shuxue,55 2,yuwen,77 2,shuxue,88 3,yuwen,98 3,shuxue,65 3,yingyu,88 基本步骤: 进行行转列比较语文与数学的成绩 SQL代码: with t1 as(SELECT id,sum(if(name yuwen,sc…

金融标准体系

目录 基本原则 标准体系结构图 标准明细表 金融标准体系下载地址 基本原则 需求引领、顶层设计。 坚持目标导向、问题导向、结果 导向有机统一,构建支撑适用、体系完善、科学合理的金融 标准体系。 全面系统、重点突出。 以金融业运用有效、保护有力、 管理高…

Spring Boot解决 406 错误之返回对象缺少Getter/Setter方法引发的问题

目录 前言1. 问题背景2. 问题分析2.1 检查返回对象 3. 解决方案3.1 确保Controller返回Result类型3.2 测试接口响应 4. 原理探讨5. 常见问题排查与优化建议结语 前言 在Spring Boot开发中,接口请求返回数据是系统交互的重要环节,尤其在开发RESTful风格的…

如何自学机器学习?

自学机器学习可以按照以下步骤进行: 一、基础知识准备 数学基础: 高等数学:学习微积分(包括导数、微分、积分等)、极限、级数等基本概念。这些知识是后续学习算法和优化方法的基础。 线性代数:掌握矩阵…

SQL,力扣题目1709,访问日期之间最大的空档期

一、力扣链接 LeetCode_1709 二、题目描述 表: UserVisits ------------------- | Column Name | Type | ------------------- | user_id | int | | visit_date | date | ------------------- 该表没有主键,它可能有重复的行 该表包含用户访问…

C# 日志框架 NLog、log4net 和 Serilog对比

文章目录 前言NLog、log4net 和 Serilog 三个框架的详细对比:一、NLog优点:缺点:二、 log4net优点缺点三、Serilog优点缺点四、Serilog使用举例总结前言 NLog、log4net 和 Serilog 三个框架的详细对比: NLog、log4net 和 Serilog 是三个非常流行的 .NET 日志框架,它们各自…

电路设计过程就是波形整形过程

这种说法有一定的道理。在电路设计中,常常需要对输入的电信号波形进行处理和调整,以满足后续电路或系统的要求,这在某种程度上可以理解为波形整形的过程。 例如,在数字电路中,输入的信号可能存在噪声、干扰或者不符合…

系统架构设计师(软考高级)一站式通关课程

系统架构设计师(软考高级) 一站式通关课程 系统架构设计师(软考高级)教程(三连评论分享链接!) 🎯 课程亮点: 全面覆盖: 从基础概念到高级应用,涵盖…

源码阅读心得---如何从零开始阅读一个框架的源码

写在前头,菜鸟作者的一些碎碎念: 回想自己2022年研三第一次去实习的时候,是到了一个数据库小组,是一个做数据库内核的小组,leader分配的目标是先把read/write流程搞明白。第一次出校实习,一来就是直接读内核…

Java项目实战II基于Java+Spring Boot+MySQL的体育馆使用预约平台的设计与实现(源码+数据库+文档)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着全民健…

创新材料科技:铜冷却壁助力高炉节能降耗

高炉用铜冷却壁是高炉内部的一种构件,通常用于高炉的炉身部分。它的主要功能是在高炉冶炼过程中冷却炉壁,以防止炉壁过热。铜冷却壁通常由铜制成,因为铜具有良好的导热性和耐腐蚀性,能够有效地将热量从高炉内部传导到外部&#xf…

衡石分析平台最佳实践-开发场景之分层级嵌入

分层级嵌入 平台整体嵌入 在这种应用场景中&#xff0c;把所有功能通过 iframe 的方式都开放给登陆用户&#xff0c;嵌入的示例如下&#xff1a; html <iframename""src"https://preview.hengshi.com/app/1"> </iframe> 1 2 3 4 单个模…

Balluff EDI 项目需求分析

电子数据交换&#xff08;EDI&#xff0c;Electronic Data Interchange&#xff09;是一种通过电子方式在不同组织之间交换商业文档的技术和标准。它涉及使用标准格式的电子文档&#xff0c;如订单、发票、运输单据等&#xff0c;以实现自动化的数据传输。这种技术通常依赖于专…

C++ 手写常见的任务定时器

序言 最近在编写 C 的服务器代码时&#xff0c;我遇到了一个需求&#xff0c;服务器很可能会遇到那些长期不活跃的连接&#xff0c;这些连接占用了一定的资源但是并没有进行有效的通信。为了优化资源使用&#xff0c;我决定实现一个定时器&#xff0c;以便定期检查连接的活跃状…

后端Java学习:springboot之文件上传(阿里云OSS存储)

一、什么是阿里云存储&#xff1f; 阿里云对象存储OSS&#xff08;Object Storage Service&#xff09;&#xff0c;是一款海量、安全、低成本、高可靠的云存储服务。使用OSS&#xff0c;您可以通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件。 二、阿里云…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧&#xff0c;头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告&#xff0c;通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…