为什么 sudo emacs 无法修改 /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed ?

为什么 sudo emacs 无法修改 /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed ?

我想编辑/sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed将其内容从 800000 更改为 1600000。

  1. 我首先尝试使用 emacs

    $ sudo emacs -nw /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
    

    在 emacs 中,我已将文件中的值更改为 1600000,当我保存更改时,消息缓冲区显示:

    Saving file /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed...
    Wrote /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
    

    但是当我退出emacs并再次读取文件后,该值仍然是800000

  2. 然后我尝试另一种方式

    $ sudo less /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed
    

    其中我点击v调用默认编辑器,即 nano,然后更改该值。我退出nano和less后,再次检查文件,文件已经更改成功。

我想知道为什么第一种方法不起作用而第二种方法有效?

我在 Thinkpad T400 上运行 Ubuntu 16.04。谢谢。

答案1

来自评论:

当 Emacs 保存文件时,它会重命名旧文件,使其成为备份文件,然后使用原始名称创建一个新文件。我不知道你的情况发生了什么,也不知道为什么 Emacs 没有抱怨,但 Emacs 显然是错误的工具。 ——约翰·迈雷恩

正确的工具应该是只覆盖原始文件(甚至只是附加到它)的任何工具,而不是尝试重命名旧文件。

请记住:下面没有任何内容/sys是真实的、持久的文件。它们都是内核参数和状态信息,以文件的形式呈现。您不应该能够移动、重命名或删除它们。

曾经有一些名为cpufreq-info和的命令cpufreq-set用于操作这些设置;在最近的版本中,命令现在(或很快)可能分别是cpupower frequency-infocpupower frequency-set

答案2

正如评论中提到的,设置 1600 MHz 速度的传统方法是:

echo 1600000 | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed

要验证其效果,请使用:

$ cd /sys/devices/system/cpu/cpu0/cpufreq/
$ paste <(ls *) <(cat *) | column -s $'\t' -t
affected_cpus                             0
cpuinfo_max_freq                          3500000
cpuinfo_min_freq                          800000
cpuinfo_transition_latency                4294967295
energy_performance_available_preferences  default performance balance_performance balance_power power 
energy_performance_preference             balance_performance
related_cpus                              0
scaling_available_governors               performance powersave
scaling_cur_freq                          807325
scaling_driver                            intel_pstate
scaling_governor                          powersave
scaling_max_freq                          3500000
scaling_min_freq                          800000
scaling_setspeed                          <unsupported>

在我的机器上scaling_setspeed无法设置,因为我有 i7-6700HQ。我的旧第 3 代 i7-3630QM 也是如此。

因此,在这些平台上,我会将scaling_min_freq和设置scaling_max_freq为同一水平,并且p_state永远不会波动。我可能会在所有 CPU 上应用相同的.../cpu0/...设置.../cpu7/...

相关内容