The virtualization-related profiles provided as part of tuned-adm include: virtual-guest
Based on the enterprise-storage profile, virtual-guest also decreases the swappiness of virtual memory. This profile is available in Red Hat Enterprise Linux 6.3 and later, and is the recommended profile for guest machines.virtual-host
Based on the enterprise-storage profile, virtual-host also decreases the swappiness of virtual memory and enables more aggressive writeback of dirty pages. This profile is available in Red Hat Enterprise Linux 6.3 and later, and is the recommended profile for virtualization hosts, including both KVM and Red Hat Enterprise Virtualization hosts.Numad
与tuned类似,numad是一个守护进程,可以帮助在具有非统一内存访问(NUMA)架构的系统上的进程和内存管理。 Numad通过监视系统拓扑和资源使用情况来实现这一点,然后尝试定位进程以实现高效的NUMA局部性和效率,其中进程具有足够大的内存大小和CPU负载。 numad服务还需要启用cgroups(Linux内核控制组)。
默认情况下,从Red Hat Enterprise Linux 6.5开始,numad将管理使用超过300Mb内存使用率和50%一个核心CPU使用率的任何进程,并尝试使用任何给定的NUMA节点高达85%的容量。 Numad可以使用man numad中描述的指令进行更细致的调整。 CPU Power States
ACPI规范定义了各种级别的处理器功率状态或“C状态”,其中C0是操作状态,C1是停止状态,加上实现各种附加状态的处理器制造商以提供额外的功率节省和相关优点,例如较低的温度。不幸的是,在功率状态之间的转换在延迟方面是昂贵的。由于我们关注使系统的响应性尽可能高,期望禁用所有处理器“深度睡眠”状态,仅保留操作和停止。这必须首先在系统BIOS或EFI固件中完成。应禁用任何状态,如C6,C3,C1E或类似。我们可以通过在GRUB引导加载程序配置中的内核行中添加processor.max_cstate = 1来确保内核从不请求低于C1的C状态。在某些情况下,内核能够覆盖硬件设置,并且必须向具有Intel处理器的系统添加附加参数intel_idle.max_cstate = 0。处理器的睡眠状态可以通过以下方式确认:
cat /sys/module/intel_idle/parameters/max_cstate
0
较高的值表示可以输入附加的睡眠状态。 powertop实用程序的Idle Stats页面可以显示每个C状态花费的时间
使用如下脚本修改各个 CPU 调频(物理机有 16 个物理 CPU)
#!/bin/bash
for a in {0..15};
do echo $a;
echo 'performance' > /sys/devices/system/cpu/cpu$a/cpufreq/scaling_governor
cat /sys/devices/system/cpu/cpu$a/cpufreq/scaling_governor
doneBIOS 中修改
禁用物理机超线程
TurboBoost Disabled
Power Technology: Performance Manual balancing of interrupts
对于高性能来说要关闭irqbalance,同时将irq于cpu进行绑定 Ethernet Flow Control (a.k.a. Pause Frames)
暂停帧是适配器和交换机端口之间的以太网级流量控制。当RX或TX缓冲器变满时,适配器将发送“暂停帧”。开关将以毫秒级或更小的时间间隔停止数据流动。这通常足以允许内核排出接口缓冲区,从而防止缓冲区溢出和随后的数据包丢弃或超限。理想地,交换机将在暂停时间期间缓冲输入数据。然而,重要的是认识到这种级别的流控制仅在开关和适配器之间。如果丢弃分组,则较高层(例如TCP)或者在UDP和/或多播的情况下的应用应当启动恢复。需要在NIC和交换机端口上启用暂停帧和流控制,以使此功能生效。有关如何在端口上启用流量控制的说明,请参阅您的网络设备手册或供应商。
在此示例中,禁用流量控制:
# ethtool -a eth3 Pause parameters for eth3:
Autonegotiate:off
RX: off
TX: off
开启流量控制:
# ethtool -A eth3 rx on
# ethtool -A eth3 tx on
要确认流量控制已启用:
# ethtool -a eth3 Pause parameters for eth3:
Autonegotiate:off
RX: on
TX: on Interrupt Coalescence (IC)
中断聚合是指在发出硬中断之前,网络接口将接收的流量或接收流量后经过的时间。中断太快或太频繁会导致系统性能不佳,因为内核停止(或“中断”)正在运行的任务以处理来自硬件的中断请求。中断太晚可能导致流量没有足够快地从NIC中取出。更多的流量可能到达,覆盖以前的流量仍然等待被接收到内核中,导致流量丢失。大多数现代的NIC和驱动程序支持IC,许多驱动程序允许驱动程序自动调节硬件产生的中断数。 IC设置通常包括2个主要组件,时间和数据包数量。时间是在中断内核之前NIC将等待的微秒数(u-sec),并且数字是在中断内核之前允许在接收缓冲器中等待的最大数据包数。 NIC的中断聚合可以使用ethtool -c ethX命令查看,并使用ethtool -C ethX命令进行调整。自适应模式使卡能够自动调节IC。在自适应模式下,驱动程序将检查流量模式和内核接收模式,并在运行中估计合并设置,以防止数据包丢失。当接收到许多小数据包时,这是有用的。更高的中断聚结有利于带宽超过延迟。 VOIP应用(等待时间敏感)可能需要比文件传输协议(吞吐量敏感)少的聚结。不同品牌和型号的网络接口卡具有不同的功能和默认设置,因此请参阅适配器和驱动程序的制造商文档。
在此系统上,默认启用自适应RX:
# ethtool -c eth3 Coalesce parameters for eth3:
Adaptive RX: on TX: off
stats-block-usecs: 0
sample-interval: 0
pkt-rate-low: 400000
pkt-rate-high: 450000
rx-usecs: 16
rx-frames:44
rx-usecs-irq: 0
rx-frames-irq: 0
以下命令关闭自适应IC,并通知适配器在接收到任何流量后立即中断内核:
# ethtool -C eth3 adaptive-rx off rx-usecs 0 rx-frames 0
比较理想的设置是允许至少一些分组在NIC中缓冲,并且在中断内核之前至少有一些时间通过。 有效范围可以从1到数百,取决于系统能力和接收的流量 The Adapter Queue
netdev_max_backlog是Linux内核中的队列,其中流量在从NIC接收之后但在由协议栈(IP,TCP等)处理之前存储。 每个CPU核心有一个积压队列。 给定核心的队列可以自动增长,包含的数据包数量可达netdev_max_backlog设置指定的最大值。 netif_receive_skb()内核函数将为数据包找到相应的CPU,并将数据包排入该CPU的队列。 如果该处理器的队列已满并且已达到最大大小,则将丢弃数据包。 要调整此设置,首先确定积压是否需要增加。 / proc / net / softnet_stat文件在第2列中包含一个计数器,该值在netdev backlog队列溢出时递增。 如果此值随时间增加,则需要增加netdev_max_backlog。
softnet_stat文件的每一行代表一个从CPU0开始的CPU内核:
第一列是中断处理程序接收的帧数。 第2列是由于超过netdev_max_backlog而丢弃的帧数。 第三列是ksoftirqd跑出netdev_budget或CPU时间的次数。
其他列可能会根据版本Red Hat Enterprise Linux而有所不同。 使用以下示例,CPU0和CPU1的以下计数器是前两行:
# cat softnet_stat
0073d76b 00000000 000049ae 00000000 00000000 00000000 00000000 00000000 00000000 00000000 000000d2 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000015c 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0000002a 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
对于上面的示例,netdev_max_backlog不需要更改,因为丢弃数量保持在0:
For CPU0
Total droppedno_budget lock_contention
0073d76b 00000000 000049ae 00000000
For CPU1
Total droppedno_budget lock_contention
000000d2 00000000 00000000 00000000