逼自己用Linux日记(day4)

大老赖不赖 76 2022-08-17

因为整个蜥蜴基本都成型了,开始用上了,除了那个依赖问题我单独写了一篇文章之外,昨天也没做别的。今天任务:调优吧

升级到fcitx5

fcitx -version
# fcitx version: 4.2.9.7

这里我用Yast,比较方便,勾选fcitx5之后可以去掉一些不用的包,比如这个
Screenshot_20220818_093027
如果不需要迁移,可以不勾选fcitx5-lua-migration-reminder
Screenshot_20220818_101813
备份一下配置Screenshot_20220823_111139

CPU

去哪修改

所有对硬件的设置均可在/sys/devices/内修改
以CPU0示例

~ sys/devices/system/cpu/cpu0/cpufreq> tree
.
├── affected_cpus 
├── bios_limit
├── cpb
├── cpuinfo_cur_freq
├── cpuinfo_max_freq
├── cpuinfo_min_freq
├── cpuinfo_transition_latency
├── freqdomain_cpus
├── related_cpus
├── scaling_available_frequencies
├── scaling_available_governors
├── scaling_cur_freq
├── scaling_driver
├── scaling_governor
├── scaling_max_freq
├── scaling_min_freq
└── scaling_setspeed

这个目录其实就是/sys/devices/system/cpu/cpufreq/policy0,只是这个看起来方便而已

我这边天气太热,风扇呼呼呼没停过,然后我就打算限制一下CPU的频率,我就可以修改cpuinfo_max_freqscaling_governor

修改scaling_governor 得去scaling_available_governors内查看可以使用的CPU频率模式
CPU频率模式下文讲到

限制boost

这个是要到另一个文件夹了,只是万变不离其宗

# echo 0 > /sys/devices/system/cpu/cpufreq/boost

CPU频率的模式

  1. performance
    顾名思义只注重效率,将CPU频率固定工作在其支持的最高运行频率上,而不动态调节。
  2. powersave
    将CPU频率设置为最低的所谓“省电”模式,CPU会固定工作在其支持的最低运行频率上。因此这两种governors 都属于静态governor,即在使用它们时CPU 的运行频率不会根据系统运行时负载的变化动态作出调整。这两种governors 对应的是两种极端的应用场景,使用performance governor 是对系统高性能的最大追求,而使用powersave governor 则是对系统低功耗的最大追求。
  3. Userspace
    最早的cpufreq 子系统通过userspace governor为用户提供了这种灵活性。系统将变频策略的决策权交给了用户态应用程序,并提供了相应的接口供用户态应用程序调节CPU 运行频率使用。也就是长期以来都在用的那个模式。可以通过手动编辑配置文件进行配置
  4. 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 将被选作降频的目标频率。
  5. conservative
    与ondemand不同,平滑地调整CPU频率,频率的升降是渐变式的,会自动在频率上下限调整,和ondemand的区别 在于它会按需分配频率,而不是一味追求最高频率。
    https://blog.csdn.net/m0_37167788/article/details/88827022

通过cpupower修改

一个个改太麻烦,那就批量吧

# cpupower -c all frequency-set -g [Generic_Scaling_Governors]

image-1661225151016

开机自动更改

在这里我使用一个简单的gui工具:kcron
image-1661394417942
添加到任务
image-1661394457036
查看corn的服务是否开机自启

# 开机启动corn的服务
sudo systemctl enable cron
# 查看状态
systemctl status cron

image-1661394728787

GPU

NVIDIA-SMI

这个是NVIDIA的系统管理接口
以下是一些看起来比较重要的选项。

-pm,  --persistence-mode=   设置持久性模式:0禁用,1启用
    -e,   --ecc-config=         切换ECC支持:0禁用,1启用
    -p,   --reset-ecc-errors=   重置ECC错误计数:0易失性,1聚合
    -c,   --compute-mode=       为计算应用程序设置模式:
                                0默认情况下,1EXCLUSIVE_THREAD(已弃用),
                                2禁止,3独占_
          --gom=                设置GPU操作模式:
                                    0/ALL_ON, 1/COMPUTE, 2/LOW_DP
    -r    --gpu-reset           触发GPU的复位。
                                可用于在需要机器重新启动的情况下重置GPU硬件状态。
                                通常在发生双位ECC错误时有用。
                                复位操作并非保证在所有情况下都有效,应谨慎使用。
    -vm   --virt-mode=          切换到GPU虚拟化模式:
                                将GPU虚拟化模式设置为3VGPU或4VSGA
                                GPU的虚拟化模式只能在其在虚拟机监控程序上运行时设置。
    -lgc  --lock-gpu-clocks=    将<minGpuClock,maxGpuClock>时钟指定为一对(例如1500,1500),以MHz为单位定义所需的锁定GPU时钟速度范围。
                                    设置此选项将取代应用程序时钟,无论应用程序是否正在运行,都将生效。
                                    输入也可以是单一的期望时钟值(例如,<GpuClockValue>)。
    -rgc  --reset-gpu-clocks
                                将Gpu时钟重置为默认值。
    -lmc  --lock-memory-clocks=  将<minMemClock,maxMemClock>时钟指定为一对(例如5100,5100),以MHz为单位定义所需锁定内存时钟速度的范围。
                                    输入也可以是单一的期望时钟值(例如<MemClockValue>)。
    -rmc  --reset-memory-clocks
                                将内存时钟重置为默认值。
    -ac   --applications-clocks= 将<memory,graphics>时钟指定为一对(例如2000,800),定义在GPU上运行应用程序时GPU的速度(以MHz为单位)。
    -rac  --reset-applications-clocks
                                将应用程序时钟重置为默认值。
    -pl   --power-limit=
                                以瓦特为单位指定最大功率管理限制。
    -cc   --cuda-clocks=        覆盖或恢复默认CUDA时钟。
                                在覆盖模式下,GPU在运行CUDA应用程序时时钟频率更高。
                                仅适用于从Volta系列开始的受支持设备。
                                需要管理员权限。
                                0/RESTORE_DEFAULT, 1/OVERRIDE
    -am   --accounting-mode=    启用或禁用记帐模式:0禁用,1启用
    -caa  --clear-accounted-apps
                                清除缓冲区中所有已记帐的PID。
          --auto-boost-default=
                                将默认的自动增强策略设置为0禁用或1启用,仅在最后一个增强客户端退出后强制更改。
          --auto-boost-permission=
                                允许非管理员root控制自动升压模式:0不受限制,1受限制
    -mig  --multi-instance-gpu= 启用或禁用多实例GPU:0禁用,1启用
                                它需要root。
    -gtt  --gpu-target-temp=    设置GPU的GPU目标温度(摄氏度)。
                                需要管理员权限

nvidia-smi(一级菜单-机翻)

参考
CPU Performance Scaling
cpufreq 五种模式
cpupower命令 – 调整CPU主频参数
sys接口:/sys/devices/system/cpu/目录下所有节点怎么创建的