php做的网站如何该样式,云服务器产品介绍,某鲜花网站的数据库建设,厦门企业宣传片制作tuned-adm 性能调优分析徐小东 (a.k.a toy)(xxdlhygmail.com)2017.04tuned-adm 简介RHEL 自带的性能调优工具#xff0c;通过针对特定应用场景提供配置 (profile) 来改善系统性能性能调优方向CPU: governor、energy_perf_bias、min_perf_pct性能调优方向CPU: governor、energy…tuned-adm 性能调优分析徐小东 (a.k.a toy)(xxdlhygmail.com)2017.04tuned-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: governorCPU 时钟频率的管理模式performance (性能)强制 CPU 尽可能使用最高的时钟频率CPU: governorCPU 时钟频率的管理模式performance (性能)强制 CPU 尽可能使用最高的时钟频率powersave (省电)强制 CPU 尽可能使用最低的时钟频率CPU: governorCPU 时钟频率的管理模式performance (性能)强制 CPU 尽可能使用最高的时钟频率powersave (省电)强制 CPU 尽可能使用最低的时钟频率ondemand (按需)系统负载高时CPU 使用最高的时钟频率系统空闲时CPU 使用最低的时钟频率CPU: governorCPU 时钟频率的管理模式performance (性能)强制 CPU 尽可能使用最高的时钟频率powersave (省电)强制 CPU 尽可能使用最低的时钟频率ondemand (按需)系统负载高时CPU 使用最高的时钟频率系统空闲时CPU 使用最低的时钟频率userspace (用户态)允许用户或用户态程序自行设置时钟频率CPU: governorCPU 时钟频率的管理模式performance (性能)强制 CPU 尽可能使用最高的时钟频率powersave (省电)强制 CPU 尽可能使用最低的时钟频率ondemand (按需)系统负载高时CPU 使用最高的时钟频率系统空闲时CPU 使用最低的时钟频率userspace (用户态)允许用户或用户态程序自行设置时钟频率conservative (保守)类似 ondemand区别是它根据是否适合负载来调整时钟频率而不是简单的在最高和最低之间选择查询 governor (目前支持)$ cpupower --cpu all frequency-info --governorsanalyzing 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查询 governor (正在使用)$ cpupower --cpu all frequency-info --policyanalyzing CPU 0:current policy: frequency should be within 400 MHz and 3.20 GHz.The governor powersave may decide which speed to usewithin 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 usewithin 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 usewithin 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 usewithin 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_governorCPU: energy_perf_biasEnergy Performance Bias(能耗/性能偏差)performance(性能)处理器不为了节省能源而牺牲性能CPU: energy_perf_biasEnergy Performance Bias(能耗/性能偏差)performance(性能)处理器不为了节省能源而牺牲性能normal(正常)处理器为了可能明显的节省能源而容许牺牲较小的性能CPU: energy_perf_biasEnergy Performance Bias(能耗/性能偏差)performance(性能)处理器不为了节省能源而牺牲性能normal(正常)处理器为了可能明显的节省能源而容许牺牲较小的性能powersave(省电)处理器为了最有效率的节省能源而接受可能明显的性能减少查询 energy_perf_bias$ sudo x86_energy_perf_policy -rcpu0: 0x0000000000000006 # 代表 normalcpu1: 0x0000000000000006cpu2: 0x0000000000000006cpu3: 0x0000000000000006NOTE:{kernel-source}/tools/power/x86/x86_energy_perf_policy设置 energy_perf_bias$ sudo x86_energy_perf_policy performancecpu0 msr0x1b0 0x0000000000000006 - 0x0000000000000000cpu1 msr0x1b0 0x0000000000000006 - 0x0000000000000000cpu2 msr0x1b0 0x0000000000000006 - 0x0000000000000000cpu3 msr0x1b0 0x0000000000000006 - 0x0000000000000000CPU: min_perf_pctIntel 处理器 P-State(Performance States性能状态) 的最小值指最大化性能级别的百分比max_perf_pctP-State 的最大值指可用性能的百分比num_pstates硬件支持的 P-State 数查询 min_perf_pct/sys/devices/system/cpu/intel_pstate内存: transparent_hugepagesTransparent Huge Pages (透明巨页)内核自动分配巨页给进程always尝试为任意进程分配巨页内存: transparent_hugepagesTransparent Huge Pages (透明巨页)内核自动分配巨页给进程always尝试为任意进程分配巨页madvise利用 madvise() 系统调用只为个别进程分配巨页内存: transparent_hugepagesTransparent Huge Pages (透明巨页)内核自动分配巨页给进程always尝试为任意进程分配巨页madvise利用 madvise() 系统调用只为个别进程分配巨页never禁用透明巨页查询/设置 transparent_hugepagescat /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磁盘: schedulerI/O 调度器cfqCompletely 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)查看/设置 schedulercat /sys/block/sda/queue/scheduler # 查看当前使用的 I/O 调度器echo deadline /sys/block/sda/queue/scheduler # 临时将 I/O 调度器设为 deadline追加 elevatordeadline 内核参数 # 永久设置scsi_mod.use_blk_mqy dm_mod.use_blk_mqy # 注意启用 blk-mq 后将禁用所有别的 I/O 调度器NOTE: 替换块设备 sdakernel.sched_*kernel.sched_min_granularity_ns: 针对 CPU 计算密集型任务设置调度器的最小抢占粒度kernel.sched_wakeup_granularity_ns: 设置调度器的唤醒粒度这将延迟抢占效应并减少过度调度kernel.sched_migration_cost_ns: 调度器认为迁移的进程“cache hot”因而更少可能被重新迁移的总时间文件系统 (ext4)挂载参数relatime/noatime: 对于如何更新 inode 访问时间的策略barrier0|1(barrier/nobarrier): 该选项开启或禁用在 jbd 代码中使用写入 barrierdiscard/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)commongovernorperformanceenergy_perf_biasperformancemin_perf_pct100transparent_hugepagesalways *readahead4096schedulerdeadline ** 视情况而定throughput-performancekernel.sched_min_granularity_ns 10000000kernel.sched_wakeup_granularity_ns 15000000vm.dirty_ratio 40vm.dirty_background_ratio 10vm.swappiness 10latency-performancekernel.sched_min_granularity_ns 10000000kernel.sched_migration_cost_ns 5000000vm.dirty_ratio 10vm.dirty_background_ratio 3vm.swappiness 10network-throughput在 throughput-performance 基础上增加网络调优kernel.sched_min_granularity_ns 10000000kernel.sched_wakeup_granularity_ns 15000000vm.dirty_ratio 40vm.dirty_background_ratio 10vm.swappiness 10net.ipv4.tcp_rmem 4096 87380 16777216net.ipv4.tcp_wmem 4096 16384 16777216net.ipv4.udp_mem 3145728 4194304 16777216network-latency在 latency-performance 基础上增加网络调优transparent_hugepagesneverkernel.sched_min_granularity_ns 10000000kernel.sched_migration_cost_ns 5000000vm.dirty_ratio 10vm.dirty_background_ratio 3vm.swappiness 10net.core.busy_read 50net.core.busy_poll 50net.ipv4.tcp_fastopen 3virtual-hostkernel.sched_min_granularity_ns 10000000kernel.sched_wakeup_granularity_ns 15000000kernel.sched_migration_cost_ns 5000000vm.dirty_ratio 40vm.dirty_background_ratio 5vm.swappiness 10virtual-guestkernel.sched_min_granularity_ns 10000000kernel.sched_wakeup_granularity_ns 15000000vm.dirty_ratio 30vm.dirty_background_ratio 10vm.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低延迟的情况通常设置为 10vm.dirty_background_ratio: 高吞吐量的情况可设为 10低延迟的情况可设为 3vm.swappiness: 一般设为 10从而避免过多 swap 交换。仅在作为虚拟客户机的情况下可设高一些(30)总结 (续)毫无疑问 noatime 应该作为默认挂载参数nobarrier 在写上的性能优势十分明显discard 适合 SSD 的场合noatimenobarrierdiscard总结 (续)仅在注重网络吞吐量的情况下调节net.ipv4.tcp_rmemnet.ipv4.tcp_wmemnet.ipv4.udp_mem仅在注重网络低延迟的情况下调节net.core.busy_readnet.core.busy_pollnet.ipv4.tcp_fastopen