• linux cpu 运行模式


    linux cpu 运行模式

          CPU动态节能技术用于降低服务器功耗,通过选择系统空闲状态不同的电源管理策略,可以实现不同程度降低服务器功耗,更低的功耗策略意味着CPU唤醒更慢对性能 影响更大。

    对于对时延和性能要求高的应用,建议关闭CPU的动态调节功能,禁止 CPU休眠,并把CPU频率固定到最高。

    通常建议在服务器BIOS中修改电源管理为Performance,如果发现CPU模式为conservative或者powersave,可以使用cpupower设置CPU Performance模式,效果也是相当显著的。

    几种模式如下:

    • performance: 顾名思义只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
    • userspace:最早的cpufreq子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
    • powersave: 将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种governors 都属于静态governor,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。
    • ondemand: 按需快速动态调整CPU频率, 一有cpu计算量的任务,就会立即达到最大频率运行,等执行完毕就立即回到最低频率;ondemand:userspace是内核态的检测,用户态调整,效率低。而ondemand正是人们长期以来希望看到的一个完全在内核态下工作并且能够以更加细粒度的时间间隔对系统负载情况进行采样分析的governor。 在 ondemand governor 监测到系统负载超过 up_threshold 所设定的百分比时,说明用户当前需要 CPU 提供更强大的处理能力,因此 ondemand governor 会将CPU设置在最高频率上运行。但是当 ondemand governor 监测到系统负载下降,可以降低 CPU 的运行频率时,到底应该降低到哪个频率呢? ondemand governor 的最初实现是在可选的频率范围内调低至下一个可用频率,例如 CPU 支持三个可选频率,分别为 1.67GHz、1.33GHz 和 1GHz ,如果 CPU 运行在 1.67GHz 时 ondemand governor 发现可以降低运行频率,那么 1.33GHz 将被选作降频的目标频率。
    • conservative: 与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整,和ondemand的区别在于它会按需分配频率,而不是一味追求最高频率;

    查看当前的模式

    cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor

    查看所有逻辑CPU

    watch -n -1 "cat /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor" 

    查看所有逻辑CPU当前运行的频率

    watch -n -1 "cat /sys/devices/system/cpu/cpu*/cpufreq/cpuinfo_cur_freq"

    查看频率信息

    cpupower frequency-info
    

    调整频率 

    cpupower frequency-set -g performance

    cpupower

    RHEL/CentOS 7的systemd提供了cpupower.service配置

    cat /lib/systemd/system/cpupower.service
    [Unit]
    Description=Configure CPU power related settings
    After=syslog.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    EnvironmentFile=/etc/sysconfig/cpupower
    ExecStart=/usr/bin/cpupower $CPUPOWER_START_OPTS
    ExecStop=/usr/bin/cpupower $CPUPOWER_STOP_OPTS
    
    [Install]
    WantedBy=multi-user.target

    配置/etc/sysconfig/cpupower

    cat /etc/sysconfig/cpupower
    # See 'cpupower help' and cpupower(1) for more info
    CPUPOWER_START_OPTS="frequency-set -g performance"
    CPUPOWER_STOP_OPTS="frequency-set -g ondemand"
    

    参考文章

    https://huataihuang.gitbooks.io/cloud-atlas/os/linux/redhat/system_administration/systemd/cpupower.html

    https://zhuanlan.zhihu.com/p/33753019

    https://wiki.archlinux.org/index.php/CPU_frequency_scaling_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

    https://segmentfault.com/a/1190000017942936

    https://www.houzhibo.com/archives/864

  • 相关阅读:
    c++/c语言中如何调用DLL
    fortran出现stack overflow的原因及解决办法
    iOS: ARC和非ARC下使用Block属性的问题
    Objective-C Autorelease Pool 的实现原理
    class-dump 复制到/usr/bin目录不可写,Operation not permitted 解决办法
    Auto Layout 使用心得
    iOS-关于微信支付
    IOS应用安全(五):高级Runtime分析和操作
    Objective-C Runtime 运行时之六:拾遗
    Objective-C Runtime 运行时之五:协议与分类
  • 原文地址:https://www.cnblogs.com/shhnwangjian/p/13321730.html
Copyright © 2020-2023  润新知