操作系统调优
本文档介绍如何调优CentOS 7的各个子系统。
性能分析方法
系统调优必须基于系统性能分析的结果。介绍性能分析的常用方法。
60秒内
60000毫秒内的Linux性能分析由作者Brendan Gregg和Netflix性能工程团队发布。所使用的工具均可从Linux正式版本中获取。您可以分析以下列表项的输出,以排除最常见的性能问题。
正常运行时间
Dmesg |尾巴
vmstat 1
mpstat -P ALL
pidstat 1
Iostat -xz
自由- m
sar -n DEV 1 .执行以下命令
sar -n TCP,ETCP
前
具体使用方法请参见相应的说明男人。
指令。
性能
perf是Linux内核提供的一种重要的性能分析工具,包括硬件层(CPU/PMU、性能监控单元)特性和软件层(软件计数器、跟踪点)特性。详细用法请参见性能的例子.
BCC / bpftrace
从CentOS 7.6开始,Linux内核已经支持Berkeley Packet Filter (BPF)。因此,您可以根据分析的结果选择合适的工具进行深入的分析60秒内.与perf/ftrace相比,BPF提供了可编程性和更小的性能开销。与kprobe相比,BPF具有更高的安全性,更适合生产环境。有关BCC工具包的详细使用方法,请参见BPF编译器集合.
性能调优
本节介绍基于分类内核子系统的性能调优。
cpu频率扩展
cpufreq是一个动态调整CPU频率的模块。支持五种模式。为了保证业务性能,请在选择性能模式时,将CPU主频固定在系统支持的最高工作频率上,不进行动态调整。该操作的命令为Cpupower频率集——调速器性能
.
cpu中断亲和力
- 可通过自动平衡实现
停止irqbalance
服务。 - 手动平衡:
- 确定需要平衡中断的设备。从CentOS 7.5开始,系统自动为某些设备及其驱动程序配置最佳中断亲缘性,例如使用
be2iscsi
驱动和NVMe设置。您不能再为这些设备手动配置中断关联。 - 对于其他设备,请查看芯片手册,看看这些设备是否支持分发中断。
- 如果不这样做,这些设备的所有中断都被路由到同一个CPU,并且不能被修改。
- 如果有,计算
smp_affinity
掩码并设置相应的配置文件。详细信息请参见内核文件.
- 确定需要平衡中断的设备。从CentOS 7.5开始,系统自动为某些设备及其驱动程序配置最佳中断亲缘性,例如使用
NUMA CPU绑定
为了尽可能避免跨非统一内存访问(NUMA)节点访问内存,可以通过设置线程的CPU亲和力将线程/进程绑定到某些CPU核。对于普通程序,可以使用使用
命令进行CPU绑定。具体使用方法请参见Linux手册。有关网络接口卡(NIC)中断,请参见优化网络.
内存透明大页面(THP)
它是不建议在数据库应用程序中使用THP,因为数据库通常具有稀疏而不是连续的内存访问模式。如果高级内存碎片严重,那么在分配THP页时将会出现更高的延迟。如果为THP启用了直接压缩,CPU使用率将激增。因此,建议禁用THP。
Echo never > /sys/kernel/mm/transparent_hugepage/enabled Echo never > /sys/kernel/mm/transparent_hugepage/碎片清理
内存—虚拟内存参数
dirty_ratio
百分比比例。当脏页缓存总量达到系统总内存的这个百分比时,系统将开始使用pdflush
将脏页缓存写入磁盘的操作。的默认值dirty_ratio
是20%,通常不需要调整。对于NVMe等高性能ssd设备,降低该值可以提高内存回收效率。dirty_background_ratio
百分比比例。当脏页缓存总量达到系统内存总量的这个百分比时,系统开始在后台将脏页缓存写入磁盘。的默认值dirty_ratio
是10%,通常不需要调整。对于NVMe等高性能ssd设备,设置较小的值可以提高内存回收效率。
存储和文件系统
核心I/O堆栈链路较长,包括文件系统层、块设备层和驱动程序层。
I / O调度器
I/O调度程序决定I/O操作在存储设备上运行的时间和时间。它也被称为I/O升降机。对于SSD设备,建议将I/O调度策略设置为noop。
echo noop > /sys/block/${SSD_DEV_NAME}/queue/scheduler .使用实例
格式化参数-块大小
块是文件系统的工作单元。块大小决定了单个块中可以存储多少数据,从而决定了每次写入或读取的最小数据量。
默认块大小适用于大多数场景。但如果每次写入的数据块大小(或多个块的大小)等于或略大于正常读写的数据量,则文件系统性能更好,数据存储效率更高。小文件仍然使用整个块。文件可以分布在多个块中,但这会增加运行时开销。
当使用mkfs
命令格式化设备时,指定块大小作为文件系统选项的一部分。指定块大小的参数因文件系统而异。具体操作请参见对应的章节mkfs
手册页等使用男人mkfs.ext4
.
山
参数
如果减小
属性中启用山
命令时,读取文件时禁用元数据更新。如果nodiratime
行为,则在读取目录时禁用元数据更新。
网络优化
网络子系统由许多具有敏感连接的不同部分组成。CentOS 7网络子系统旨在为大多数工作负载提供最佳性能,并自动优化这些工作负载的性能。因此,通常不需要手动调整网络性能。
网络问题通常由硬件或相关设备的问题引起。所以在调优协议栈之前,先排除硬件问题。
虽然网络堆栈在很大程度上是自优化的,但网络数据包处理中的以下方面可能成为瓶颈并影响性能:
网卡硬件缓存:若要在硬件层面正确观察丢包情况,请使用
ethtool -S ${NIC_DEV_NAME}
命令,以观察滴
字段。当丢包发生时,可能是硬/软中断的处理速度赶不上网卡的接收速度。如果接收到的RX缓冲区小于该上限,还可以尝试增加RX缓冲区以避免丢包。查询命令为:ethtool -g ${NIC_DEV_NAME}
,修改命令为ethtool -G ${NIC_DEV_NAME}
.硬件中断:如果网卡支持RSS (Receive-Side Scaling,也称为multi-NIC receiving)特性,请观察
/proc/interrupts
网卡的中断。如果中断不均匀,请参见cpu频率扩展,cpu中断亲和力,NUMA CPU绑定.如果网卡不支持RSS或RSS数量远远小于物理CPU核数,则需要配置RPS (Receive Packet Steering)和RPS扩展RFS (Receive Flow Steering)。RPS是RSS的软件实现。详细配置请参见内核文件.软件中断:观察监控
/proc/net/softnet_stat
.如果除第三列外,其他列的值都在增加,请适当调整net.core.netdev_budget
或net.core.dev_weight
为软中断
以获得更多的CPU时间。此外,还需要检查CPU的使用情况,以确定哪些任务频繁使用CPU,是否可以进行优化。应用程序套接字的接收队列:监视
Resv-q
列的党卫军-nmp
.如果队列已满,请考虑增加应用程序套接字缓存的大小或使用自动缓存调整方法。此外,还要考虑是否可以优化应用层的架构,减少读取套接字的间隔。以太网流控:如果网卡和交换机支持流控特性,可以利用该特性为内核留出一定的时间处理网卡队列中的数据,避免网卡缓冲区溢出的问题。
中断合并:硬件中断太频繁会降低系统性能,中断时间过晚会导致丢包。较新的网卡支持中断合并功能,并允许驱动程序自动调整硬件中断的数量。你可以执行
ethtool -c ${NIC_DEV_NAME}
检查和ethtool -C ${NIC_DEV_NAME}
启用此功能。自适应模式允许网卡自动调整中断合并。在这种模式下,驱动程序会实时检查流量模式和内核接收模式,并评估合并设置,以防止丢包。不同品牌的网卡具有不同的特性和默认配置。具体操作请参见网卡手册。适配器队列:内核在处理协议栈之前,使用这个队列来缓冲网卡接收到的数据,每个CPU都有自己的backlog队列。可以在此队列中缓存的最大数据包数为
netdev_max_backlog
.的第二列/proc/net/softnet_stat
.当一行的第二列继续增加时,意味着CPU(第一行)队列满,数据包丢失。要解决这个问题,继续加倍net.core.netdev_max_backlog
价值。发送队列:发送队列的长度决定了可以在发送前排队的数据包数量。默认值为
1000
,这足以满足10gbps。但如果观察到TX的值从输出的错误IP -s link
,你可以尝试翻倍:ip link set dev ${NIC_DEV_NAME} txqueuelen 2000
.驱动:网卡驱动通常提供调优参数。请参阅设备硬件手册及其驱动程序文档。