From fc9c61f21ad72773f1fa18d6c38191aac8a1b5d3 Mon Sep 17 00:00:00 2001 From: Wenbo Zhang Date: Wed, 20 May 2020 05:34:28 -0400 Subject: [PATCH 01/10] tuning: add tune-operating-system Signed-off-by: Wenbo Zhang --- tune-operating-system.md | 114 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) diff --git a/tune-operating-system.md b/tune-operating-system.md index e69de29bb2d1..598114bdfa13 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -0,0 +1,114 @@ +--- +title: 操作系统性能参数调优 +category: reference +aliases: ['/docs-cn/dev/reference/performance/tune-system/'] +--- + +# 操作系统性能参数调优 + +本文档仅用于描述如何优化 Centos 7 的各个子系统。 + +> **注意:** +> +> 1. Centos 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子系统产生负面影响。因此在调整系统之前,请备份所有数据和配置信息; +> 2. 请在测试环境下对所有修改做好充备测试后,再应用到生产环境中。 + +## 性能分析工具 + +系统调优需要根据系统性能分析的结果做指导,因此本文先列出常用的性能分析方法。 + +### 60s 分析法 + +此分析法由《性能之巅》的作者 Brendan Gregg 及其所在的 Netflix 性能工程团队公布,所用到到工具均可从发行版的官方源获取,通过分析以下清单的输出,可定位大部分常见的性能问题。 + +1. uptime +2. dmesg | tail +3. vmstat 1 +4. mpstat -P ALL 1 +5. pidstat 1 +6. iostat -xz 1 +7. free -m +8. sar -n DEV 1 +9. sar -n TCP,ETCP 1 +10. top + +具体用法可查询相应 man 手册。 + +### perf + +Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬件级别(CPU / PMU,性能监视单元)功能和软件功能(软件计数器,跟踪点)。 详细用法请参考: 。 + +### BCC/bpftrace + +Centos 从 7.6 版本起,内核已实现对 bpf 的支持,因此可根据上述清单的结果,选取适当的工具进行深入分析。相比 perf/ftrace,bpf 提供了可编程能力,和更小的性能开销。相比 kprobe,bpf 提供了更高的安全性。更适合在生产环境上使用。关于 BCC 工具集的使用请参考: 。 + +## 性能调优 + +性能调优将根据内核子系统进行分类描述。 + +### 处理器 —— 动态节能技术 + +cpufreq 是一个动态调整 cpu 频率的模块,可支持五种模式。为保证服务性能应选用 performance 模式,将 CPU 频率固定工作在其支持的最高运行频率上,不进行动态调节。命令为 `cpupower frequency-set --governor performance`。 + +### 处理器 —— 中断亲和性 + +- 自动平衡:可通过 `irqbalance` 服务实现。 +- 手动平衡: + 1. 确定需要平衡中断的设备,从 Centos 7.5 开始,系统会自动为某些设备及其驱动程序配置最佳的中断关联性。不能再手动配置其亲和性。目前已知的有使用 `be2iscsi` 驱动的设备,以及 NVME 设置; + 2. 对于其他设备,可查询其芯片手册,是否支持分发中断,若不支持,则该设备的所有中断会路由到同一个 CPU 上,无法对其进行修改,若支持,则计算 `smp_affinity` 掩码并设置对应的配置文件,具体请参考内核文档:。 + +### NUMA 绑核 + +为尽可能的避免跨NUMA访问内存,我们可以通过设置线程的CPU亲和性来实现。对于普通程序,可使用 numactl 命令来绑定,具体用法请查询 man 手册。对于网卡中断,请参考下文网络章节。 + +### 内存 —— 透明大页 + +对于数据库应用,不推荐使用 THP,因为数据库往往具有稀疏而不是连续的内存访问模式,且当高阶内存碎片化比较严重时,分配 THP 页面会出现较大的延迟。伴随使能 THP 的直接内存规整功能,也会出现 sys cpu 使用率激增的现象,因此建议关闭。 + +``` sh +echo never > /sys/kernel/mm/transparent_hugepage/enabled +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。 + +```sh +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,对于 10Gbps 足够。但若从 `ip -s link` 的输出中观察到 TX errors 值时,可尝试加倍:`ip link set dev ${NIC_DEV_NAME} txqueuelen 2000`。 +- 驱动:网卡驱动通常也会提供调优参数,请查询设备硬件手册及其驱动文档。 From 2a7406028d22b2287133614bc3b1d54d401398b5 Mon Sep 17 00:00:00 2001 From: yikeke Date: Wed, 20 May 2020 21:15:20 +0800 Subject: [PATCH 02/10] refine format and TOC --- TOC.md | 2 +- tune-operating-system.md | 42 ++++++++++++++++++++++------------------ 2 files changed, 24 insertions(+), 20 deletions(-) diff --git a/TOC.md b/TOC.md index d5eff9172e8b..fc56339c5900 100644 --- a/TOC.md +++ b/TOC.md @@ -111,7 +111,7 @@ + 性能调优 + 系统调优 + [硬件](/tune-hardware-performance.md) @张文博 - + [操作系统](/tune-operating-system.md) @张文博 + + [操作系统性能参数调优](/tune-operating-system.md) @张文博 + 软件调优 + [软件版本](/tune-software-version.md) @张文博 + 配置 diff --git a/tune-operating-system.md b/tune-operating-system.md index 598114bdfa13..7271be273897 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -36,44 +36,44 @@ aliases: ['/docs-cn/dev/reference/performance/tune-system/'] ### perf -Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬件级别(CPU / PMU,性能监视单元)功能和软件功能(软件计数器,跟踪点)。 详细用法请参考: 。 +Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬件级别(CPU/PMU,性能监视单元)功能和软件功能(软件计数器,跟踪点)。详细用法请参考: 。 ### BCC/bpftrace -Centos 从 7.6 版本起,内核已实现对 bpf 的支持,因此可根据上述清单的结果,选取适当的工具进行深入分析。相比 perf/ftrace,bpf 提供了可编程能力,和更小的性能开销。相比 kprobe,bpf 提供了更高的安全性。更适合在生产环境上使用。关于 BCC 工具集的使用请参考: 。 +Centos 从 7.6 版本起,内核已实现对 bpf 的支持,因此可根据上述清单的结果,选取适当的工具进行深入分析。相比 perf/ftrace,bpf 提供了可编程能力,和更小的性能开销。相比 kprobe,bpf 提供了更高的安全性,更适合在生产环境上使用。关于 BCC 工具集的使用请参考: 。 ## 性能调优 性能调优将根据内核子系统进行分类描述。 -### 处理器 —— 动态节能技术 +### 处理器——动态节能技术 -cpufreq 是一个动态调整 cpu 频率的模块,可支持五种模式。为保证服务性能应选用 performance 模式,将 CPU 频率固定工作在其支持的最高运行频率上,不进行动态调节。命令为 `cpupower frequency-set --governor performance`。 +cpufreq 是一个动态调整 CPU 频率的模块,可支持五种模式。为保证服务性能应选用 performance 模式,将 CPU 频率固定工作在其支持的最高运行频率上,不进行动态调节。命令为 `cpupower frequency-set --governor performance`。 -### 处理器 —— 中断亲和性 +### 处理器——中断亲和性 - 自动平衡:可通过 `irqbalance` 服务实现。 - 手动平衡: - 1. 确定需要平衡中断的设备,从 Centos 7.5 开始,系统会自动为某些设备及其驱动程序配置最佳的中断关联性。不能再手动配置其亲和性。目前已知的有使用 `be2iscsi` 驱动的设备,以及 NVME 设置; - 2. 对于其他设备,可查询其芯片手册,是否支持分发中断,若不支持,则该设备的所有中断会路由到同一个 CPU 上,无法对其进行修改,若支持,则计算 `smp_affinity` 掩码并设置对应的配置文件,具体请参考内核文档:。 + 1. 确定需要平衡中断的设备,从 Centos 7.5 开始,系统会自动为某些设备及其驱动程序配置最佳的中断关联性。不能再手动配置其亲和性。目前已知的有使用 `be2iscsi` 驱动的设备,以及 NVME 设置; + 2. 对于其他设备,可查询其芯片手册,是否支持分发中断,若不支持,则该设备的所有中断会路由到同一个 CPU 上,无法对其进行修改,若支持,则计算 `smp_affinity` 掩码并设置对应的配置文件,具体请参考内核文档:。 ### NUMA 绑核 -为尽可能的避免跨NUMA访问内存,我们可以通过设置线程的CPU亲和性来实现。对于普通程序,可使用 numactl 命令来绑定,具体用法请查询 man 手册。对于网卡中断,请参考下文网络章节。 +为尽可能的避免跨 NUMA 访问内存,我们可以通过设置线程的 CPU 亲和性来实现。对于普通程序,可使用 numactl 命令来绑定,具体用法请查询 man 手册。对于网卡中断,请参考下文网络章节。 -### 内存 —— 透明大页 +### 内存——透明大页 -对于数据库应用,不推荐使用 THP,因为数据库往往具有稀疏而不是连续的内存访问模式,且当高阶内存碎片化比较严重时,分配 THP 页面会出现较大的延迟。伴随使能 THP 的直接内存规整功能,也会出现 sys cpu 使用率激增的现象,因此建议关闭。 +对于数据库应用,不推荐使用 THP,因为数据库往往具有稀疏而不是连续的内存访问模式,且当高阶内存碎片化比较严重时,分配 THP 页面会出现较大的延迟。伴随使能 THP 的直接内存规整功能,也会出现系统 CPU 使用率激增的现象,因此建议关闭。 ``` sh echo never > /sys/kernel/mm/transparent_hugepage/enabled 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 设备来说,设置较低的值有利于提高内存回收时的效率。 +- `dirty_ratio` 百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统将开始使用 pdflush 操作将脏的 page cache 写入磁盘。默认值为 20%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,降低其值有利于提高内存回收时的效率。 +- `dirty_background_ratio` 百分比值。当脏的 page cache 总量达到系统内存总量的这一百分比后,系统开始在后台将脏的 page cache 写入磁盘。默认值为 10%,通常不需调整。对于高性能 SSD,比如 NVMe 设备来说,设置较低的值有利于提高内存回收时的效率。 ### 存储及文件系统 @@ -87,28 +87,32 @@ I/O 调度程序确定 I/O 操作何时在存储设备上运行以及持续多 echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler ``` -#### 格式化参数 —— 块大小 +#### 格式化参数——块大小 块是文件系统的工作单元。块大小决定了单个块中可以存储多少数据,因此决定了一次写入或读取的最小数据量。 + 默认块大小适用于大多数使用情况。但是,如果块大小(或多个块的大小)与通常一次读取或写入的数据量相同或稍大,则文件系统将性能更好,数据存储效率更高。小文件仍将使用整个块。文件可以分布在多个块中,但这会增加运行时开销。 + 使用 mkfs 命令格式化设备时,将块大小指定为文件系统选项的一部分。指定块大小的参数随文件系统的不同而不同。有关详细信息,请查询对应文件系统的 mkfs 手册页,比如 `man mkfs.ext4`。 #### 挂载参数 -`noatime` 读取文件时,将禁用对元数据的更新。它还启用了nodiratime 行为,该行为会在读取目录时禁用对元数据的更新。 +`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,能否优化。 +- 硬中断:若网卡支持 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 -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,对于 10Gbps 足够。但若从 `ip -s link` 的输出中观察到 TX errors 值时,可尝试加倍:`ip link set dev ${NIC_DEV_NAME} txqueuelen 2000`。 +- 发送队列:发送队列长度值确定在发送之前可以排队的数据包数量。默认值是 1000,对于 10Gbps 足够。但若从 `ip -s link` 的输出中观察到 TX errors 值时,可尝试加倍:`ip link set dev ${NIC_DEV_NAME} txqueuelen 2000`。 - 驱动:网卡驱动通常也会提供调优参数,请查询设备硬件手册及其驱动文档。 From e481c73b490215030a29bc7b293c62f390262ea9 Mon Sep 17 00:00:00 2001 From: Zwb Date: Wed, 20 May 2020 21:34:09 +0800 Subject: [PATCH 03/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index 7271be273897..35fcd26e3bbd 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -11,7 +11,7 @@ aliases: ['/docs-cn/dev/reference/performance/tune-system/'] > **注意:** > > 1. Centos 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子系统产生负面影响。因此在调整系统之前,请备份所有数据和配置信息; -> 2. 请在测试环境下对所有修改做好充备测试后,再应用到生产环境中。 +> 2. 请在测试环境下对所有修改做好充分测试后,再应用到生产环境中。 ## 性能分析工具 From 01c0619e109809208f963f7fb42fcaecc11ada6e Mon Sep 17 00:00:00 2001 From: Zwb Date: Wed, 20 May 2020 21:34:28 +0800 Subject: [PATCH 04/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index 35fcd26e3bbd..bddabe32fa3f 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -10,7 +10,7 @@ aliases: ['/docs-cn/dev/reference/performance/tune-system/'] > **注意:** > -> 1. Centos 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子系统产生负面影响。因此在调整系统之前,请备份所有数据和配置信息; +> 1. Centos 7 操作系统的默认配置适用于中等负载下运行的大多数服务。调整特定子系统的性能可能会对其他子系统产生负面影响。因此在调整系统之前,请备份所有用户数据和配置信息; > 2. 请在测试环境下对所有修改做好充分测试后,再应用到生产环境中。 ## 性能分析工具 From fc735aadb60b6267cb19dfa6a5917ebe5a0dd0e3 Mon Sep 17 00:00:00 2001 From: Zwb Date: Wed, 20 May 2020 21:35:34 +0800 Subject: [PATCH 05/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index bddabe32fa3f..c4eeec41e172 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -19,7 +19,7 @@ aliases: ['/docs-cn/dev/reference/performance/tune-system/'] ### 60s 分析法 -此分析法由《性能之巅》的作者 Brendan Gregg 及其所在的 Netflix 性能工程团队公布,所用到到工具均可从发行版的官方源获取,通过分析以下清单的输出,可定位大部分常见的性能问题。 +此分析法由《性能之巅》的作者 Brendan Gregg 及其所在的 Netflix 性能工程团队公布,所用到的工具均可从发行版的官方源获取,通过分析以下清单中的输出,可定位大部分常见的性能问题。 1. uptime 2. dmesg | tail From 2802d3f5f8bf8c39ea449e7a8630f1a91f22a820 Mon Sep 17 00:00:00 2001 From: Zwb Date: Thu, 21 May 2020 20:10:00 +0800 Subject: [PATCH 06/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index c4eeec41e172..249012a3fd9c 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -108,7 +108,7 @@ echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler 尽管网络堆栈在很大程度上是自我优化的,但是在网络数据包处理过程中有许多要点可能会成为瓶颈并降低性能: - 网卡硬件缓存:正确观察硬件层面的丢包方法是使用 `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)。具体设置请参考内核文档: 。 +- 硬中断:若网卡支持 Receive-Side Scaling(RSS 也称为多网卡接收)功能,则观察 /proc/interrrputs 网卡中断,如果出现了中断不均衡的情况,请参考处理器调优章节。若不支持 RSS 或 RSS 数量远小于物理 CPU 核数,则可配置 Receive Packet Steering(RPS,可以看作 RSS 的软件实现),及 RPS 的扩展 Receive Flow Steering (RFS)。具体设置请参考[内核文档](https://www.kernel.org/doc/Documentation/networking/scaling.txt)。 - 软中断:观察 /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}` 命令开启。对于交换机,请查询其手册。 From f372853147d04af09ca1209467923a5677699b0e Mon Sep 17 00:00:00 2001 From: Zwb Date: Thu, 21 May 2020 20:14:13 +0800 Subject: [PATCH 07/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index 249012a3fd9c..c2cc2ac755ee 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -55,7 +55,7 @@ cpufreq 是一个动态调整 CPU 频率的模块,可支持五种模式。为 - 自动平衡:可通过 `irqbalance` 服务实现。 - 手动平衡: 1. 确定需要平衡中断的设备,从 Centos 7.5 开始,系统会自动为某些设备及其驱动程序配置最佳的中断关联性。不能再手动配置其亲和性。目前已知的有使用 `be2iscsi` 驱动的设备,以及 NVME 设置; - 2. 对于其他设备,可查询其芯片手册,是否支持分发中断,若不支持,则该设备的所有中断会路由到同一个 CPU 上,无法对其进行修改,若支持,则计算 `smp_affinity` 掩码并设置对应的配置文件,具体请参考内核文档:。 + 2. 对于其他设备,可查询其芯片手册,是否支持分发中断,若不支持,则该设备的所有中断会路由到同一个 CPU 上,无法对其进行修改,若支持,则计算 `smp_affinity` 掩码并设置对应的配置文件,具体请参考[内核文档](https://www.kernel.org/doc/Documentation/IRQ-affinity.txt)。 ### NUMA 绑核 From 3a775a74445f338878c8a913408c9408877108af Mon Sep 17 00:00:00 2001 From: Zwb Date: Thu, 21 May 2020 20:14:45 +0800 Subject: [PATCH 08/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 1 - 1 file changed, 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index c2cc2ac755ee..c44b9ff521fb 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -1,7 +1,6 @@ --- title: 操作系统性能参数调优 category: reference -aliases: ['/docs-cn/dev/reference/performance/tune-system/'] --- # 操作系统性能参数调优 From 2292e8147d9b0b1c17da53eb8c800d3b80c28afe Mon Sep 17 00:00:00 2001 From: Zwb Date: Thu, 21 May 2020 20:15:01 +0800 Subject: [PATCH 09/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index c44b9ff521fb..d14c36a50a00 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -39,7 +39,7 @@ Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬 ### BCC/bpftrace -Centos 从 7.6 版本起,内核已实现对 bpf 的支持,因此可根据上述清单的结果,选取适当的工具进行深入分析。相比 perf/ftrace,bpf 提供了可编程能力,和更小的性能开销。相比 kprobe,bpf 提供了更高的安全性,更适合在生产环境上使用。关于 BCC 工具集的使用请参考: 。 +Centos 从 7.6 版本起,内核已实现对 bpf 的支持,因此可根据上述清单的结果,选取适当的工具进行深入分析。相比 perf/ftrace,bpf 提供了可编程能力,和更小的性能开销。相比 kprobe,bpf 提供了更高的安全性,更适合在生产环境上使用。关于 BCC 工具集的使用请参考 [BPF Compiler Collection (BCC)](https://github.com/iovisor/bcc/blob/master/README.md)。 ## 性能调优 From 6918993ec546fe756bfbcc9212a1e62e43df7c2d Mon Sep 17 00:00:00 2001 From: Zwb Date: Thu, 21 May 2020 20:15:11 +0800 Subject: [PATCH 10/10] Update tune-operating-system.md Co-authored-by: Keke Yi <40977455+yikeke@users.noreply.github.com> --- tune-operating-system.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tune-operating-system.md b/tune-operating-system.md index d14c36a50a00..9f2e66303d51 100644 --- a/tune-operating-system.md +++ b/tune-operating-system.md @@ -35,7 +35,7 @@ category: reference ### perf -Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬件级别(CPU/PMU,性能监视单元)功能和软件功能(软件计数器,跟踪点)。详细用法请参考: 。 +Perf 是 Linux 内核提供的一个重要的性能分析工具,它涵盖硬件级别(CPU/PMU,性能监视单元)功能和软件功能(软件计数器,跟踪点)。详细用法请参考 [perf Examples](http://www.brendangregg.com/perf.html#Background)。 ### BCC/bpftrace