---
title: 系统调优
description: "以下操作在所有Ceph 服务端 进行。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_05_0007.html
sourcePath: /source/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_05_0007.html
indexId: d6248ce7e337d8ca33a6712132714ad95ca5eb4a738e53869b1ec8b8c81aa7ea73
---
# 系统调优

以下操作在所有Ceph 服务端 进行。

#### OS配置调优

- 目的
  调整系统配置选项，充分发挥系统硬件性能。

- 方法
  具体优化项详见表1。 表1 OS配置参数 参数名称 参数含义 优化建议 配置方法 vm.swappiness swap为系统虚拟内存，使用虚拟内存会导致性能下降，应避免使用。 默认值：60 现象：用到swap时性能明显下降 修改建议：关闭swap内存的使用，将该参数设定为0 执行命令： 1 sudo sysctl vm.swappiness=0 MTU 网卡所能通过的最大数据包的大小，调大后可以减少网络包的数量以提高效率。 默认值：1500 Bytes 现象：可以通过ip addr命令查看 修改建议：网卡所能通过的最大数据包的大小设置为9000 Bytes 执行命令： 1 vim /etc/sysconfig/network-scripts/ifcfg-$(Interface) 并增加MTU="9000" 说明： ${Interface}为网口名称。 完成后重启网络服务。 1 service NetworkManager restart pid_max “pid_max”是内核提供的一个可调参数，用于限制系统可分配的最大进程数量。系统默认的“pid_max”值为32768，正常情况下是够用的，但跑重量任务时会出现不够用的情况，最终导致内存无法分配的错误。 默认值：32768 现象：通过cat /proc/sys/kernel/pid_max查看 修改建议：设置系统可生成最大线程数为4194303 执行命令： 1 echo 4194303 > /proc/sys/kernel/pid_max file_max “file-max”是设置系统所有进程一共可以打开的文件数量。同时一些程序可以通过setrlimit调用，设置每个进程的限制。如果得到大量使用完文件句柄的错误信息，则应该增加这个值。 默认值：13291808 现象：通过cat /proc/sys/fs/file-max查看 修改建议：设置系统所有进程一共可以打开的文件数量，设置为cat /proc/meminfo | grep MemTotal | awk '{print $2}'所查看到的值 执行命令： 1 echo ${file-max} > /proc/sys/fs/file-max 说明： ${file-max}为cat /proc/meminfo | grep MemTotal | awk '{print $2}'所查看到的值。 read_ahead Linux的文件预读readahead，指Linux系统内核将指定文件的某区域预读进页缓存起来，便于接下来对该区域进行读取时，不会因缺页（page fault）而阻塞。 鉴于从内存读取比从磁盘读取要快很多，预读可以有效的减少磁盘的寻道次数和应用程序的IO等待时间，是改进磁盘读IO性能的重要优化手段之一。 默认值：128 KB 现象：预读可以有效的减少磁盘的寻道次数和应用程序的IO等待时间。通过/sbin/blockdev --getra /dev/sdb查看 修改建议：通过数据预读并且记载到随机访问内存方式提高磁盘读操作，调整为8192 KB 执行命令： 1 /sbin/blockdev --setra <sectors> /dev/sdb 说明： 此处以“/dev/sdb”为例，其中<sectors>为要调整预读的值大小，建议填入8192，对所有服务器上的所有数据盘都要修改。 I/O_Scheduler Linux IO调度器是Linux内核中的一个组成部分，用户可以通过调整这个调度器来优化系统性能。 默认值：CFQ 现象：要根据不同的存储器来设置Linux IO调度器从而达到优化系统性能 修改建议：IO调度策略，HDD设置为deadline，SSD设置为none 执行命令： 1 2 echo deadline > /sys/block/sdb/queue/scheduler echo none > /sys/class/block/nvme0n1/queue/scheduler 说明： 此处以“/dev/sdb”和“/dev/nvme0n1”为例，对所有服务器上的所有数据盘都要修改。 nr_requests “nr_requests”是内核提供的块设备I/O调度参数，用于控制每个块设备（如硬盘、SSD）的I/O请求队列深度。在Linux系统中，如果有大量读请求，默认的请求队列或许应付不过来，Linux可以动态调整请求队列数，默认的请求队列数存放在“/sys/block/hda/queue/nr_requests”文件中 默认值：128（SSD默认1023） 现象：通过适当的调整nr_requests参数可以提升磁盘的吞吐量 修改建议：调整硬盘请求队列数，设置为512（SSD 配置1023） 执行命令： 1 2 echo 512 > /sys/block/sdb/queue/nr_requests echo 1023 > /sys/block/nvme0n1/queue/nr_requests 说明： 此处以“/dev/sdb”和“/dev/nvme0n1”为例，对所有服务器上的所有数据盘都要修改。


#### 网络性能调优

目的

本次测试网卡采用以太网标卡-25GE（Hi1822）-四端口-SFP+，以该网卡为例对网卡配置参数进行优化以达到最佳性能。

方法

优化方法主要包含调节网卡参数和中断绑核（即将网卡中断绑定到网卡所在物理CPU上），具体优化项如表2所示：


**表2 网卡参数配置**

| 参数名称 | 参数含义 | 优化建议 |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- |
| irqbalance | 系统中断均衡服务，会自动将网卡软中断分配到相对空闲的CPU上。 | 默认值：active 现象：开启状态下系统会自动将网卡软中断分配到相对空闲的CPU上 修改建议： 关闭irqbalance，将该参数设置为“inactive”。 1 systemctl stop irqbalance 通过设置为重启服务器后默认关闭。 1 systemctl disable irqbalance | 1 | systemctl stop irqbalance | 1 | systemctl disable irqbalance |
| 1 | systemctl stop irqbalance |  |  |  |  |  |
| 1 | systemctl disable irqbalance |  |  |  |  |  |
| rx\_buff | “rx\_buff”接收缓冲区，用于临时存储从网卡硬件接收的数据包，聚合较大的网络报文需要多篇不连续的内存空间，内存利用率低，增大该项可以提高内存利用率。 | 默认值：2 现象：默认值为2时中断会消耗较多的CPU资源 修改建议：通过加载参数的方式，配置“rx\_buff”的大小，减少不连续的内存，提高内存利用率，提高性能，调整为“8”。具体操作见表后。 |  |  |  |  |
| ring\_buffer | “ring\_buffer”环形缓冲区，网卡硬件和驱动之间的队列，存储待处理的数据包描述符，通过增加网卡buffer大小可以增加吞吐量。 | 默认值：1024 现象：通过ethtool \-g <网卡名称> 查看 修改建议：将“ring\_buffer”队列大小调整为4096。具体操作见表后。 |  |  |  |  |
| lro | Large Receive Offload，打开后会将多个小包聚合为一个大包以提高效率。 | 默认值：off 现象：打开后最大吞吐量明显上升 修改建议：打开“large\-receive\-offload”功能，调高网络包收发效率。具体操作见表后。 |  |  |  |  |
| hinicadm lro \-i hinic0 \-t 256 | 表示最大256微秒后将收到的包聚合发出，调整为256微秒。 | 默认值：16微秒 现象：配合lro功能使用 修改建议：调整为256微秒 |  |  |  |  |
| hinicadm lro \-i hinic0 \-n 32 | 表示最大收到32个包后将聚合的包发出，设置为32个包。 | 默认值：4个包 现象：配合lro功能使用 修改建议：设置为32个包 |  |  |  |  |


- 调整rx_buff：

  1. 进入路径“/etc/modprobe.d”。
    1 cd /etc/modprobe.d

  2. 新建hinic.conf。
    1 vim /etc/modprobe.d/hinic.conf

    并增加以下内容： 1 options hinic rx_buff=8

  3. 重新加载驱动。
    1 2 rmmod hinic modprobe hinic

  4. 检查是否成功修改rx_buff为8。
    1 cat /sys/bus/pci/drivers/hinic/module/parameters/rx_buff

- 修改ring_buffer大小：

  1. 将buffer大小由默认的1024调整为4096。
    1 ethtool -G <网卡名称> rx 4096 tx 4096

  2. 查看当前buffer大小。
    1 ethtool -g <网卡名称>

- 打开lro：

  1. 打开网卡lro功能。
    1 ethtool -K <网卡名称> lro on

  2. 检查是否成功打开。
    1 ethtool -k <网卡名称> | grep large-receive-offload


除了以上优化参数以外，还需要将网卡软中断绑核：

1. 关闭irqbalance服务。
2. 查询网卡归属于哪个NUMA节点。
  1 cat /sys/class/net/ <网口名> /device/numa_node

3. 查询该NUMA节点对应哪些CPU core。
  1 lscpu

4. 查询网卡中断号（IN200网卡参考网口名为hns3，其他网卡可通过ip a命令进行网口名查询，或寻找对应网卡支持）。
一般情况下网卡中断号可通过如下命令查询：
```
cat /proc/interrupts | grep <网口名> | awk -F ':' '{print $1}'
```

但有些情况下不支持上述查询命令，需要通过网卡“bus-info”信息获取对应的中断号，以下步骤为通过“bus-info”信息获取对应的中断号。

  - 通过ethtool获取网卡信息。
    1 ethtool -i <网口名>

  - 根据网卡的“bus-info”获取对应的中断号。
    1 cat /proc/interrupts |grep <bus-info> | awk '{print $1}' | awk -F ':' '{print $1}'

5. 将软中断绑定到该NUMA节点对应的core上。
  1 echo <core编号> > /proc/irq/ <中断号> /smp_affinity_list。
