• @linuxtoy

主题大纲


  1. tuned-adm 简介03

  2. 性能调优方向04

  3. 性能调优场景09

  4. 性能调优分析15

  5. 总结49

tuned-adm 简介

RHEL 自带的性能调优工具,通过针对特定应用场景提供配置 (profile) 来改善系统性能

tuned-adm 官方主页

性能调优方向

  • CPU: governor、energy_perf_bias、min_perf_pct

性能调优方向

  • CPU: governor、energy_perf_bias、min_perf_pct

  • 内存: transparent_hugepages、vm.{dirty_ratio,dirty_background_ratio,swappiness}

性能调优方向

  • CPU: governor、energy_perf_bias、min_perf_pct

  • 内存: transparent_hugepages、vm.{dirty_ratio,dirty_background_ratio,swappiness}

  • 磁盘: readahead、scheduler、kernel.sched_{min_granularity_ns,wakeup_granularity_ns,migration_cost_ns}

性能调优方向

  • CPU: governor、energy_perf_bias、min_perf_pct

  • 内存: transparent_hugepages、vm.{dirty_ratio,dirty_background_ratio,swappiness}

  • 磁盘: readahead、scheduler、kernel.sched_{min_granularity_ns,wakeup_granularity_ns,migration_cost_ns}

  • 文件系统 (EXT4): relatime/noatime、barrier/nobarrier、discard/nodiscard

性能调优方向

  • CPU: governor、energy_perf_bias、min_perf_pct

  • 内存: transparent_hugepages、vm.{dirty_ratio,dirty_background_ratio,swappiness}

  • 磁盘: readahead、scheduler、kernel.sched_{min_granularity_ns,wakeup_granularity_ns,migration_cost_ns}

  • 文件系统 (EXT4): relatime/noatime、barrier/nobarrier、discard/nodiscard

  • 网络: net.ipv4.{tcp_rmem,tcp_wmem,udp_mem}、net.core.busy_{read,poll}、net.ipv4.tcp_fastopen

↓↑

性能调优场景

  1. throughput-performance (侧重于吞吐量)

性能调优场景

  1. throughput-performance (侧重于吞吐量)

  2. latency-performance (侧重于低延迟)

性能调优场景

  1. throughput-performance (侧重于吞吐量)

  2. latency-performance (侧重于低延迟)

  3. network-throughput (侧重于网络吞吐量)

性能调优场景

  1. throughput-performance (侧重于吞吐量)

  2. latency-performance (侧重于低延迟)

  3. network-throughput (侧重于网络吞吐量)

  4. network-latency (侧重于更低的网络延迟)

  • @linuxtoy

↓↑13 / 53

性能调优场景

  1. throughput-performance (侧重于吞吐量)

  2. latency-performance (侧重于低延迟)

  3. network-throughput (侧重于网络吞吐量)

  4. network-latency (侧重于更低的网络延迟)

  5. virtual-host (侧重于优化虚拟主机)

  • @linuxtoy

↓↑14 / 53

性能调优场景

  1. throughput-performance (侧重于吞吐量)

  2. latency-performance (侧重于低延迟)

  3. network-throughput (侧重于网络吞吐量)

  4. network-latency (侧重于更低的网络延迟)

  5. virtual-host (侧重于优化虚拟主机)

  6. virtual-guest (侧重于优化虚拟客户机)

CPU: governor

CPU 时钟频率的管理模式

  • performance (性能):强制 CPU 尽可能使用最高的时钟频率

CPU: governor

CPU 时钟频率的管理模式

  • performance (性能):强制 CPU 尽可能使用最高的时钟频率

  • powersave (省电):强制 CPU 尽可能使用最低的时钟频率

  • @linuxtoy

↓↑17 / 53

CPU: governor

CPU 时钟频率的管理模式

  • performance (性能):强制 CPU 尽可能使用最高的时钟频率

  • powersave (省电):强制 CPU 尽可能使用最低的时钟频率

  • ondemand (按需):系统负载高时,CPU 使用最高的时钟频率;系统空闲时,CPU 使用最低的时钟频率

  • @linuxtoy

↓↑18 / 53

CPU: governor

CPU 时钟频率的管理模式

  • performance (性能):强制 CPU 尽可能使用最高的时钟频率

  • powersave (省电):强制 CPU 尽可能使用最低的时钟频率

  • ondemand (按需):系统负载高时,CPU 使用最高的时钟频率;系统空闲时,CPU 使用最低的时钟频率

  • userspace (用户态):允许用户或用户态程序自行设置时钟频率

19 / 53

CPU: governor

CPU 时钟频率的管理模式

  • performance (性能):强制 CPU 尽可能使用最高的时钟频率

  • powersave (省电):强制 CPU 尽可能使用最低的时钟频率

  • ondemand (按需):系统负载高时,CPU 使用最高的时钟频率;系统空闲时,CPU 使用最低的时钟频率

  • userspace (用户态):允许用户或用户态程序自行设置时钟频率

  • conservative (保守):类似 ondemand,区别是它根据是否适合负载来调整时钟频率,而不是简单的在最高和最低之间选择

  • @linuxtoy

↓↑20 / 53

查询 governor (目前支持)

$ cpupower --cpu all frequency-info --governors
analyzing CPU 0:
available cpufreq governors: performance powersaveanalyzing CPU 1:
available cpufreq governors: performance powersaveanalyzing CPU 2:
available cpufreq governors: performance powersaveanalyzing CPU 3:
available cpufreq governors: performance powersave
  • @linuxtoy

↓↑21 / 53

查询 governor (正在使用)

$ cpupower --cpu all frequency-info --policy
analyzing CPU 0:
current policy: frequency should be within 400 MHz and 3.20 GHz.
The governor "powersave" may decide which speed to use
within this range.analyzing CPU 1:
current policy: frequency should be within 400 MHz and 3.20 GHz.
The governor "powersave" may decide which speed to use
within this range.analyzing CPU 2:
current policy: frequency should be within 400 MHz and 3.20 GHz.
The governor "powersave" may decide which speed to use
within this range.analyzing CPU 3:
current policy: frequency should be within 400 MHz and 3.20 GHz.
The governor "powersave" may decide which speed to use
within this range.
  • @linuxtoy

↓↑22 / 53

设置 governor

方法一:

$ sudo cpupower frequency-set --governor performance

方法二:

/sys/devices/system/cpu/cpu*/cpufreq/scaling_available_governors
/sys/devices/system/cpu/cpu*/cpufreq/scaling_governor

CPU: energy_perf_bias

Energy Performance Bias(能耗/性能偏差)

  • performance(性能):处理器不为了节省能源而牺牲性能

CPU: energy_perf_bias

Energy Performance Bias(能耗/性能偏差)

  • performance(性能):处理器不为了节省能源而牺牲性能

  • normal(正常):处理器为了可能明显的节省能源而容许牺牲较小的性能

CPU: energy_perf_bias

Energy Performance Bias(能耗/性能偏差)

  • performance(性能):处理器不为了节省能源而牺牲性能

  • normal(正常):处理器为了可能明显的节省能源而容许牺牲较小的性能

  • powersave(省电):处理器为了最有效率的节省能源而接受可能明显的性能减少

  • @linuxtoy

↓↑26 / 53

查询 energy_perf_bias

$ sudo x86_energy_perf_policy -r
cpu0: 0x0000000000000006            # 代表 normal
cpu1: 0x0000000000000006
cpu2: 0x0000000000000006
cpu3: 0x0000000000000006NOTE:
{kernel-source}/tools/power/x86/x86_energy_perf_policy

设置 energy_perf_bias

$ sudo x86_energy_perf_policy performance
cpu0  msr0x1b0 0x0000000000000006 -> 0x0000000000000000
cpu1  msr0x1b0 0x0000000000000006 -> 0x0000000000000000
cpu2  msr0x1b0 0x0000000000000006 -> 0x0000000000000000
cpu3  msr0x1b0 0x0000000000000006 -> 0x0000000000000000

CPU: min_perf_pct

Intel 处理器 P-State(Performance States,性能状态) 的最小值,指最大化性能级别的百分比

  • max_perf_pct:P-State 的最大值,指可用性能的百分比

  • num_pstates:硬件支持的 P-State 数

查询 min_perf_pct

/sys/devices/system/cpu/intel_pstate

内存: transparent_hugepages

Transparent Huge Pages (透明巨页),内核自动分配巨页给进程

  • always:尝试为任意进程分配巨页

内存: transparent_hugepages

Transparent Huge Pages (透明巨页),内核自动分配巨页给进程

  • always:尝试为任意进程分配巨页

  • madvise:利用 madvise() 系统调用只为个别进程分配巨页

内存: transparent_hugepages

Transparent Huge Pages (透明巨页),内核自动分配巨页给进程

  • always:尝试为任意进程分配巨页

  • madvise:利用 madvise() 系统调用只为个别进程分配巨页

  • never:禁用透明巨页

查询/设置 transparent_hugepages

cat /sys/kernel/mm/transparent_hugepage/enabled             # 查看
echo "always" > /sys/kernel/mm/transparent_hugepage/enabled # 设置

内存: vm.*

  • vm.dirty_background_ratio: 设置 dirty pages 开始后台回写时的百分比

  • vm.dirty_ratio: 设置 dirty pages 开始回写时的百分比

  • vm.swappiness: 控制从物理内存换出到交换空间的相对权重,取值为 0 到 100。更低的值导致避免交换,而更高的值导致尝试使用交换空间

磁盘: readahead

读取文件列表的内容到内存,以便当实际需要时可从缓存读取

/sys/block/sda/queue/read_ahead_kbNOTE: 替换块设备 sda
  • LinuxTOY

  • @linuxtoy

↓↑36 / 53

磁盘: scheduler

I/O 调度器

  • cfq:Completely Fair Queueing(完全公平队列)调度器,它将进程分为实时、尽其所能和空闲三个独立的类别。实时类别的进程先于尽其所能类别的进程执行,而尽其所能类别的进程总是在空闲类别的进程之前执行。默认情况下分配到尽其所能类别的进程

  • deadline:尝试为 I/O 请求提供有保障的延迟。适用于大多数情况,尤其是读取操作比写入操作更频繁的请求

  • noop:执行简单的 FIFO(先进先出)调度算法,并实现请求合并。适合使用快速存储的 CPU 计算密集型系统

  • blk-mq:即 Multi-Queue Block IO Queuing Mechanism(多队列块 IO 队列机制),它利用具有多核的 CPU 来映射 I/O 队列到多队列。与传统的 I/O 调度器相比,通过多线程及多个 CPU 核心来分发任务,从而能够加速读写操作。该调度器适合高性能的闪存设备(如 PCIe SSD)

  • @linuxtoy

↓↑37 / 53

查看/设置 scheduler

cat /sys/block/sda/queue/scheduler                # 查看当前使用的 I/O 调度器
echo "deadline" > /sys/block/sda/queue/scheduler  # 临时将 I/O 调度器设为 deadline
追加 elevator=deadline 内核参数                     # 永久设置scsi_mod.use_blk_mq=y dm_mod.use_blk_mq=y         # 注意启用 blk-mq 后,将禁用所有别的 I/O 调度器NOTE: 替换块设备 sda

kernel.sched_*

  • kernel.sched_min_granularity_ns: 针对 CPU 计算密集型任务设置调度器的最小抢占粒度

  • kernel.sched_wakeup_granularity_ns: 设置调度器的唤醒粒度,这将延迟抢占效应,并减少过度调度

  • kernel.sched_migration_cost_ns: 调度器认为迁移的进程“cache hot”因而更少可能被重新迁移的总时间

文件系统 (ext4)

挂载参数

  • relatime/noatime: 对于如何更新 inode 访问时间的策略

  • barrier=<0|1>(barrier/nobarrier): 该选项开启或禁用在 jbd 代码中使用写入 barrier

  • discard/nodiscard: 控制是否执行 discard/TRIM 命令,对 SSD 设备有用

  • @linuxtoy

↓↑40 / 53

网络: net.ipv4.{tcp_rmem,tcp_wmem,udp_mem}

  • tcp_rmem:用于 autotuning 函数,设置 TCP 接收缓冲的最小、默认及最大字节数

  • tcp_wmen:用于 autotuning 函数,设置 TCP 发送缓冲的最小、默认及最大字节数

  • udp_mem:设置 UDP 队列的页数

网络: net.core.busy_{read,poll}

  • net.core.busy_read: 针对 socket 读取设置低延迟 busy poll 超时

  • net.core.busy_poll: 针对 poll 和 select 设置低延迟 busy poll 超时

  • net.ipv4.tcp_fastopen: TCP 快速打开(TFO)

  • @linuxtoy

↓↑42 / 53

common

governor=performance
energy_perf_bias=performance
min_perf_pct=100
transparent_hugepages=always *
readahead=>4096
scheduler=deadline ** 视情况而定

throughput-performance

kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.swappiness = 10

latency-performance

kernel.sched_min_granularity_ns = 10000000
kernel.sched_migration_cost_ns = 5000000
vm.dirty_ratio = 10
vm.dirty_background_ratio = 3
vm.swappiness = 10
  • @linuxtoy

↓↑45 / 53

network-throughput

在 throughput-performance 基础上增加网络调优

kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
vm.dirty_ratio = 40
vm.dirty_background_ratio = 10
vm.swappiness = 10
net.ipv4.tcp_rmem = 4096        87380   16777216
net.ipv4.tcp_wmem = 4096        16384   16777216
net.ipv4.udp_mem = 3145728      4194304 16777216
  • LinuxTOY

  • @linuxtoy

↓↑46 / 53

network-latency

在 latency-performance 基础上增加网络调优

transparent_hugepages=never
kernel.sched_min_granularity_ns = 10000000
kernel.sched_migration_cost_ns = 5000000
vm.dirty_ratio = 10
vm.dirty_background_ratio = 3
vm.swappiness = 10
net.core.busy_read = 50
net.core.busy_poll = 50
net.ipv4.tcp_fastopen = 3

virtual-host

kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
kernel.sched_migration_cost_ns = 5000000
vm.dirty_ratio = 40
vm.dirty_background_ratio = 5
vm.swappiness = 10

virtual-guest

kernel.sched_min_granularity_ns = 10000000
kernel.sched_wakeup_granularity_ns = 15000000
vm.dirty_ratio = 30
vm.dirty_background_ratio = 10
vm.swappiness = 30
  • @linuxtoy

↓↑49 / 53

↓↑50 / 53

总结 (续)

  • vm.dirty_ratio: 高吞吐量的情况一般设置为 40,低延迟的情况通常设置为 10

  • vm.dirty_background_ratio: 高吞吐量的情况可设为 10,低延迟的情况可设为 3

  • vm.swappiness: 一般设为 10,从而避免过多 swap 交换。仅在作为虚拟客户机的情况下可设高一些(30)

  • @linuxtoy

↓↑51 / 53

总结 (续)

毫无疑问 noatime 应该作为默认挂载参数,nobarrier 在写上的性能优势十分明显,discard 适合 SSD 的场合

noatime
nobarrier
discard
  • @linuxtoy

↓↑52 / 53

总结 (续)

仅在注重网络吞吐量的情况下调节

net.ipv4.tcp_rmem
net.ipv4.tcp_wmem
net.ipv4.udp_mem

仅在注重网络低延迟的情况下调节

net.core.busy_read
net.core.busy_poll
net.ipv4.tcp_fastopen
  • @linuxtoy

↓↑53 / 53

参考链接

  • Using CPUfreq Governors

  • x86_energy_perf_policy

  • intel-pstate

  • readahead

  • Advanced Configuration and Power Interface

  • TCP Fast Open: expediting web services

  • ext4

  • blk-mq

转载于:https://blog.51cto.com/welcomeweb/2089601

TUNED-ADM 性能调优分析相关推荐

  1. 应用性能调优分析与总结

    当出现用户抱怨网站太卡.软硬件需要升级.系统性能不佳等情况,程序员这时需要对系统进行性能调优,实现性能最大化,满足业务的最新需求. 1   为什么要性能调优? 应用上线前在性能上无法满足需求. 应用系 ...

  2. 【JVM性能调优】jstack和线程dump分析

    一.几个概念: 1.jstack命令的语法格式:jstack <pid>,可用于查看java进程id. 2.Dump文件:Dump文件是进程的内存镜像.可以把程序的执行状态通过调试器保存到 ...

  3. eclipse占用内存过大_Java性能调优学习(三)-jmap+mat分析内存溢出问题实战

    上一节我们讲了jinfo,jstat,jmap的使用,还简单的讲了下如何使用jmap导出内存映像文件,这次,我们来实战一把内存溢出问题. 环境准备 首先我们先模拟一下内存溢出的场景,以下这段代码在访问 ...

  4. linux性能调优干货,【干货分享】详解Linux性能调优之tuned特性

    tuned简介 对普通用户而言,Linux应用环境优化是比较困难的.领域多,范围广:CPU.存储.缓存策略.内存管理等涉及的参数.Linux内部虽然有默认设置值,可以应对大多数的情况场景,但是针对一些 ...

  5. php xingnengfenxi_PHP 性能分析第三篇: 性能调优实战

    在本系列的 第一篇 中,我们介绍了 XHProf .而在 第二篇 中,我们深入研究了 XHGui UI, 现在最后一篇,让我们把 XHProf /XHGui 的知识用到工作中! 性能调优 不用运行的代 ...

  6. PHP 性能分析第三篇: 性能调优实战

    注意:本文是我们的 PHP 性能分析系列的第三篇,点此阅读 PHP 性能分析第一篇: XHProf & XHGui 介绍 ,或  PHP 性能分析第二篇: 深入研究 XHGui. 在本系列的 ...

  7. Java性能调优工具:MAT内存分析工具,上万字带你彻底了解

    MAT内存分析工具 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基于Eclipse开发的一款免费的性 ...

  8. 发布即巅峰:Java性能调优六大工具:MAT内存分析工具

    MAT内存分析工具 MAT是MemoryAnalyzerTool的简称,它是一款功能强大的Java堆内存分析器,可以用于查找内存泄漏以及查看内存消耗情况.MAT是 基于Eclipse开发的一款免费的性 ...

  9. JVM性能调优实践——G1 垃圾收集器分析、调优篇

    前言 关于G1 GC以及其他垃圾收集器的介绍可以参考前一篇JVM性能调优实践--G1 垃圾收集器介绍篇.了解了G1垃圾收集器的运行机制之后,就可以针对一些GC相关参数来调整内存分配以及运行策略.下文的 ...

最新文章

  1. 12、OpenCV实现图像的空间滤波——图像平滑
  2. html不支持css3,ie不支持css3吗?
  3. __clone class php_PHP中__clone()方法详解
  4. js(Dom+Bom)第一天(2)
  5. php having,having方法
  6. 验证部分表单是否重复
  7. Windows 取消 Lock Screen 显示
  8. Windows下Vim设置
  9. inno setup安装之前关闭mysql_inno setup 安装前判断进程是否存在,以及停止相应进程转...
  10. x9此计算机上没有hasp_中琅条码打印软件安装后弹出HASP错误代码处理方法
  11. excel服务器bom修改,物料清单BOM表的实现方法_勤哲Excel服务器 - 勤哲app应用之家...
  12. 三维扫描仪修复的功能有多重要
  13. 对象存储OSS适用于哪些场景
  14. android仿qq音乐桌面歌词,Android自定义View,高仿QQ音乐歌词滚动控件!
  15. HTML+CSS(part 1)
  16. C语言的转义字符,八进制
  17. sscanf提取字符串数字
  18. 3D图形学(一):三维几何学基础(2):向量点乘
  19. html5中分镜图文脚本,抖音分镜脚本这样做 轻松打造100w+粉丝大号
  20. 东芝或于今秋出售子公司智能电表巨头兰吉尔

热门文章

  1. css3波浪纹路_css3动画水波纹、波浪
  2. 学习笔记----MATLAB面向对象编程入门02--类的方法、构造函数
  3. html range 后插入,javascript – range.insertNode()未按预期插入文本节点
  4. 有什么好用的写论文软件?
  5. Cannot start process, the working directory ‘D:\Users\qyp\PycharmProjects\py---pycharm报错
  6. “手里有把锤子,看见什么都是钉子” 20200606
  7. scrapy框架爬取糗妹妹网站妹子图分类的所有图片
  8. Halcon 学习之焊点提取
  9. CentOS 7.9 使用Docker安装悟空72crm-11.0-Spring
  10. 计算机一级二进制转十六进制,计算机进制之二进制、十进制、十六进制之间的转换...