diff --git a/CHANGELOG.md b/CHANGELOG.md index 5a80678..9fa2a0c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -77,6 +77,7 @@ For major (breaking) changes - **version 4, 3 and 2** - see end of page. | Version | Date | Comment | | -------------- | -------------- | -------- | +| 5.8.0 | 2021-08-02 | `disksIO()` added waitTime, waitPercent (linux) | | 5.7.14 | 2021-08-01 | `cpu()` cache calculation fix (linux) | | 5.7.13 | 2021-07-28 | `osInfo()` fix uefi detection (win) | | 5.7.12 | 2021-07-27 | `osInfo()` fix uefi detection (win) | diff --git a/README.md b/README.md index a287f2d..0cf3418 100644 --- a/README.md +++ b/README.md @@ -103,6 +103,7 @@ si.cpu() (last 7 major and minor version releases) +- Version 5.8.0: `disksIO()` added waitTime, waitPercent (linux) - Version 5.7.0: `diskLayout()` added S.M.A.R.T for Windows (if installed) - Version 5.6.0: `cpuTemperature()` added added socket and chipset temp (linux) - Version 5.5.0: `dockerVolumes()` added @@ -446,6 +447,12 @@ Full function reference with examples can be found at [https://systeminformation | | rIO_sec | X | | X | | | read IO per sec (* see notes) | | | wIO_sec | X | | X | | | write IO per sec (* see notes) | | | tIO_sec | X | | X | | | total IO per sec (* see notes) | +| | rWaitTime | X | | | | | read IO request time (* see notes) | +| | wWaitTime | X | | | | | write IO request time (* see notes) | +| | tWaitTime | X | | | | | total IO request time (* see notes) | +| | rWaitPercent | X | | | | | read IO request time percent (* see notes) | +| | wWaitPercent | X | | | | | write IO request time percent (* see notes) | +| | tWaitPercent | X | | | | | total IO request time percent (* see notes) | | | ms | X | | X | | | interval length (for per second values) | | si.fsSize(cb) | [{...}] | X | X | X | X | | returns array of mounted file systems | | | [0].fs | X | X | X | X | | name of file system | diff --git a/docs/changes.html b/docs/changes.html index 71200a0..2994ad8 100644 --- a/docs/changes.html +++ b/docs/changes.html @@ -174,6 +174,7 @@
  • cpu(): added virtualization if cpu supports virtualization
  • cpu(): now flags are part of this function
  • cpuTemperature(): added socket and chipset temperature (linux)
  • +
  • disksIO(): added waitTime, waitPercent (linux)
  • fsSize(): added available
  • fsSize(): improved calculation of used
  • getData(): support for passing parameters and filters (see section General / getData)
  • diff --git a/docs/cpu.html b/docs/cpu.html index dfbc345..c3bdfb2 100644 --- a/docs/cpu.html +++ b/docs/cpu.html @@ -294,7 +294,7 @@ X X - L1D (data) size bytes + L1D (data) size in bytes @@ -304,7 +304,7 @@ X X - L1I (instruction) size bytes + L1I (instruction) size in bytes @@ -314,7 +314,7 @@ X X - L2 size bytes + L2 size in bytes @@ -324,7 +324,7 @@ X X - L3 size bytes + L3 size in bytes @@ -393,7 +393,7 @@ fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge X X - L1D size + L1D size in bytes @@ -403,7 +403,7 @@ fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge X X - L1I size + L1I size in bytes @@ -413,7 +413,7 @@ fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge X X - L2 size + L2 size in bytes @@ -423,7 +423,7 @@ fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge X X - L3 size + L3 size in bytes @@ -432,7 +432,7 @@ fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge
    const si = require('systeminformation');
     si.cpuCache().then(data => console.log(data));
    -{ l1d: 262144, l1i: 262144, l2: 2, l3: 16 }
    +{ l1d: 262144, l1i: 262144, l2: 2097152, l3: 16777216 }
     
    diff --git a/docs/filesystem.html b/docs/filesystem.html index be7ff5f..c455284 100644 --- a/docs/filesystem.html +++ b/docs/filesystem.html @@ -523,6 +523,66 @@ si.blockDevices().then(data => console.log(data)); total IO per sec (* see notes) + + + rWaitTime + X + + + + + read IO request time + + + + wWaitTime + X + + + + + write IO request time + + + + tWaitTime + X + + + + + total IO request time + + + + rWaitPercent + X + + + + + read IO request time percent + + + + wWaitPercent + X + + + + + write IO request time percent + + + + tWaitPercent + X + + + + + total IO request time percent + ms diff --git a/docs/history.html b/docs/history.html index ea86569..89e715e 100644 --- a/docs/history.html +++ b/docs/history.html @@ -56,6 +56,11 @@ + + 5.8.0 + 2021-08-02 + disksIO() added wait time (linux) + 5.7.14 2021-08-01 diff --git a/docs/index.html b/docs/index.html index f90fbe2..e2c8945 100644 --- a/docs/index.html +++ b/docs/index.html @@ -170,7 +170,7 @@
    systeminformation
     
    -
    New Version: 5.7.14
    +
    New Version: 5.8.0
    diff --git a/lib/filesystem.js b/lib/filesystem.js index b10f255..c4fd6b4 100755 --- a/lib/filesystem.js +++ b/lib/filesystem.js @@ -590,7 +590,7 @@ function fsStats(callback) { exports.fsStats = fsStats; -function calcDiskIO(rIO, wIO) { +function calcDiskIO(rIO, wIO, rWaitTime, wWaitTime, tWaitTime) { let result = { rIO: 0, wIO: 0, @@ -598,6 +598,12 @@ function calcDiskIO(rIO, wIO) { rIO_sec: null, wIO_sec: null, tIO_sec: null, + rWaitTime: 0, + wWaitTime: 0, + tWaitTime: 0, + rWaitPercent: null, + wWaitPercent: null, + tWaitPercent: null, ms: 0 }; if (_disk_io && _disk_io.ms) { @@ -608,22 +614,43 @@ function calcDiskIO(rIO, wIO) { result.rIO_sec = (result.rIO - _disk_io.rIO) / (result.ms / 1000); result.wIO_sec = (result.wIO - _disk_io.wIO) / (result.ms / 1000); result.tIO_sec = result.rIO_sec + result.wIO_sec; + result.rWaitTime = rWaitTime; + result.wWaitTime = wWaitTime; + result.tWaitTime = tWaitTime; + result.rWaitPercent = (result.rWaitTime - _disk_io.rWaitTime) * 100 / (result.ms); + result.wWaitPercent = (result.wWaitTime - _disk_io.wWaitTime) * 100 / (result.ms); + result.tWaitPercent = (result.tWaitTime - _disk_io.tWaitTime) * 100 / (result.ms); _disk_io.rIO = rIO; _disk_io.wIO = wIO; _disk_io.rIO_sec = result.rIO_sec; _disk_io.wIO_sec = result.wIO_sec; _disk_io.tIO_sec = result.tIO_sec; + _disk_io.rWaitTime = rWaitTime; + _disk_io.wWaitTime = wWaitTime; + _disk_io.tWaitTime = tWaitTime; + _disk_io.rWaitPercent = result.rWaitPercent; + _disk_io.wWaitPercent = result.wWaitPercent; + _disk_io.tWaitPercent = result.tWaitPercent; _disk_io.last_ms = result.ms; _disk_io.ms = Date.now(); } else { result.rIO = rIO; result.wIO = wIO; result.tIO = rIO + wIO; + result.rWaitTime = rWaitTime; + result.wWaitTime = wWaitTime; + result.tWaitTime = tWaitTime; _disk_io.rIO = rIO; _disk_io.wIO = wIO; _disk_io.rIO_sec = null; _disk_io.wIO_sec = null; _disk_io.tIO_sec = null; + _disk_io.rWaitTime = rWaitTime; + _disk_io.wWaitTime = wWaitTime; + _disk_io.tWaitTime = tWaitTime; + _disk_io.rWaitPercent = null; + _disk_io.wWaitPercent = null; + _disk_io.tWaitPercent = null; _disk_io.last_ms = 0; _disk_io.ms = Date.now(); } @@ -648,10 +675,19 @@ function disksIO(callback) { rIO_sec: null, wIO_sec: null, tIO_sec: null, + rWaitTime: 0, + wWaitTime: 0, + tWaitTime: 0, + rWaitPercent: null, + wWaitPercent: null, + tWaitPercent: null, ms: 0 }; let rIO = 0; let wIO = 0; + let rWaitTime = 0; + let wWaitTime = 0; + let tWaitTime = 0; if ((_disk_io && !_disk_io.ms) || (_disk_io && _disk_io.ms && Date.now() - _disk_io.ms >= 500)) { if (_linux || _freebsd || _openbsd || _netbsd) { @@ -671,8 +707,11 @@ function disksIO(callback) { let stats = line.split(';'); rIO += parseInt(stats[0]); wIO += parseInt(stats[4]); + rWaitTime += parseInt(stats[3]); + wWaitTime += parseInt(stats[7]); + tWaitTime += parseInt(stats[10]); }); - result = calcDiskIO(rIO, wIO); + result = calcDiskIO(rIO, wIO, rWaitTime, wWaitTime, tWaitTime); if (callback) { callback(result); @@ -699,7 +738,7 @@ function disksIO(callback) { wIO += parseInt(line[0]); } }); - result = calcDiskIO(rIO, wIO); + result = calcDiskIO(rIO, wIO, rWaitTime, wWaitTime, tWaitTime); } if (callback) { callback(result); @@ -715,6 +754,12 @@ function disksIO(callback) { result.rIO_sec = _disk_io.rIO_sec; result.wIO_sec = _disk_io.wIO_sec; result.tIO_sec = _disk_io.tIO_sec; + result.rWaitTime = _disk_io.rWaitTime; + result.wWaitTime = _disk_io.wWaitTime; + result.tWaitTime = _disk_io.tWaitTime; + result.rWaitPercent = _disk_io.rWaitPercent; + result.wWaitPercent = _disk_io.wWaitPercent; + result.tWaitPercent = _disk_io.tWaitPercent; if (callback) { callback(result); } diff --git a/lib/processes.js b/lib/processes.js index 4c0ab80..0145180 100644 --- a/lib/processes.js +++ b/lib/processes.js @@ -33,18 +33,24 @@ const _sunos = (_platform === 'sunos'); const _processes_cpu = { all: 0, + all_utime: 0, + all_stime: 0, list: {}, ms: 0, result: {} }; const _services_cpu = { all: 0, + all_utime: 0, + all_stime: 0, list: {}, ms: 0, result: {} }; const _process_cpu = { all: 0, + all_utime: 0, + all_stime: 0, list: {}, ms: 0, result: {} @@ -471,10 +477,10 @@ function calcProcStatWin(procStat, all, _cpu_old) { } return { pid: procStat.pid, - utime: procStat.utime, - stime: procStat.stime, - cpuu: cpuu, - cpus: cpus + utime: cpuu > 0 ? procStat.utime : 0, + stime: cpus > 0 ? procStat.stime : 0, + cpuu: cpuu > 0 ? cpuu : 0, + cpus: cpus > 0 ? cpus : 0 }; } @@ -788,8 +794,8 @@ function processes(callback) { let procs = []; let procStats = []; let list_new = {}; - let allcpuu = 0; - let allcpus = 0; + let allcpuu = _processes_cpu.all_utime; + let allcpus = _processes_cpu.all_stime; for (let i = 0; i < processSections.length; i++) { if (processSections[i].trim() !== '') { let lines = processSections[i].trim().split('\r\n'); @@ -862,6 +868,8 @@ function processes(callback) { } // store old values _processes_cpu.all = allcpuu + allcpus; + _processes_cpu.all_utime = allcpuu; + _processes_cpu.all_stime = allcpus; // _processes_cpu.list = list_new; _processes_cpu.list = Object.assign({}, list_new); _processes_cpu.ms = Date.now() - _processes_cpu.ms; @@ -953,8 +961,8 @@ function processLoad(proc, callback) { let processSections = stdout.split(/\n\s*\n/); let procStats = []; let list_new = {}; - let allcpuu = 0; - let allcpus = 0; + let allcpuu = _process_cpu.all_utime; + let allcpus = _process_cpu.all_stime; // go through all processes for (let i = 0; i < processSections.length; i++) { @@ -1051,6 +1059,8 @@ function processLoad(proc, callback) { } // store old values _process_cpu.all = allcpuu + allcpus; + _process_cpu.all_utime = allcpuu; + _process_cpu.all_stime = allcpus; // _process_cpu.list = list_new; _process_cpu.list = Object.assign({}, list_new); _process_cpu.ms = Date.now() - _process_cpu.ms;