登录 尝试免费

操作系统调优

本文档介绍如何调优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掩码并设置相应的配置文件。详细信息请参见内核文件

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_budgetnet.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

  • 驱动:网卡驱动通常提供调优参数。请参阅设备硬件手册及其驱动程序文档。

下载 请求文档更改 在TiDB论坛提问
这个页面有用吗?
产品
TiDB云
TiDB
定价
获得演示
©2023PingCAP。版权所有。