linux中tuned是否启动命令,tuned-adm 性能调优分析

tuned-adm 性能调优分析

徐小东 (a.k.a toy)

(xxdlhy@gmail.com)

2017.04

tuned-adm 简介

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

性能调优方向

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

性能调优场景

throughput-performance (侧重于吞吐量)

性能调优场景

throughput-performance (侧重于吞吐量)

latency-performance (侧重于低延迟)

性能调优场景

throughput-performance (侧重于吞吐量)

latency-performance (侧重于低延迟)

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

性能调优场景

throughput-performance (侧重于吞吐量)

latency-performance (侧重于低延迟)

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

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

性能调优场景

throughput-performance (侧重于吞吐量)

latency-performance (侧重于低延迟)

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

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

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

性能调优场景

throughput-performance (侧重于吞吐量)

latency-performance (侧重于低延迟)

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

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

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

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

CPU: governor

CPU 时钟频率的管理模式

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

CPU: governor

CPU 时钟频率的管理模式

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

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

CPU: governor

CPU 时钟频率的管理模式

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

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

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

CPU: governor

CPU 时钟频率的管理模式

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

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

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

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

CPU: governor

CPU 时钟频率的管理模式

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

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

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

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

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

查询 governor (目前支持)

$ cpupower --cpu all frequency-info --governors

analyzing CPU 0:

available cpufreq governors: performance powersave

analyzing CPU 1:

available cpufreq governors: performance powersave

analyzing CPU 2:

available cpufreq governors: performance powersave

analyzing CPU 3:

available cpufreq governors: performance powersave

查询 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.

设置 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(省电):处理器为了最有效率的节省能源而接受可能明显的性能减少

查询 energy_perf_bias

$ sudo x86_energy_perf_policy -r

cpu0: 0x0000000000000006 # 代表 normal

cpu1: 0x0000000000000006

cpu2: 0x0000000000000006

cpu3: 0x0000000000000006

NOTE:

{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_kb

NOTE: 替换块设备 sda

磁盘: 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)

查看/设置 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 设备有用

网络: 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)

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

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

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

总结

scheduler: 相比 cfq 的表现,deadline 无论在读还是在写上都更有优势。对于具有固态存储设备的场景而言,blk-mq 值得一试

kernel.sched_min_granularity_ns: 比默认值调得更大一些,推荐设为 10000000(1 毫秒),从而稍微延迟抢占,具有更好的性能表现。该参数值适合上述所有场景

kernel.sched_wakeup_granularity_ns: 比默认值调大,从而避免过度调度,推荐设为 15000000(1.5 毫秒)。仅在注重吞吐量的情况下设置该参数,低延迟的情况不要设置

kernel.sched_migration_cost_ns: 比默认值调大,从而减少任务的重新迁移,推荐设为 5000000(0.5 毫秒)。仅在注重低延迟的情况下设置该参数,高吞吐量的情况不要设置

总结 (续)

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

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

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

总结 (续)

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

noatime

nobarrier

discard

总结 (续)

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

net.ipv4.tcp_rmem

net.ipv4.tcp_wmem

net.ipv4.udp_mem

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

net.core.busy_read

net.core.busy_poll

net.ipv4.tcp_fastopen

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425890.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java学习(173):class反射编程方法

//class反射编程 //定义一个学生类 public class test124 {public String name;protected int age;double height;private double money;public test124(String name,Integer age){this.namename;this.ageage;}public test124(String name,int age,double money){this.namename…

[剑指offer]面试题第[25]题[Leedcode][JAVA][第21题][合并两个有序链表]

【问题描述】[简单] 将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例&#xff1a;输入&#xff1a;1->2->4, 1->3->4 输出&#xff1a;1->1->2->3->4->4【解答思路】 1. 非递归 时间复杂度&…

Windos下navcat连接虚拟机中的mysql

进入mysql命令行&#xff0c; 使用root用户&#xff0c;密码&#xff1a;youpassword&#xff08;你的root密码&#xff09;连接到mysql服务器&#xff1a;  # mysql -u root -proot   mysql>GRANT ALL PRIVILEGES ON *.* TO root% IDENTIFIED BY youpassword WITH GRAN…

第二十三期:大规模网站架构?你是否熟悉?

大规模网站架构 •PHP –facebook,yahoo •Java –taobao,163 •Python –google •.NET –MySpace 语言不是可伸缩性的关键&#xff0c;架构才是关键 网站架构的目标 •高可用性(High Availability) •可伸缩性(Scalability) •高性能(High Performance) 事务 …

c语言子查询返回子菜单,T-SQL基础(三)之子查询与表表达式

子查询在嵌套查询中&#xff0c;最外面查询结果集返回给调用方&#xff0c;称为外部查询。嵌套在外部查询内的查询称为子查询&#xff0c;子查询的结果集供外部查询使用。根据是否依赖外部查询&#xff0c;可将子查询分为自包含子查询和相关子查询。自包含子查询不依赖外部查询…

centos踩坑指南之安装composer

composer是php的一个依赖管理器&#xff0c;那么安装composer可以快速编译php 但是在centos7以上 安装composer的有一个步骤有个小问题 对于centos6来说是 sudo mv composer.phar /usr/local/bin/composer对于centos7来说 sudo mv composer.phar /usr/bin/composer 这点要是不知…

[Leedcode][JAVA][第98题][验证二叉搜索树]

【问题描述】[第98题][验证二叉搜索树][中等] 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征&#xff1a;节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜…

图解CPU?

了解CPU 芯片组 CPU微观图 Cache层次结构 Cache-续 Xeon 5600系列CPU CPU内部各部件访问速度 False sharing问题 Cache lines Intel Sandy Bridge来了 CPU拓扑结构图 Cache相关硬件事件

c语言获取dll文件路径,C语言URLDownloadToFile获取文件下载进度

URLDownloadToFile是urlmon.dll提供的网络操作API&#xff0c;可以用于从指定的URL下载文件到本地&#xff0c;在C中通过类很容易实现下载进度的获取&#xff0c;今天需要在C语言中使用到这个函数&#xff0c;这里记录一下使用方法。该函数的定义如下所示。HRESULT URLDownload…

HOG特征人体检测

1. 引言 HOG&#xff08;Histogram of Oriented Gradient&#xff09;&#xff0c;即方向梯度直方图。它通过计算和统计局部区域的梯度方向直方图来构成特征&#xff0c;一般与SVM分类器结合用于目标的图像识别。由于人体姿势和外表的多变&#xff0c;在图像中检测人体是一项具…

[Leedcode][JAVA][第45题][跳跃游戏 II][贪心算法]

【问题描述】[Leedcode][JAVA][第45题][跳跃游戏 II] 输入: [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置&#xff0c;跳 1 步&#xff0c;然后跳 3 步到达数组的最后一个位置。【解答思路】 1. 动态规划 超时 第 1 步&…

大型动态应用系统平台系统架构?这些大家并不陌生

大型动态应用系统平台系统架构[多图] 动态应用&#xff0c;是相对于网站静态内容而言&#xff0c;是指以c/c、php、Java、perl、.net等服务器端语言开发的网络应用软件&#xff0c;比如论坛、网络相册、交友、BLOG等常见应用。动态应用系统通常与数据库系统、缓存系统、分布式…

c语言round函数能四舍五入吗,怎么利用round函数实现四舍五入?

Excel强大的制表功能让很多人都对它无比依赖&#xff0c;它也早已成为日常必备的工具。我们在办公室工作时&#xff0c;经常会遇到要用 Excel处理数字的情况&#xff0c;需要对其进行四舍五入。那么实现这一操作&#xff0c;我们需要使用哪些Excel函数呢&#xff1f;今日小编就…

洛谷 - P2181 - 对角线 - 打表 - 组合数学

https://www.luogu.org/problemnew/show/P2181 对于某条对角线&#xff0c;除去从两端出发的对角线&#xff0c;其他的都与它有1个交点。 每个点有(n-3)条对角线&#xff0c;每条对角线和其余C(n-2,2)条对角线都有1个交点&#xff0c;共有n个点&#xff0c;重复计算交点再除以2…

InnoDB 事务/锁/多版本分析?你了解多少?

目录 • InnoDB事务 – 事务结构/功能 – XA事务/Group Commit – mini-transaction• InnoDB锁 – 锁结构/类型/功能 – 锁等待/死锁检测 – 自增序列锁(autoinc lock) – 半一致读(semi-consistent read) – 隐式锁(implicit lock) • InnoDB多版本 – ReadView –…

[剑指offer]面试题第[42]题[Leedcode][JAVA][第53题][最大子序和][动态规划][贪心][分治]

【问题描述】[第53题][最大子序和][中等] 给定一个整数数组 nums &#xff0c;找到一个具有最大和的连续子数组&#xff08;子数组最少包含一个元素&#xff09;&#xff0c;返回其最大和。示例:输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大…

排队枪毙游戏c语言,基于C语言实现的约瑟夫生者死者游戏

1 项目简介约瑟夫生者死者游戏的大意是&#xff1a;30个旅客同乘一条船&#xff0c;因为严重超载&#xff0c;加上风高浪大危险万分&#xff1b;因此船长告诉乘客&#xff0c;只有将全船一半的旅客投入海中&#xff0c;其余人才能幸免于难。无奈&#xff0c;大家只得统一这种方…

[Leedcode][JAVA][第983题][最低票价][动态规划]

【问题描述】[第983题][最低票价][中等] 在一个火车旅行很受欢迎的国度&#xff0c;你提前一年计划了一些火车旅行。在接下来的一年里&#xff0c;你要旅行的日子将以一个名为 days 的数组给出。每一项是一个从 1 到 365 的整数。火车票有三种不同的销售方式&#xff1a;一张为…

disperse函数 C语言,武汉工业学院电气1006班C语言测试题.doc

1006班C语言测试题姓名&#xff1a; 学号&#xff1a;1.以下程序的输出结果为( )。   main( )    { int i010,j10;    printf("%d,%d\n",i,j--);   } A 11,9 B 9,10 C 8,10 D 9,92&#xff0e;设a为int型变量&#xff0c;执行下列赋值语句后&#xff0c;a的取…

[Leedcode][JAVA][第572题][另一个树的子树]

【问题描述】 给定两个非空二叉树 s 和 t&#xff0c;检验 s 中是否包含和 t 具有相同结构和节点值的子树。s 的一个子树包括 s 的一个节点和这个节点的所有子孙。s 也可以看做它自身的一棵子树。示例 1: 给定的树 s:3/ \4 5/ \1 2 给定的树 t&#xff1a;4 / \1 2 返回…