【问题标题】:Dynamic voltage and frequency scaling API动态电压和频率缩放 API
【发布时间】:2012-01-24 13:55:51
【问题描述】:

Linux 上是否存在 API(C 语言)以允许进程动态更改其运行的内核的电压或频率?

【问题讨论】:

    标签: c linux api cpu


    【解决方案1】:

    可能有这样的库,但即使没有,您也可以随时打开 /sys/devices/system/cpu 下配置 CPU 行为的文件。
    查看 /sys/devices/system/cpu/cpuX/cpufreq 下的文件。

    【讨论】:

    • 在我的个人计算机上,目录 /sys/devices/system/cpu/cpu0 不包含 cpufreq 文件或目录。只有一些与拓扑和缓存相关的东西。我的意图是在超级计算机上使用动态电压/频率自适应,修改此类文件不是一种选择,因为我没有管理员访问权限。我猜只有 C API 可以解决问题...
    • 好的,我明白了。这可能取决于具体的安装。
    • @sunmat 作为非 root 用户,无论是否使用 C API,您都无法执行此类操作。
    • @glglgl 那么我该如何在 C 中以编程方式进行呢?
    【解决方案2】:

    您可以通过以下方式更改频率电压对: /sys/devices/system/cpu/cpu%d/cpufreq/scaling_setspeed 文件。每个硬件线程都有一个文件。但是,您只能更改整个芯片(所有内核)的频率。您可以从以下位置找到可用频率: /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies

    如果您没有此文件夹,请检查您的处理器是否有可用的增强型 Intel SpeedStep® 技术。如果有,请转到 BIOS 并启用它,您将看到该文件夹​​。 还有一件事,您可能需要启用/安装 cpufreq 模块。

    希望它对某人有所帮助,因为原来的位置很旧。

    【讨论】:

      【解决方案3】:

      CPU 动态电压-频率缩放示例:

      # See availables operation performance points
      cat /sys/class/devices/system/cpu/cpu0/scaling_available_frequencies
      384000 460800 600000 672000 768000 864000 960000 1248000 1344000 1478400 1555200
      
      # See current core frequency
      cat /sys/devices/system/cpu/cpu0/scaling_cur_freq
      384000
      
      # See current core voltage
      cat /sys/class/regulator/regulator.3/microvolts
      785000
      
      # Change CPU speed to 1248000 MHz
      echo 1248000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
      echo 1248000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
      
      cat /sys/devices/system/cpu/cpu0/scaling_cur_freq
      1248000
      
      cat /sys/class/regulator/regulator.3/microvolts
      980000
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-27
        • 2014-12-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多