[转帖]操作系统性能参数调优

操作系统,性能参数 · 浏览次数 : 0

小编点评

**网络性能优化** **网卡硬件缓存** - 正确观察硬件层面的丢包方法是使用 ethtool -S ${NIC_DEV_NAME} 命令观察 drops 字段。 - 当出现丢包现象时,主要考虑是硬/软中断的处理速度跟不上网卡接收速度。 **软中断** - 观察 /proc/net/softnet\\_stat 监控。如果除第三列的其他列的数值在增长,则应适度调大 net.core.netdev\\_weight 值,使 softirq 可以获得更多 CPU 时间。 **自适应模式** - 驱动程序将检查流量模式和内核接收模式,并实时评估合并设置,以防止数据包丢失。 **发送队列** - 发送队列长度值确定在发送之前可以排队的数据包数量。 **接收队列** - 每个 CPU 都有各自的 backlog 队列,可缓存的最大 packets 数量为 netdev\\_max\\_backlog。当某行的第二列持续增加,则意味着 CPU [行-1] 队列已满,数据包被丢失,可通过持续加倍 net.core.netdev\\_max\\_backlog 值来解决。 **发送队列** - 在发送之前可以排队的数据包数量,防止数据包丢失。

正文

https://www.bookstack.cn/read/TiDB-4.0/tune-operating-system.md

 

本文档仅用于描述如何优化 CentOS 7 的各个子系统。

注意:

  • CentOS 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子系统产生负面影响。因此在调整系统之前,请备份所有用户数据和配置信息;
  • 请在测试环境下对所有修改做好充分测试后,再应用到生产环境中。

性能分析工具

系统调优需要根据系统性能分析的结果做指导,因此本文先列出常用的性能分析方法。

60 秒分析法

此分析法由《性能之巅》的作者 Brendan Gregg 及其所在的 Netflix 性能工程团队公布。所用到的工具均可从发行版的官方源获取,通过分析以下清单中的输出,可定位大部分常见的性能问题。

  • uptime
  • dmesg | tail
  • vmstat 1
  • mpstat -P ALL 1
  • pidstat 1
  • iostat -xz 1
  • free -m
  • sar -n DEV 1
  • sar -n TCP,ETCP 1
  • top

具体用法可查询相应 man 手册。

perf

Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬件级别(CPU/PMU 和性能监视单元)功能和软件功能(软件计数器和跟踪点)。详细用法请参考 perf Examples

BCC/bpftrace

CentOS 从 7.6 版本起,内核已实现对 bpf 的支持,因此可根据上述清单的结果,选取适当的工具进行深入分析。相比 perf/ftrace,bpf 提供了可编程能力和更小的性能开销。相比 kprobe,bpf 提供了更高的安全性,更适合在生产环境上使用。关于 BCC 工具集的使用请参考 BPF Compiler Collection (BCC)

性能调优

性能调优将根据内核子系统进行分类描述。

处理器——动态节能技术

cpufreq 是一个动态调整 CPU 频率的模块,可支持五种模式。为保证服务性能应选用 performance 模式,将 CPU 频率固定工作在其支持的最高运行频率上,不进行动态调节,操作命令为 cpupower frequency-set --governor performance

处理器——中断亲和性

  • 自动平衡:可通过 irqbalance 服务实现。
  • 手动平衡:
    • 确定需要平衡中断的设备,从 CentOS 7.5 开始,系统会自动为某些设备及其驱动程序配置最佳的中断关联性。不能再手动配置其亲和性。目前已知的有使用 be2iscsi 驱动的设备,以及 NVMe 设置;
    • 对于其他设备,可查询其芯片手册,是否支持分发中断,若不支持,则该设备的所有中断会路由到同一个 CPU 上,无法对其进行修改。若支持,则计算 smp_affinity 掩码并设置对应的配置文件,具体请参考内核文档

NUMA 绑核

为尽可能的避免跨 NUMA 访问内存,可以通过设置线程的 CPU 亲和性来实现 NUMA 绑核。对于普通程序,可使用 numactl 命令来绑定,具体用法请查询 man 手册。对于网卡中断,请参考下文网络章节。

内存——透明大页

对于数据库应用,不推荐使用 THP,因为数据库往往具有稀疏而不是连续的内存访问模式,且当高阶内存碎片化比较严重时,分配 THP 页面会出现较大的延迟。若开启针对 THP 的直接内存规整功能,也会出现系统 CPU 使用率激增的现象,因此建议关闭 THP。

  1. echo never > /sys/kernel/mm/transparent_hugepage/enabled
  2. echo never > /sys/kernel/mm/transparent_hugepage/defrag

内存——虚拟内存参数

  • dirty_ratio 百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统将开始使用 pdflush 操作将脏的 page cache 写入磁盘。默认值为 20%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,降低其值有利于提高内存回收时的效率。
  • dirty_background_ratio 百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统开始在后台将脏的 page cache 写入磁盘。默认值为 10%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,设置较低的值有利于提高内存回收时的效率。

存储及文件系统

内核 I/O 栈链路较长,包含了文件系统层、块设备层和驱动层。

I/O 调度器

I/O 调度程序确定 I/O 操作何时在存储设备上运行以及持续多长时间。也称为 I/O 升降机。对于 SSD 设备,宜设置为 noop。

  1. echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler

格式化参数——块大小

块是文件系统的工作单元。块大小决定了单个块中可以存储多少数据,因此决定了一次写入或读取的最小数据量。

默认块大小适用于大多数使用情况。但是,如果块大小(或多个块的大小)与通常一次读取或写入的数据量相同或稍大,则文件系统将性能更好,数据存储效率更高。小文件仍将使用整个块。文件可以分布在多个块中,但这会增加运行时开销。

使用 mkfs 命令格式化设备时,将块大小指定为文件系统选项的一部分。指定块大小的参数随文件系统的不同而不同。有关详细信息,请查询对应文件系统的 mkfs 手册页,比如 man mkfs.ext4

挂载参数

noatime 读取文件时,将禁用对元数据的更新。它还启用了 nodiratime 行为,该行为会在读取目录时禁用对元数据的更新。

网络

网络子系统由具有敏感连接的许多不同部分组成。因此,CentOS 7 网络子系统旨在为大多数工作负载提供最佳性能,并自动优化其性能。因此,通常无需手动调整网络性能。

网络问题通常由硬件或相关设施出现问题导致的,因此在调优协议栈前,请先排除硬件问题。

尽管网络堆栈在很大程度上是自我优化的。但是在网络数据包处理过程中,以下方面可能会成为瓶颈并降低性能:

  • 网卡硬件缓存:正确观察硬件层面的丢包方法是使用 ethtool -S ${NIC_DEV_NAME} 命令观察 drops 字段。当出现丢包现象时,主要考虑是硬/软中断的处理速度跟不上网卡接收速度。若接收缓存小于最大限制时,也可尝试增加 RX 缓存来防止丢包。查询命令为:ethtool -g ${NIC_DEV_NAME},修改命令为 ethtool -G ${NIC_DEV_NAME}
  • 硬中断:若网卡支持 Receive-Side Scaling(RSS 也称为多网卡接收)功能,则观察 /proc/interrrputs 网卡中断,如果出现了中断不均衡的情况,请参考处理器调优章节。若不支持 RSS 或 RSS 数量远小于物理 CPU 核数,则可配置 Receive Packet Steering(RPS,可以看作 RSS 的软件实现),及 RPS 的扩展 Receive Flow Steering (RFS)。具体设置请参考内核文档
  • 软中断:观察 /proc/net/softnet\_stat 监控。如果除第三列的其他列的数值在增长,则应适度调大 net.core.netdev\_budget 或 net.core.dev\_weight 值,使 softirq 可以获得更多的 CPU 时间。除此之外,也需要检查 CPU 使用情况,确定哪些任务在频繁占用 CPU,能否优化。
  • 应用的套接字接收队列:监控 ss -nmp 的 Recv-q 列,若队列已满,则应考虑增大应用程序套接字的缓存大小或使用自动调整缓存的方式。除此之外,也要考虑能否优化应用层的架构,降低读取套接字的间隔。
  • 以太网流控:若网卡和交换机支持流控功能,可通过使能此功能,给内核一些时间来处理网卡队列中的数据,来规避网卡缓存溢出的问题。对于网卡测,可通过 ethtool -a ${NIC_DEV_NAME} 命令检查是否支持/使能,并通过 ethtool -A ${NIC_DEV_NAME} 命令开启。对于交换机,请查询其手册。
  • 中断合并:过于频繁的硬件中断会降低系统性能,而过晚的硬件中断会导致丢包。对于较新的网卡支持中断合并功能,并允许驱动自动调节硬件中断数。可通过 ethtool -c ${NIC_DEV_NAME} 命令检查,ethtool -C ${NIC_DEV_NAME} 命令开启。自适应模式使网卡可以自动调节中断合并。在自适应模式下,驱动程序将检查流量模式和内核接收模式,并实时评估合并设置,以防止数据包丢失。不同品牌的网卡具有不同的功能和默认配置,具体请参考网卡手册。
  • 适配器队列:在协议栈处理之前,内核利用此队列缓存网卡接收的数据,每个 CPU 都有各自的 backlog 队列。此队列可缓存的最大 packets 数量为 netdev\_max\_backlog。观察 /proc/net/softnet\_stat 第二列,当某行的第二列持续增加,则意味着 CPU [行-1] 队列已满,数据包被丢失,可通过持续加倍 net.core.netdev\_max\_backlog 值来解决。
  • 发送队列:发送队列长度值确定在发送之前可以排队的数据包数量。默认值是 1000,对于 10 Gbps 足够。但若从 ip -s link 的输出中观察到 TX errors 值时,可尝试加倍该数据包数量:ip link set dev ${NIC_DEV_NAME} txqueuelen 2000
  • 驱动:网卡驱动通常也会提供调优参数,请查询设备硬件手册及其驱动文档。

与[转帖]操作系统性能参数调优相似的内容:

[转帖]操作系统性能参数调优

https://www.bookstack.cn/read/TiDB-4.0/tune-operating-system.md 本文档仅用于描述如何优化 CentOS 7 的各个子系统。 注意: CentOS 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子

[转帖]Linux性能调优,看这一篇就够了

调优是一件因地制宜的事情,生搬硬套可能适得其反。互联网企业,生产环境大多数都是linux操作系统,Linux服务器性能调优,是一个重要的课题。linux有成百上千的参数可以调整,对这些参数的理解,可以帮助我们更好的理解服务器工作的原理,帮助更快的找到瓶颈和解决问题。 为了帮助理解,先上一个Linux

[转帖]Elasticsearch-索引性能调优

1:设置合理的索引分片数和副本数 索引分片数建议设置为集群节点的整数倍,初始数据导入时副本数设置为 0,生产环境副本数建议设置为 1(设置 1 个副本,集群任意 1 个节点宕机数据不会丢失;设置更多副本会占用更多存储空间,操作系统缓存命中率会下降,检索性能不一定提升)。单节点索引分片数建议不要超过

[转帖]龙蜥社区成立智能调优 SIG,物理机、虚拟机、容器的多个典型应用调优效果平均在 10% 以上

https://baijiahao.baidu.com/s?id=1715482603122115961&wfr=spider&for=pc 关注 KeenTune SIG 是一款 AI 算法与专家知识库双轮驱动的操作系统全栈式智能优化产品,为主流的操作系统提供轻量化、跨平台的一键式性能调优,让应用

[转帖]88. sys_kwr

88. sys_kwr ¶ 88.1. 插件sys_kwr简介 ¶ 插件sys_kwr是KingbaseES 的一个扩展插件。主要功能是通过周期性自动记录性能统计相关的快照,分析出KingbaseES的操作系统运行环境、数据库时间组成、等待事件和TOP SQL等性能指标,为数据库性能调优提供指导。

[转帖]基准测试工具

https://www.cnblogs.com/wade-luffy/p/6344097.html 目录 sysbench mysql-tpcc 基准测试工具可以用来对数据库或者操作系统调优后的性能进行对比。MySQL数据库本身提供了一些比较优秀的工具,这里介绍另外两款更优秀、更常用的工具:sysb

[转帖]Nginx应用调优案例

https://bbs.huaweicloud.com/blogs/146367 【摘要】 1 问题背景nginx的应用程序移植到TaiShan服务器上,发现业务吞吐量没有达到硬件预期,需要做相应调优。 2 原因分析l 网卡配置该应用场景下网络吞吐量大,网卡的配置能对性能提升起到很大的作用。l 操作

[转帖]Nginx应用调优案例

https://bbs.huaweicloud.com/blogs/146367 【摘要】 1 问题背景nginx的应用程序移植到TaiShan服务器上,发现业务吞吐量没有达到硬件预期,需要做相应调优。 2 原因分析l 网卡配置该应用场景下网络吞吐量大,网卡的配置能对性能提升起到很大的作用。l 操作

[转帖]Sysbench - 一种系统性能benchmark

SysBench是一款开源的、跨平台的、模块化的、多线程的性能测试工具,通过高负载地运行在数据库上,可以执行CPU/内存/线程/IO/数据库等方面的性能测试。用于评估操作系统的性能参数。 1 sysbench简介 Sysbench使得我们无需采用真正的复杂的数据库benchmark而获取系统的性能概

[转帖]oracle OSWatcher安装部署

Oswatch是oracle官方提供,用于收集操作系统性能的小工具,oswatch的安装与使用也比较简单,直接解压就可以使用。oswatch是通过调用系统的命令完成信息的收集,如:ps ,top ,mpstat ,iostat,netstat ,traceroute vmstat 。支持的操作系统包