diff --git a/drawing/ReadWrite.lua b/drawing/ReadWrite.lua index 2bbda09..7814096 100644 --- a/drawing/ReadWrite.lua +++ b/drawing/ReadWrite.lua @@ -1,12 +1,20 @@ -local Util = require 'Util' -local Common = require 'Common' +local Util = require 'Util' +local Common = require 'Common' local Geometry = require 'Geometry' return function(update_freq) local PLOT_SEC_BREAK = 20 local PLOT_HEIGHT = 56 + local DEVICES = {'sda', 'nvme0n1'} - local __tonumber = tonumber + -- the sector size of any block device in linux is 512 bytes + -- see https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/include/linux/types.h?id=v4.4-rc6#n121 + local BLOCK_SIZE_BYTES = 512 + + -- fields 3 and 7 (sectors read and written) + local RW_REGEX = '%s+%d+%s+%d+%s+(%d+)%s+%d+%s+%d+%s+%d+%s+(%d+)' + + local __tonumber = tonumber local __string_match = string.match local __math_floor = math.floor @@ -61,21 +69,25 @@ return function(update_freq) ----------------------------------------------------------------------------- -- update function - -- TODO add more devices to this - local BLOCK_SIZE_BYTES = 512 - local STAT_FILE = '/sys/block/sda/stat' + local DEVICE_PATHS = {} + for i = 1, #DEVICES do + DEVICE_PATHS[i] = string.format('/sys/block/%s/stat', DEVICES[i]) + end - -- fields 3 and 7 (sectors read and written) - local RW_REGEX = '%s+%d+%s+%d+%s+(%d+)%s+%d+%s+%d+%s+%d+%s+(%d+)' - - local read_stat_file = function() - local bytes_r, bytes_w = __string_match(Util.read_file(STAT_FILE), RW_REGEX) - return __tonumber(bytes_r) * BLOCK_SIZE_BYTES, __tonumber(bytes_w) * BLOCK_SIZE_BYTES + local read_devices = function() + local read_bytes = 0 + local write_bytes = 0 + for _, path in pairs(DEVICE_PATHS) do + local r, w = __string_match(Util.read_file(path), RW_REGEX) + read_bytes = read_bytes + __tonumber(r) + write_bytes = write_bytes + __tonumber(w) + end + return read_bytes * BLOCK_SIZE_BYTES, write_bytes * BLOCK_SIZE_BYTES end reads.byte_cnt = 0 writes.byte_cnt = 0 - reads.prev_byte_cnt, writes.prev_byte_cnt = read_stat_file() + reads.prev_byte_cnt, writes.prev_byte_cnt = read_devices() local update_stat = function(cr, stat, byte_cnt) local delta_bytes = byte_cnt - stat.prev_byte_cnt @@ -90,7 +102,7 @@ return function(update_freq) end local update = function(cr) - local read_byte_cnt, write_byte_cnt = read_stat_file() + local read_byte_cnt, write_byte_cnt = read_devices() update_stat(cr, reads, read_byte_cnt) update_stat(cr, writes, write_byte_cnt) end