cpu() added physical cores, processors, socket type
This commit is contained in:
parent
100da86136
commit
82cc7fb84f
@ -100,6 +100,7 @@ Other changes
|
|||||||
|
|
||||||
| Version | Date | Comment |
|
| Version | Date | Comment |
|
||||||
| -------------- | -------------- | -------- |
|
| -------------- | -------------- | -------- |
|
||||||
|
| 3.52.0 | 2018-12-15 | `cpu()` added physical cores, processors, socket type |
|
||||||
| 3.51.4 | 2018-12-05 | `versions()` bugfix, optimization postgres |
|
| 3.51.4 | 2018-12-05 | `versions()` bugfix, optimization postgres |
|
||||||
| 3.51.3 | 2018-11-27 | `mem()` refactoring parsing linux, code cleanup |
|
| 3.51.3 | 2018-11-27 | `mem()` refactoring parsing linux, code cleanup |
|
||||||
| 3.51.2 | 2018-11-26 | `mem()` bugfix parsing `free` output linux |
|
| 3.51.2 | 2018-11-26 | `mem()` bugfix parsing `free` output linux |
|
||||||
|
|||||||
@ -64,6 +64,7 @@ async function cpu() {
|
|||||||
|
|
||||||
(last 7 major and minor version releases)
|
(last 7 major and minor version releases)
|
||||||
|
|
||||||
|
- Version 3.52.0: `cpu()` added physical cores, processors, socket type
|
||||||
- Version 3.51.0: `processLoad()` added for windows
|
- Version 3.51.0: `processLoad()` added for windows
|
||||||
- Version 3.50.0: `services()` added possibility to specify ALL services "*" for linux/win
|
- Version 3.50.0: `services()` added possibility to specify ALL services "*" for linux/win
|
||||||
- Version 3.49.0: `uuid()` added - os specific uuid (per installation)
|
- Version 3.49.0: `uuid()` added - os specific uuid (per installation)
|
||||||
@ -71,7 +72,6 @@ async function cpu() {
|
|||||||
- Version 3.47.0: `version()` added docker, postfix
|
- Version 3.47.0: `version()` added docker, postfix
|
||||||
- Version 3.46.0: `version()` added system openssl version (besides the one inside node.js)
|
- Version 3.46.0: `version()` added system openssl version (besides the one inside node.js)
|
||||||
- Version 3.45.0: `diskLayout()` added S.M.A.R.T. status
|
- Version 3.45.0: `diskLayout()` added S.M.A.R.T. status
|
||||||
- Version 3.44.0: `battery()` added type, model, manufacturer, serial, timeremaining
|
|
||||||
- ...
|
- ...
|
||||||
|
|
||||||
You can find all changes here: [detailed changelog][changelog-url]
|
You can find all changes here: [detailed changelog][changelog-url]
|
||||||
@ -139,6 +139,9 @@ I also created a nice little command line tool called [mmon][mmon-github-url] (
|
|||||||
| | speedmin | X | | X | X | | in GHz e.g. '0.80' |
|
| | speedmin | X | | X | X | | in GHz e.g. '0.80' |
|
||||||
| | speedmax | X | X | X | X | | in GHz e.g. '3.90' |
|
| | speedmax | X | X | X | X | | in GHz e.g. '3.90' |
|
||||||
| | cores | X | X | X | X | | # cores |
|
| | cores | X | X | X | X | | # cores |
|
||||||
|
| | physicalCores | X | X | X | X | | # physical cores |
|
||||||
|
| | processors | X | X | X | X | | # processors |
|
||||||
|
| | socket | X | X | | X | | socket type e.g. "LGA1356" |
|
||||||
| | vendor | X | X | X | X | | vendor ID |
|
| | vendor | X | X | X | X | | vendor ID |
|
||||||
| | family | X | X | X | X | | processor family |
|
| | family | X | X | X | X | | processor family |
|
||||||
| | Model | X | X | X | X | | processor model |
|
| | Model | X | X | X | X | | processor model |
|
||||||
|
|||||||
154
lib/cpu.js
154
lib/cpu.js
@ -14,6 +14,7 @@
|
|||||||
|
|
||||||
const os = require('os');
|
const os = require('os');
|
||||||
const exec = require('child_process').exec;
|
const exec = require('child_process').exec;
|
||||||
|
const execSync = require('child_process').execSync;
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const util = require('./util');
|
const util = require('./util');
|
||||||
|
|
||||||
@ -100,6 +101,15 @@ const AMDBaseFrequencies = {
|
|||||||
'Pro 1300': '3.5',
|
'Pro 1300': '3.5',
|
||||||
'1200': '3.1',
|
'1200': '3.1',
|
||||||
'Pro 1200': '3.1',
|
'Pro 1200': '3.1',
|
||||||
|
'2200U': '2.5',
|
||||||
|
'2300U': '2.0',
|
||||||
|
'Pro 2300U': '2.0',
|
||||||
|
'2500U': '2.0',
|
||||||
|
'Pro 2500U': '2.2',
|
||||||
|
'2700U': '2.0',
|
||||||
|
'Pro 2700U': '2.2',
|
||||||
|
'2600H': '3.2',
|
||||||
|
'2800H': '3.3',
|
||||||
'7601': '2.2',
|
'7601': '2.2',
|
||||||
'7551': '2.0',
|
'7551': '2.0',
|
||||||
'7501': '2.0',
|
'7501': '2.0',
|
||||||
@ -112,6 +122,69 @@ const AMDBaseFrequencies = {
|
|||||||
'7551P': '2.0',
|
'7551P': '2.0',
|
||||||
'7401P': '2.0',
|
'7401P': '2.0',
|
||||||
'7351P': '2.4'
|
'7351P': '2.4'
|
||||||
|
}
|
||||||
|
|
||||||
|
const socketTypes = {
|
||||||
|
1: 'Other',
|
||||||
|
2: 'Unknown',
|
||||||
|
3: 'Daughter Board',
|
||||||
|
4: 'ZIF Socket',
|
||||||
|
5: 'Replacement/Piggy Back',
|
||||||
|
6: 'None',
|
||||||
|
7: 'LIF Socket',
|
||||||
|
8: 'Slot 1',
|
||||||
|
9: 'Slot 2',
|
||||||
|
10: '370 Pin Socket',
|
||||||
|
11: 'Slot A',
|
||||||
|
12: 'Slot M',
|
||||||
|
13: '423',
|
||||||
|
14: 'A (Socket 462)',
|
||||||
|
15: '478',
|
||||||
|
16: '754',
|
||||||
|
17: '940',
|
||||||
|
18: '939',
|
||||||
|
19: 'mPGA604',
|
||||||
|
20: 'LGA771',
|
||||||
|
21: 'LGA775',
|
||||||
|
22: 'S1',
|
||||||
|
23: 'AM2',
|
||||||
|
24: 'F (1207)',
|
||||||
|
25: 'LGA1366',
|
||||||
|
26: 'G34',
|
||||||
|
27: 'AM3',
|
||||||
|
28: 'C32',
|
||||||
|
29: 'LGA1156',
|
||||||
|
30: 'LGA1567',
|
||||||
|
31: 'PGA988A',
|
||||||
|
32: 'BGA1288',
|
||||||
|
33: 'rPGA988B',
|
||||||
|
34: 'BGA1023',
|
||||||
|
35: 'BGA1224',
|
||||||
|
36: 'LGA1155',
|
||||||
|
37: 'LGA1356',
|
||||||
|
38: 'LGA2011',
|
||||||
|
39: 'FS1',
|
||||||
|
40: 'FS2',
|
||||||
|
41: 'FM1',
|
||||||
|
42: 'FM2',
|
||||||
|
43: 'LGA2011-3',
|
||||||
|
44: 'LGA1356-3',
|
||||||
|
45: 'LGA1150',
|
||||||
|
46: 'BGA1168',
|
||||||
|
47: 'BGA1234',
|
||||||
|
48: 'BGA1364',
|
||||||
|
49: 'AM4',
|
||||||
|
50: 'LGA1151',
|
||||||
|
51: 'BGA1356',
|
||||||
|
52: 'BGA1440',
|
||||||
|
53: 'BGA1515',
|
||||||
|
54: 'LGA3647-1',
|
||||||
|
55: 'SP3',
|
||||||
|
56: 'SP3r2',
|
||||||
|
57: 'LGA2066',
|
||||||
|
58: 'BGA1392',
|
||||||
|
59: 'BGA1510',
|
||||||
|
60: 'BGA1528'
|
||||||
};
|
};
|
||||||
|
|
||||||
function cpuBrandManufacturer(res) {
|
function cpuBrandManufacturer(res) {
|
||||||
@ -167,11 +240,14 @@ function getCpu() {
|
|||||||
speedmin: '',
|
speedmin: '',
|
||||||
speedmax: '',
|
speedmax: '',
|
||||||
cores: util.cores(),
|
cores: util.cores(),
|
||||||
|
physicalCores: util.cores(),
|
||||||
|
processors: 1,
|
||||||
|
socket: '',
|
||||||
cache: {}
|
cache: {}
|
||||||
};
|
};
|
||||||
if (_darwin) {
|
if (_darwin) {
|
||||||
exec('sysctl machdep.cpu hw.cpufrequency_max hw.cpufrequency_min', function (error, stdout) {
|
exec('sysctl machdep.cpu hw.cpufrequency_max hw.cpufrequency_min hw.packages hw.physicalcpu_max hw.ncpu', function (error, stdout) {
|
||||||
if (!error) {
|
// if (!error) {
|
||||||
let lines = stdout.toString().split('\n');
|
let lines = stdout.toString().split('\n');
|
||||||
const modelline = util.getValue(lines, 'machdep.cpu.brand_string');
|
const modelline = util.getValue(lines, 'machdep.cpu.brand_string');
|
||||||
result.brand = modelline.split('@')[0].trim();
|
result.brand = modelline.split('@')[0].trim();
|
||||||
@ -185,8 +261,17 @@ function getCpu() {
|
|||||||
result.family = util.getValue(lines, 'machdep.cpu.family');
|
result.family = util.getValue(lines, 'machdep.cpu.family');
|
||||||
result.model = util.getValue(lines, 'machdep.cpu.model');
|
result.model = util.getValue(lines, 'machdep.cpu.model');
|
||||||
result.stepping = util.getValue(lines, 'machdep.cpu.stepping');
|
result.stepping = util.getValue(lines, 'machdep.cpu.stepping');
|
||||||
|
const countProcessors = util.getValue(lines, 'hw.packages');
|
||||||
|
const countCores = util.getValue(lines, 'hw.physicalcpu_max');
|
||||||
|
const countThreads = util.getValue(lines, 'hw.ncpu');
|
||||||
|
if (countProcessors) {
|
||||||
|
result.processors = parseInt(countProcessors) || 1;
|
||||||
}
|
}
|
||||||
|
if (countCores && countThreads) {
|
||||||
|
result.cores = parseInt(countThreads) || util.cores();
|
||||||
|
result.physicalCores = parseInt(countCores) || util.cores();
|
||||||
|
}
|
||||||
|
// }
|
||||||
cpuCache().then(res => {
|
cpuCache().then(res => {
|
||||||
result.cache = res;
|
result.cache = res;
|
||||||
resolve(result);
|
resolve(result);
|
||||||
@ -234,6 +319,42 @@ function getCpu() {
|
|||||||
if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2) * (result.cache.l2.indexOf('K') !== -1 ? 1024 : 1); }
|
if (result.cache.l2) { result.cache.l2 = parseInt(result.cache.l2) * (result.cache.l2.indexOf('K') !== -1 ? 1024 : 1); }
|
||||||
result.cache.l3 = util.getValue(lines, 'l3 cache');
|
result.cache.l3 = util.getValue(lines, 'l3 cache');
|
||||||
if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3) * (result.cache.l3.indexOf('K') !== -1 ? 1024 : 1); }
|
if (result.cache.l3) { result.cache.l3 = parseInt(result.cache.l3) * (result.cache.l3.indexOf('K') !== -1 ? 1024 : 1); }
|
||||||
|
|
||||||
|
// # processurs & # threads/core - method 1
|
||||||
|
let threadsPerCoreInt = 0;
|
||||||
|
try {
|
||||||
|
lines = [];
|
||||||
|
lines = execSync('cat /proc/cpuinfo | grep -E "physical id|core id"').toString().split('\n');
|
||||||
|
if (lines && lines.length) {
|
||||||
|
result.processors = util.countUniqueLines(lines, 'physical id') || 1;
|
||||||
|
result.physicalCores = util.countUniqueLines(lines, 'core id') / result.processors;
|
||||||
|
if (result.physicalCores) {
|
||||||
|
threadsPerCoreInt = result.cores / result.physicalCores;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
util.noop();
|
||||||
|
}
|
||||||
|
// # threads/core - method 2
|
||||||
|
if (threadsPerCoreInt === 0) {
|
||||||
|
const threadsPerCore = util.getValue(lines, 'thread(s) per core');
|
||||||
|
if (threadsPerCore) {
|
||||||
|
threadsPerCoreInt = parseInt(threadsPerCore, 10);
|
||||||
|
if (!isNaN(threadsPerCoreInt)) {
|
||||||
|
result.physicalCores = result.cores / threadsPerCoreInt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// socket type
|
||||||
|
try {
|
||||||
|
lines = [];
|
||||||
|
lines = execSync('dmidecode –t 4 | grep "Upgrade: Socket"').toString().split('\n');
|
||||||
|
if (lines && lines.length) {
|
||||||
|
result.socket = util.getValue(lines, 'Upgrade').replace('Socket', '').trim();
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
util.noop();
|
||||||
|
}
|
||||||
resolve(result);
|
resolve(result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -294,6 +415,15 @@ function getCpu() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// socket type
|
||||||
|
result.socket = util.getValue(lines, 'Upgrade').replace('Socket', '').trim();
|
||||||
|
// # threads / # cores
|
||||||
|
const threadCount = util.getValue(lines, 'thread count').trim();
|
||||||
|
const coreCount = util.getValue(lines, 'core count').trim();
|
||||||
|
if (coreCount && threadCount) {
|
||||||
|
result.cores = threadCount;
|
||||||
|
result.physicalCores = coreCount;
|
||||||
|
}
|
||||||
resolve(result);
|
resolve(result);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -302,7 +432,7 @@ function getCpu() {
|
|||||||
}
|
}
|
||||||
if (_windows) {
|
if (_windows) {
|
||||||
try {
|
try {
|
||||||
exec(util.getWmic() + ' cpu get name, description, revision, l2cachesize, l3cachesize, manufacturer, currentclockspeed, maxclockspeed /value', util.execOptsWin, function (error, stdout) {
|
exec(util.getWmic() + ' cpu get /value', util.execOptsWin, function (error, stdout) {
|
||||||
if (!error) {
|
if (!error) {
|
||||||
let lines = stdout.split('\r\n');
|
let lines = stdout.split('\r\n');
|
||||||
let name = util.getValue(lines, 'name', '=') || '';
|
let name = util.getValue(lines, 'name', '=') || '';
|
||||||
@ -345,6 +475,22 @@ function getCpu() {
|
|||||||
result.stepping = description[i + 1];
|
result.stepping = description[i + 1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// socket type
|
||||||
|
const socketId = util.getValue(lines, 'UpgradeMethod', '=');
|
||||||
|
if (socketTypes[socketId]) {
|
||||||
|
result.socket = socketTypes[socketId];
|
||||||
|
}
|
||||||
|
// # threads / # cores
|
||||||
|
const countProcessors = util.countUniqueLines(lines, 'Caption');
|
||||||
|
const countThreads = util.getValue(lines, 'NumberOfLogicalProcessors', '=');
|
||||||
|
const countCores = util.getValue(lines, 'NumberOfCores', '=');
|
||||||
|
if (countProcessors) {
|
||||||
|
result.processors = parseInt(countProcessors) || 1;
|
||||||
|
}
|
||||||
|
if (countCores && countThreads) {
|
||||||
|
result.cores = parseInt(countThreads) || util.cores();
|
||||||
|
result.physicalCores = parseInt(countCores) || util.cores();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) {
|
exec(util.getWmic() + ' path Win32_CacheMemory get CacheType,InstalledSize,Purpose', function (error, stdout) {
|
||||||
if (!error) {
|
if (!error) {
|
||||||
|
|||||||
13
lib/util.js
13
lib/util.js
@ -291,6 +291,18 @@ function nanoSeconds() {
|
|||||||
return +time[0] * 1e9 + +time[1];
|
return +time[0] * 1e9 + +time[1];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function countUniqueLines(lines, startingWith) {
|
||||||
|
startingWith = startingWith || '';
|
||||||
|
const uniqueLines = [];
|
||||||
|
lines.forEach(line => {
|
||||||
|
if (line.indexOf(startingWith) === 0) {
|
||||||
|
if (uniqueLines.indexOf(line) === -1) {
|
||||||
|
uniqueLines.push(line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return uniqueLines.length;
|
||||||
|
}
|
||||||
function noop() { }
|
function noop() { }
|
||||||
|
|
||||||
exports.execOptsWin = execOptsWin;
|
exports.execOptsWin = execOptsWin;
|
||||||
@ -308,4 +320,5 @@ exports.findObjectByKey = findObjectByKey;
|
|||||||
exports.getWmic = getWmic;
|
exports.getWmic = getWmic;
|
||||||
exports.powerShell = powerShell;
|
exports.powerShell = powerShell;
|
||||||
exports.nanoSeconds = nanoSeconds;
|
exports.nanoSeconds = nanoSeconds;
|
||||||
|
exports.countUniqueLines = countUniqueLines;
|
||||||
exports.noop = noop;
|
exports.noop = noop;
|
||||||
|
|||||||
@ -24,6 +24,12 @@
|
|||||||
"freebsd",
|
"freebsd",
|
||||||
"cpu",
|
"cpu",
|
||||||
"cpuload",
|
"cpuload",
|
||||||
|
"physical cores",
|
||||||
|
"logical cores",
|
||||||
|
"processor",
|
||||||
|
"cores",
|
||||||
|
"threads",
|
||||||
|
"socket type",
|
||||||
"memory",
|
"memory",
|
||||||
"file system",
|
"file system",
|
||||||
"fsstats",
|
"fsstats",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user