pve 获取cpu频率
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},
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%',
},
},
},
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
2023-11-01 15:32:05
jiang\n楼主
肯定会有很多细心的同学发现,负载不高的时候,这CPU频率怎么也一直最高频率,
接下来我们就来处理这个问题
首先我来安装一下CPU驱动
再这基础上我们也可以手动修改CPU的运行模式,如上图pve默认为ondemand模式,
我们可选的模式有conservative, ondemand, userspace, powersave, performance, schedutil
文件位置/etc/init.d/cpufrequtils
也可以控制台进行修改
接下来我们就来处理这个问题
首先我来安装一下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