热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

从另外一个角度来讨论一下LINUX下的CPU优化

对于开源数据库核国产数据库来说,CPU的优化也是十分重要的。以前我们谈到的CPU优

   对于开源数据库核国产数据库来说,CPU的优化也是十分重要的。以前我们谈到的CPU优化都是如何监控CPU,找出CPU的问题,而很少谈到如何优化CPU。这实际上只是CPU优化的一个方面,我们只是从CPU的消耗者角度来谈CPU优化。CPU优化不仅仅可以从优化CPU的消耗的角度去考虑,也可以从CPU的调度与应用策略去考虑。根据不同的应用场景和需求,去优化CPU。今天我们从CPU的优化这个角度来讨论一下LINUX下的CPU优化。
CPU优化分为直接优化与间接优化。CPU的直接优化是让物理CPU发挥出更强的能力,主要是针对CPU调度策略、CPU节能等方面进行调整。现在的服务器为了节约能源,可以开启节能模式,当系统负载不高的时候,让CPU以节能方式运行。这种节能模式可以有效的节约能源,不过在系统负载突然增加的时候,CPU的工作模式有一个切换的延时,会影响超高并发系统的QPS。现在很多企业都选择了关闭节能模式的方式来避免这种情况出现,甚至把关闭节能模式写入了系统上线的规范之中。实际上对于觉得大多数系统来说,节能模式带来的性能下降是很有限的,而节能模式能够带来的电能消耗的节约是十分明显的,将大多数服务器的节能模式打开有助于节约企业的电能开销。
除了在bios中开启和关闭节能模式外,在Linux中也可以调整CPU的工作模式,这方面LINUX的不同版本存在较大的差异。在RHEL 6的时候,主要是用cpuspeed服务,这个服务针对主频超过1.5GHZ的CPU起作用,可以根据负载情况限制CPU的速度,从而达到节能的作用。这个服务对于某些高负载或者对响应时间要求比较高的应用会造成性能影响。如果遇到了类似的性能问题,可以通过关闭这个服务来解决这方面的性能问题。定位这个问题的办法也十分简单,那就是ps -ef或者top命令检查操作系统的时候,可以看到很多cpuspeed的进程。关闭这个服务的方法可以使用:
service cpuspeed stop
或者
systemctl cpuspeed.service stop
还有一个会影响CPU的工作模式的服务是Irqbalance服务,可以使用:
systemctl list-dependencies |grep irqbalance
来查看你的操作系统是否支持安装或者启用这个服务。Irqbalance服务可以对系统终端进行优化,当系统处于性能模式的时候,自动将中断分散到多个CPU上,从而让CPU使用更为均衡。当系统处于节能模式下,irqbalance服务可以把所有中断都发送到某个CPU核上,从而让大多数CPU处于休眠状态,从而节约能源。因此你可以根据不同的应用场景来选择是否启用irqbalance。如果你发现irqbalance服务确实已经影响了PG数据库的性能,那么你可以选择关闭irqbalance。可以使用下列命令关闭irqbalance:
service irqbalance stop
或者:
systemctl cpuspeed.service stop
针对CPU的直接优化方案其实并不多,作为现在的X86服务器来说,主要是针对运行模式进行调整。从REHL 6.3开始提供了一个CPU调优工具-tuned。tuned包含了一个服务和一个管理工具tuned-adm。通过tuned-adm可以调整CPU的应用策略。

root@node123:/root||-->>tuned-adm list

Available profiles:

- balanced                    - General non-specialized tuned profile

- desktop                     - Optimize for the desktop use-case

- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption

- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance

- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks

- powersave                   - Optimize for low power consumption

- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads

- virtual-guest               - Optimize for running inside a virtual guest

- virtual-host                - Optimize for running KVM guests

Current active profile: throughput-performance

通过tuned-adm list命令来查看目前tuned支持的工作模式。从上面的命令可以看到当前的工作模式是throughput-performance,吞吐量优先的性能模式,这个模式时liunx 7的默认模式。其他模式包括:
lBalanced:平衡模式,不做特殊的调整;它提供平衡的节能和性能。当前的LINUX内核中,启用了 CPU 和磁盘插件,并确保按需调节器处于活动状态(如果当前的 cpufreq 驱动程序支持)。该模式下, SATA适配器启用 ALPM 省电,并将链接电源管理策略设置为 medium_power。 CPU 的能源性能偏好设置为正常;
lDesktop:桌面模式;基于平衡配置文件为桌面优化的配置文件。启用调度程序自动分组,以便更好地响应交互式应用程序;
lLatency-performance:延时优先的性能模式,以增加功耗为代价提升性能;用于低延迟性能调整的配置文件。禁用节能机制。CPU 调控器设置为性能并锁定到低 C 状态(通过 PM QoS)。CPU 能源性能偏好设置为性能;
lNetwork-latency:以网络延时优先的性能模式,以增加功耗为代价提升网络的性能;用于低延迟网络调整的配置文件。基于延迟性能配置文件。同时禁用透明大页、NUMA 平衡,并调整其他几个与网络相关的 sysctl 参数;
lNetwork-throughput: 以网络吞吐量优先的优化模式,通常仅在较旧的CPU或40G+网络上使用;基于吞吐量性能配置文件,同时还增加了内核网络缓冲区;
lPowersave:节模式;最大节能,此时启用 USB 自动挂起(如果环境变量 USB_AUTOSUSPEND 设置为 1),启用 SATA 主机适配器的 ALPM 节能并将链接电源管理策略设置为 min_power。本模式下还支持 WiFi 节能,为低唤醒系统启用多核节能调度程序,并确保按需调节器处于活动状态(如果当前 cpufreq 驱动程序支持)。将 CPU的 能源性能偏好设置为 powersave;
lthroughput-performance:广泛适用的CPU优化模式,可跨各种常见服务器工作负载提供优异的性能;禁用节能机制并启用提高磁盘和网络 IO 吞吐量性能的 sysctl 设置。CPU 调控器设置为性能,CPU 能量性能偏好设置为性能。磁盘预读值增加;
lvirtual-guest:虚拟机的优化模式;基于吞吐量性能配置文件为虚拟访客(客户机)优化的配置文件。减少了虚拟内存交换并增加了dirty_ratio 设置。
lvirtual-host:KVM虚拟机的优化模式;基于吞吐量性能配置文件为虚拟主机优化的配置文件。配置中对脏页进行更积极的回写。
通过tuned-adm可以进行设置为其他的模式。

root@node123:/root||-->>tuned-adm profile balanced

root@node123:/root||-->>tuned-adm active

Current active profile: balanced

root@node123:/root||-->>tuned-adm list

Available profiles:

- balanced                    - General non-specialized tuned profile

- desktop                     - Optimize for the desktop use-case

- latency-performance         - Optimize for deterministic performance at the cost of increased power consumption

- network-latency             - Optimize for deterministic performance at the cost of increased power consumption, focused on low latency network performance

- network-throughput          - Optimize for streaming network throughput, generally only necessary on older CPUs or 40G+ networks

- powersave                   - Optimize for low power consumption

- throughput-performance      - Broadly applicable tuning that provides excellent performance across a variety of common server workloads

- virtual-guest               - Optimize for running inside a virtual guest

- virtual-host                - Optimize for running KVM guests

Current active profile: balanced

在balanced模式下,benchmark数据如下:

把模式设置为powersave,再来看看:

Benchmark数据降低到57万左右了。为什么会这样呢?我们看一下cpuinfo的信息,这个e8 6150的cpu的主频是2.7GHZ,此时的运行情况是,CPU0为2.7GHZ,CPU1为2.6GHZ。

而在性能模式时,每个核的主频都是2.7GHZ:

实际上tuned定义了一系列的调优参数,行程配置文件-profile,通过一条命令就可以把LINUX操作系统中的一系列十分复杂的CPU方面的优化操作完成了。我们在调整CPU的优化策略的时候,可以利用/usr/lib/tuned下的PROFILE作为基础,通过更为精细的参数控制来达到最佳的效果。

我们来看看刚才使用过的throughput-performance文件都调整了什么:

[main]

summary=Broadly applicable tuning that provides excellent performance across a variety of common server workloads

[cpu]

governor=performance

energy_perf_bias=performance

min_perf_pct=100

[disk]

readahead=>4096

[vm]

transparent_hugepages=never

[sysctl]

# ktune sysctl settings for rhel6 servers, maximizing i/o throughput

#

# Minimal preemption granularity for CPU-bound tasks:

# (default: 1 msec#  (1 + ilog(ncpus)), units: nanoseconds)

kernel.sched_min_granularity_ns = 10000000

# SCHED_OTHER wake-up granularity.

# (default: 1 msec#  (1 + ilog(ncpus)), units: nanoseconds)

#

# This option delays the preemption effects of decoupled workloads

# and reduces their over-scheduling. Synchronous workloads will still

# have immediate wakeup/sleep latencies.

kernel.sched_wakeup_granularity_ns = 15000000

# If a workload mostly uses anonymous memory and it hits this limit, the entire

# working set is buffered for I/O, and any more write buffering would require

# swapping, so it's time to throttle writes until I/O can catch up.  Workloads

# that mostly use file mappings may be able to use even higher values.

#

# The generator of dirty data starts writeback at this percentage (system default

# is 20%)

vm.dirty_ratio = 40

# Start background writeback (via writeback threads) at this percentage (system

# default is 10%)

vm.dirty_background_ratio = 10

# PID allocation wrap value.  When the kernel's next PID value

# reaches this value, it wraps back to a minimum PID value.

# PIDs of value pid_max or larger are not allocated.

#

# A suggested value for pid_max is 1024 * <# of="" cpu="" threads="" in="" system="">

# e.g., a box with 32 cpus, the default of 32768 is reasonable, for 64 cpus,

# 65536, for 4096 cpus, 4194304 (which is the upper limit possible).

#kernel.pid_max = 65536

# The swappiness parameter controls the tendency of the kernel to move

# processes out of physical memory and onto the swap disk.

# 0 tells the kernel to avoid swapping processes out of physical memory

# for as long as possible

# 100 tells the kernel to aggressively swap processes out of physical memory

# and move them to swap cache

vm.swappiness=10



推荐阅读
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了P1651题目的描述和要求,以及计算能搭建的塔的最大高度的方法。通过动态规划和状压技术,将问题转化为求解差值的问题,并定义了相应的状态。最终得出了计算最大高度的解法。 ... [详细]
  • 3.223.28周学习总结中的贪心作业收获及困惑
    本文是对3.223.28周学习总结中的贪心作业进行总结,作者在解题过程中参考了他人的代码,但前提是要先理解题目并有解题思路。作者分享了自己在贪心作业中的收获,同时提到了一道让他困惑的题目,即input details部分引发的疑惑。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • CEPH LIO iSCSI Gateway及其使用参考文档
    本文介绍了CEPH LIO iSCSI Gateway以及使用该网关的参考文档,包括Ceph Block Device、CEPH ISCSI GATEWAY、USING AN ISCSI GATEWAY等。同时提供了多个参考链接,详细介绍了CEPH LIO iSCSI Gateway的配置和使用方法。 ... [详细]
  • 嵌入式处理器的架构与内核发展历程
    本文主要介绍了嵌入式处理器的架构与内核发展历程,包括不同架构的指令集的变化,以及内核的流水线和结构。通过对ARM架构的分析,可以更好地理解嵌入式处理器的架构与内核的关系。 ... [详细]
  • 本文详细介绍了cisco路由器IOS损坏时的恢复方法,包括进入ROMMON模式、设置IP地址、子网掩码、默认网关以及使用TFTP服务器传输IOS文件的步骤。 ... [详细]
  • 技嘉秀高端B450主板:不再支持第七代APU,性价比高且兼容锐龙一代和二代
    在台北电脑展上,技嘉展示了一款高端的B450主板,型号为“b450 aorus pro wi-fi”。该主板具有10+1相供电、散热片覆盖的供电区域和芯片组,以及两个m.2插槽和背部IO挡板。虽然不支持第七代APU bristol ridge,但它兼容锐龙一代和二代,且具有较高的性价比。该主板还配备了音频声卡、Wi-Fi无线网卡等功能,是一款性能出色且设计精良的主板。 ... [详细]
  • 本文详细介绍了在Centos7上部署安装zabbix5.0的步骤和注意事项,包括准备工作、获取所需的yum源、关闭防火墙和SELINUX等。提供了一步一步的操作指南,帮助读者顺利完成安装过程。 ... [详细]
author-avatar
胜利者416
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有