选择皮肤
jiang
2023-11-01 15:19:52
jiang\n楼主

Linux 获取CPU频率

cat /proc/cpuinfo | grep -i  "cpu mhz"
jiang
2023-11-01 15:27:00
jiang\n楼主

PVE6.4

先备份之后要修改的两个文件
cp /usr/share/perl5/PVE/API2/Nodes.pm /usr/share/perl5/PVE/API2/Nodes.pm.bak
cp /usr/share/pve-manager/js/pvemanagerlib.js /usr/share/pve-manager/js/pvemanagerlib.js.bak
修改文件内容 vi /usr/share/perl5/PVE/API2/Nodes.pm ,添加 $res->{cpure} = 'cat /proc/cpuinfo | grep -i "cpu mhz"'; (注意,cat /proc/cpuinfo | grep -i "cpu mhz" 左右两个不是分号,而是在英文状态下字母区上方的数字键区域最左侧按键打出来的反引号)

        };
 
        $res->{ksm} = {
            shared => $meminfo->{memshared},
        };
 
        $res->{swap} = {
            free => $meminfo->{swapfree},
            total => $meminfo->{swaptotal},
            used => $meminfo->{swapused},
        };
 
        $res->{pveversion} = PVE::pvecfg::package() . "/" .
            PVE::pvecfg::version_text();
 
        $res->{thermalstate} = 'sensors';
        $res->{cpure} = 'cat /proc/cpuinfo | grep -i  "cpu mhz"';
 
        my $dinfo = df('/', 1);     # output is bytes
 
        $res->{rootfs} = {
            total => $dinfo->{blocks},
            avail => $dinfo->{bavail},

jiang
2023-11-01 15:28:48
jiang\n楼主
之后修改页面布局,增加界面高度让新的CPU内容有地方显示,编辑 ' vi /usr/share/pve-manager/js/pvemanagerlib.js ',修改以下两处地方:

        showLog: function(button, event, rec) {
            var me = this.getView();
            var controller = this;
            var logView = Ext.create('Proxmox.panel.LogView', {
                border: false,
                url: "/api2/extjs/nodes/" + me.nodename + "/replication/" + rec.data.id + "/log",
            });
            var win = Ext.create('Ext.window.Window', {
                items: [logView],
                layout: 'fit',
                width: 800,
                height: 440, 400改440 添加了温度的改460
                modal: true,
                title: gettext("Replication Log"),
            });
            var task = {
                run: function() {
                    logView.requestUpdate();
                },
                interval: 1000,
            };
            Ext.TaskManager.start(task);

第二处修改

        me.callParent();
 
        Proxmox.Utils.monStoreErrors(me, me.getStore(), true);
        me.reload();
    },
});
 
Ext.define('PVE.node.StatusView', {
    extend: 'Proxmox.panel.StatusView',
    alias: 'widget.pveNodeStatus',
 
    height: 340, 300改340 添加了温度改360
    bodyPadding: '20 15 20 15',
 
    layout: {
        type: 'table',
        columns: 2,
        tableAttrs: {
            style: {
                width: '100%',
            },
        },
    },

jiang
2023-11-01 15:30:28
jiang\n楼主
最后增加显示CPU频率的代码
            itemId: 'kversion',
            colspan: 2,
            title: gettext('Kernel Version'),
            printBar: false,
            textField: 'kversion',
            value: '',
        },
        {
            itemId: 'version',
            colspan: 2,
            printBar: false,
            title: gettext('PVE Manager Version'),
            textField: 'pveversion',
            value: '',
        },
        {
                itemId: 'thermal',
                colspan: 2,
                printBar: false,
                title: gettext('CPU温度'),
                textField: 'thermalstate',
                renderer:function(value){
                        const c0 = value.match(/Core 0.*?\+([\d\.]+)?/)[1];
                        const c1 = value.match(/Core 1.*?\+([\d\.]+)?/)[1];
                        const c2 = value.match(/Core 2.*?\+([\d\.]+)?/)[1];
                        const c3 = value.match(/Core 3.*?\+([\d\.]+)?/)[1];
                        return Core: ${c0} | ${c1} | ${c2} | ${c3}
                }
        },
        {
                  itemId: 'cpumhz',
                  colspan: 2,
                  printBar: false,
                  title: gettext('CPU频率'),
                  textField: 'cpure',
                  renderer:function(value){
                        const m = value.match(/(?<=:\s+)(\d+)/g);
                        return `CPUMHZ: ${m[0]} | ${m[1]} | ${m[2]} | ${m[3]}`;
                 }
        }
    ],
 
    updateTitle: function() {
        var me = this;
        var uptime = Proxmox.Utils.render_uptime(me.getRecordValue('uptime'));
        me.setTitle(me.pveSelNode.data.node + ' (' + gettext('Uptime') + ': ' + uptime + ')');

        {
                  itemId: 'cpumhz',
                  colspan: 2,
                  printBar: false,
                  title: gettext('CPU频率'),
                  textField: 'cpure',
                  renderer:function(value){
                        const m = value.match(/(?<=:\s+)(\d+)/g);
                        return `CPUMHZ: ${m[0]} | ${m[1]} | ${m[2]} | ${m[3]}`;
                 }
        }
修改完成后,重启PVE的Web管理器

systemctl restart pveproxy

之后强制刷新页面即可显示,win下Ctrl + F5 ,Mac下 花键 + shift + R

jiang
2023-11-01 15:32:05
jiang\n楼主
肯定会有很多细心的同学发现,负载不高的时候,这CPU频率怎么也一直最高频率,
接下来我们就来处理这个问题
首先我来安装一下CPU驱动
apt-get install cpufrequtils  #安装CPU驱动

查询cpu状态
cpufreq-info

一般到这一步就能看到cpu频率会根据负载再不断调整变化
再这基础上我们也可以手动修改CPU的运行模式,如上图pve默认为ondemand模式,
我们可选的模式有conservative, ondemand, userspace, powersave, performance, schedutil
conservative:保守模式,类似于ondemand,但调整相对较缓,想省电就用他吧。Google官方内核,kang内核默认模式。
ondemand:系统默认的超频模式,按需调节,内核提供的功能,一般官方内核默认的方式都是ondemand。
userspace:用户自定义模式,系统将变频策略的决策权交给了用户态应用程序。
powersave 省电模式,通常以最低频率运行。
performance:性能模式,只有最高频率,从来不考虑消耗的电量。
schedutil:一个新的交互模式,听说很牛,简单理解为interactive的升级版。

修改配置文件
文件位置/etc/init.d/cpufrequtils
也可以控制台进行修改
nano /etc/init.d/cpufrequtils
#
ENABLE="true"   
GOVERNOR="conservative"  #运行模式,依照需求调整
MAX_SPEED="0"         #自定义模式下设置cpu频率上限   ,非自定义模式不要填写,否则导致频率锁死最低频率
MIN_SPEED="0"         #下限
#

重启服务
systemctl daemon-reload
/etc/init.d/cpufrequtils restart