ENH get cpu loads faster
This commit is contained in:
parent
1fe6f2e170
commit
7befb37523
|
@ -6,6 +6,8 @@ local Table = require 'Table'
|
||||||
local Util = require 'Util'
|
local Util = require 'Util'
|
||||||
local Common = require 'Common'
|
local Common = require 'Common'
|
||||||
|
|
||||||
|
local __string_match = string.match
|
||||||
|
|
||||||
local CORETEMP_PATH = '/sys/devices/platform/coretemp.0/hwmon/hwmon%i/%s'
|
local CORETEMP_PATH = '/sys/devices/platform/coretemp.0/hwmon/hwmon%i/%s'
|
||||||
|
|
||||||
local NUM_PHYSICAL_CORES = 4
|
local NUM_PHYSICAL_CORES = 4
|
||||||
|
@ -40,12 +42,10 @@ local _TABLE_SECTION_BREAK_ = 20
|
||||||
local _TABLE_HEIGHT_ = 114
|
local _TABLE_HEIGHT_ = 114
|
||||||
|
|
||||||
local _create_core_ = function(cores, id, x, y)
|
local _create_core_ = function(cores, id, x, y)
|
||||||
local conky_loads = {}
|
|
||||||
local conky_freqs = {}
|
local conky_freqs = {}
|
||||||
|
|
||||||
for c = 0, NUM_PHYSICAL_CORES * NUM_THREADS_PER_CORE - 1 do
|
for c = 0, NUM_PHYSICAL_CORES * NUM_THREADS_PER_CORE - 1 do
|
||||||
if Util.read_file('/sys/devices/system/cpu/cpu'..c..'/topology/core_id', nil, '*n') == id then
|
if Util.read_file('/sys/devices/system/cpu/cpu'..c..'/topology/core_id', nil, '*n') == id then
|
||||||
table.insert(conky_loads, '${cpu cpu'..(c+1)..'}')
|
|
||||||
table.insert(conky_freqs, '${freq '..c..'}')
|
table.insert(conky_freqs, '${freq '..c..'}')
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -73,7 +73,6 @@ local _create_core_ = function(cores, id, x, y)
|
||||||
90
|
90
|
||||||
),
|
),
|
||||||
coretemp_path = string.format(CORETEMP_PATH, hwmon_index, 'temp'..(id + 2)..'_input'),
|
coretemp_path = string.format(CORETEMP_PATH, hwmon_index, 'temp'..(id + 2)..'_input'),
|
||||||
conky_loads = conky_loads,
|
|
||||||
conky_freqs = conky_freqs
|
conky_freqs = conky_freqs
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
@ -137,23 +136,51 @@ local tbl = Common.initTable(
|
||||||
{'Name', 'PID', 'CPU (%)'}
|
{'Name', 'PID', 'CPU (%)'}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
local cpu_loads = {}
|
||||||
|
local NCPU = NUM_THREADS_PER_CORE * NUM_PHYSICAL_CORES
|
||||||
|
for i = 1, NCPU do
|
||||||
|
cpu_loads[i] = {active_prev = 0, active_total = 0}
|
||||||
|
end
|
||||||
|
|
||||||
|
local _read_cpu = function()
|
||||||
|
local i = NCPU
|
||||||
|
local iter = io.lines('/proc/stat')
|
||||||
|
iter() -- ignore first line
|
||||||
|
for ln in iter do
|
||||||
|
if i == 0 then break end
|
||||||
|
local user, system, idle = __string_match(ln, '(%d+) %d+ (%d+) (%d+)', 5)
|
||||||
|
local c = cpu_loads[i]
|
||||||
|
c.active_prev = c.active
|
||||||
|
c.total_prev = c.total
|
||||||
|
c.active = user + system
|
||||||
|
c.total = user + system + idle
|
||||||
|
i = i - 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
_read_cpu() -- prime once
|
||||||
|
|
||||||
local update = function(cr)
|
local update = function(cr)
|
||||||
local conky = Util.conky
|
local conky = Util.conky
|
||||||
|
|
||||||
local load_sum = 0
|
local load_sum = 0
|
||||||
local freq_sum = 0
|
local freq_sum = 0
|
||||||
|
|
||||||
|
_read_cpu()
|
||||||
|
|
||||||
for c = 1, NUM_PHYSICAL_CORES do
|
for c = 1, NUM_PHYSICAL_CORES do
|
||||||
local core = cores[c]
|
local core = cores[c]
|
||||||
|
|
||||||
local conky_loads = core.conky_loads
|
|
||||||
local conky_freqs = core.conky_freqs
|
local conky_freqs = core.conky_freqs
|
||||||
|
|
||||||
for t = 1, NUM_THREADS_PER_CORE do
|
for t = 1, NUM_THREADS_PER_CORE do
|
||||||
local percent = Util.conky_numeric(conky_loads[t]) * 0.01
|
local cl = cpu_loads[(c - 1) * NUM_THREADS_PER_CORE + t]
|
||||||
|
if cl.total > cl.total_prev then
|
||||||
|
local percent = (cl.active - cl.active_prev) / (cl.total - cl.total_prev)
|
||||||
CompoundDial.set(core.dials, t, percent)
|
CompoundDial.set(core.dials, t, percent)
|
||||||
load_sum = load_sum + percent
|
load_sum = load_sum + percent
|
||||||
|
end
|
||||||
|
|
||||||
|
-- TODO get this from /proc/cpuinfo and it might be faster?
|
||||||
freq_sum = freq_sum + Util.conky_numeric(conky_freqs[t])
|
freq_sum = freq_sum + Util.conky_numeric(conky_freqs[t])
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue