Skip to content

Commit 55dd124

Browse files
committed
Add regexes: ethminer, T-Rex, lolMiner, PhoenixMiner; Edit ethash test: diff, blob;
1 parent 7e55640 commit 55dd124

1 file changed

Lines changed: 80 additions & 38 deletions

File tree

mm.js

Lines changed: 80 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,37 @@ const AGENT = "Meta Miner " + VERSION;
4242
// the multiplier is for supporting hashrate prints in different units
4343
// the nr benchmark prints is to make sure hashrate has stabilized before snapping the benchmark value
4444
const hashrate_regexes = [
45-
[1, 1, /\[[^\]]+\] speed 2.5s\/60s\/15m [\d\.]+ ([\d\.]+)\s/], // for old xmrig
46-
[1, 1, /\[[^\]]+\] speed 10s\/60s\/15m [\d\.n/a]+ ([\d\.]+)\s/], // for new xmrig
47-
[1, 1, /\s+miner\s+speed 10s\/60s\/15m [\d\.n/a]+ ([\d\.]+)\s/], // for xmrig v6+
48-
[1, 1, /Totals \(ALL\):\s+[\d\.]+\s+([1-9]\d*\.\d+|0\.[1-9]\d*)\s/], // xmr-stak
49-
[1, 1, /Total Speed: ([\d\.]+) H\/s,/], // claymore
50-
[1, 1, /\(Avr ([\d\.]+)H\/s\)/], // CryptoDredge
51-
[1e3, 3, /Total[^:]+:\s*([\d\.]+)\s*kh\/s/], // TeamRedMiner variant 1 (kh/s)
52-
[1, 3, /Total[^:]+:\s*([\d\.]+)\s*h\/s/], // TeamRedMiner variant 2 (h/s)
53-
[1, 1, /Mining at\s+([\d\.]+) gps/], // tube4referenceMiner (use mode=rolling command line option)
54-
[1, 1, /mining at\s+([\d\.]+) gps/], // SwapReferenceMiner (use mode=rolling command line option)
55-
[1, 2, /Total\s+:\s+([\d\.]+) gps/], // MoneroVMiner
56-
[1, 2, /([\d\.]+) G\/s/], // gminer
57-
[1000000, 2, /([\d\.]+) MH\/s/], // gminer
45+
[1, 1, /\[[^\]]+\] speed 2.5s\/60s\/15m [\d\.]+ ([\d\.]+)\s/, 'xmrig old'],
46+
[1, 1, /\[[^\]]+\] speed 10s\/60s\/15m [\d\.n/a]+ ([\d\.]+)\s/, 'xmrig new'],
47+
[1, 1, /\s+miner\s+speed 10s\/60s\/15m [\d\.n/a]+ ([\d\.]+)\s/, 'xmrig v6+'],
48+
[1, 1, /Totals \(ALL\):\s+[\d\.]+\s+([1-9]\d*\.\d+|0\.[1-9]\d*)\s/, 'xmr-stak'],
49+
[1, 1, /Total Speed: ([\d\.]+) H\/s,/, 'claymore'],
50+
[1, 1, /\(Avr ([\d\.]+)H\/s\)/, 'CryptoDredge'],
51+
[1e3, 3, /Total[^:]+:\s*([\d\.]+)\s*kh\/s/, 'TeamRedMiner variant 1 (kh/s)'],
52+
[1, 3, /Total[^:]+:\s*([\d\.]+)\s*h\/s/, 'TeamRedMiner variant 2 (h/s)'],
53+
[1, 1, /Mining at\s+([\d\.]+) gps/, 'tube4referenceMiner (use mode=rolling command line option)'],
54+
[1, 1, /mining at\s+([\d\.]+) gps/, 'SwapReferenceMiner (use mode=rolling command line option)'],
55+
[1, 2, /Total\s+:\s+([\d\.]+) gps/, 'MoneroVMiner'],
56+
[1, 2, /^\|.*[^\d\.]([\d\.]+) G\/s.*\|$/, 'gminer (gh/s)'],
57+
[1e6, 2, /^\|.*[^\d\.]([\d\.]+) M\/s.*\|$/, 'gminer (mh/s)'],
58+
[1, 2, /^ethminer .* ([\d\.]+) h - /, 'ethminer (h/s)'],
59+
[1e3, 2, /^ethminer .* ([\d\.]+) Kh - /, 'ethminer (kh/s)'],
60+
[1e6, 2, /^ethminer .* ([\d\.]+) Mh - /, 'ethminer (mh/s)'],
61+
[1e9, 2, /^ethminer .* ([\d\.]+) Gh - /, 'ethminer (gh/s)'],
62+
[1, 2, /^GPU #\d+: .* - ([\d\.]+) H\/s/, 'T-Rex (h/s)'],
63+
[1e3, 2, /^GPU #\d+: .* - ([\d\.]+) KH\/s/, 'T-Rex (kh/s)'],
64+
[1e6, 2, /^GPU #\d+: .* - ([\d\.]+) MH\/s/, 'T-Rex (mh/s)'],
65+
[1e9, 2, /^GPU #\d+: .* - ([\d\.]+) GH\/s/, 'T-Rex (gh/s)'],
66+
[1, 2, /^Average speed \(30s\): ([\d\.]+) h\/s/, 'lolMiner (h/s)'],
67+
[1e3, 2, /^Average speed \(30s\): ([\d\.]+) kh\/s/, 'lolMiner (kh/s)'],
68+
[1e6, 2, /^Average speed \(30s\): ([\d\.]+) mh\/s/, 'lolMiner (mh/s)'],
69+
[1e9, 2, /^Average speed \(30s\): ([\d\.]+) gh\/s/, 'lolMiner (gh/s)'],
70+
[1, 2, /^Eth speed: ([\d\.]+) H\/s, shares:.*time:/, 'PhoenixMiner (h/s)'],
71+
[1e3, 2, /^Eth speed: ([\d\.]+) KH\/s, shares:.*time:/, 'PhoenixMiner (kh/s)'],
72+
[1e6, 2, /^Eth speed: ([\d\.]+) MH\/s, shares:.*time:/, 'PhoenixMiner (mh/s)'],
73+
[1e9, 2, /^Eth speed: ([\d\.]+) GH\/s, shares:.*time:/, 'PhoenixMiner (gh/s)'],
5874
];
75+
const hashrate_per_gpu = []
5976

6077
function algo_hashrate_factor(algo) {
6178
switch (algo) {
@@ -452,10 +469,10 @@ function start_miner_raw(exe, args, out_cb) {
452469
let proc = child_process.spawn(exe, args, is_miner_stdin ? {stdio: ['inherit', 'pipe', 'pipe']} : {});
453470

454471
proc.stdout.on('data', (data) => {
455-
if (out_cb) out_cb(`${data}`);
472+
if (out_cb) out_cb(data.toString());
456473
});
457474
proc.stderr.on('data', (data) => {
458-
if (out_cb) out_cb(`${data}`);
475+
if (out_cb) out_cb(data.toString());
459476
});
460477
proc.on('close', (code) => {
461478
if (is_verbose_mode) {
@@ -841,15 +858,15 @@ function do_miner_perf_runs(cb) {
841858
jsonrpc: "2.0",
842859
method: "mining.set_difficulty",
843860
params: [
844-
1000000
861+
10.24
845862
],
846863
}) + "\n" + JSON.stringify({
847864
jsonrpc: "2.0",
848865
method: "mining.notify",
849866
params: [
850867
"benchmark1", // job_id
851-
"e79f0f63030bf691445c2b9d0266b24a9619e355194067f2ad2c73a8e0a26c65", // seed hash
852-
"feb4243b885cd1af5337979f5d81849335cab197b4993e5c61ea4b43b43dbbc6", // hash
868+
"ffaad0781cfec93fee66657ef8a9f132f422becba3626b5d936ad3cb1f8228d4", // seed hash
869+
"a917c993b27e4a15c6ed3611bcaa7e5eee5c9b984053f6c1270032c0c4d6dc83", // hash
853870
true,
854871
]
855872
}) + "\n");
@@ -900,27 +917,52 @@ function do_miner_perf_runs(cb) {
900917
};
901918
let nr_prints_needed = -1;
902919
let nr_prints_found = 0;
903-
miner_proc = start_miner(cmd, function(str) {
904-
print_messages(str);
905-
str = str.replace(/\x1b\[[0-9;]*m/g, ""); // remove all colors
906-
for (let i in hashrate_regexes) {
907-
const hashrate_regex = hashrate_regexes[i];
908-
const m = str.match(hashrate_regex[2]);
909-
if (m) {
910-
if (nr_prints_needed < 0) nr_prints_needed = hashrate_regex[1];
911-
const hashrate = parseFloat(m[1]) * hashrate_regex[0] * algo_hashrate_factor(algo);
912-
if (++nr_prints_found >= nr_prints_needed) {
913-
const algo_deps = bench_algo_deps(algo, hashrate);
914-
for (let algo_dep in algo_deps) {
915-
log("Setting performance for " + algo_dep + " algo to " + algo_deps[algo_dep]);
916-
c.algo_perf[algo_dep] = algo_deps[algo_dep];
920+
let chunk_leftover = '';
921+
miner_proc = start_miner(cmd, function(chunk) {
922+
chunk = [chunk_leftover, chunk].join('')
923+
const buf_size = chunk.lastIndexOf('\n');
924+
chunk_leftover = chunk.slice(chunk, buf_size);
925+
console.log("CHUNK", buf_size, chunk_leftover);
926+
const eol = `\x1b[0m\n`;
927+
let hashrate_prev = 0;
928+
let line = 0;
929+
processing:
930+
for (let str of chunk.split('\n')) {
931+
print_messages(`${line++}: ${str}${eol}`);
932+
str = str.replace(/\x1b\[[0-9;]*m/g, ""); // remove all colors
933+
for (let i in hashrate_regexes) {
934+
const hashrate_regex = hashrate_regexes[i];
935+
const m = str.match(hashrate_regex[2]);
936+
if (m) {
937+
console.log(`M:${hashrate_regex[3]}:`, JSON.stringify(m))
938+
if (nr_prints_needed < 0) nr_prints_needed = hashrate_regex[1];
939+
const hashrate_raw = parseFloat(m[1]);
940+
if (hashrate_raw > 0) {
941+
const hashrate = hashrate_raw * hashrate_regex[0] * algo_hashrate_factor(algo);
942+
console.log("HRR,HR: ", hashrate_raw, hashrate);
943+
console.log("NPF,NPN:", nr_prints_found, nr_prints_needed);
944+
const variance = hashrate_prev / hashrate;
945+
const variance_good = (variance > 0.98 && variance < 1.02);
946+
console.log("V:", variance);
947+
if (variance_good > 0.9 && ++nr_prints_found >= nr_prints_needed) {
948+
const algo_deps = bench_algo_deps(algo, hashrate);
949+
for (let algo_dep in algo_deps) {
950+
log("Setting performance for " + algo_dep + " algo to " + algo_deps[algo_dep]);
951+
c.algo_perf[algo_dep] = algo_deps[algo_dep];
952+
}
953+
miner_proc.on('close', (code) => { clearTimeout(timeout); resolve(); });
954+
tree_kill(miner_proc.pid);
955+
break processing;
956+
} else {
957+
let msg = "Read";
958+
if (!variance_good) {
959+
msg = "Skip";
960+
}
961+
log(msg + " performance for " + algo + " algo of " + hashrate + ", waiting for " +
962+
(nr_prints_needed - nr_prints_found) + " more print(s).");
963+
}
964+
hashrate_prev = hashrate
917965
}
918-
miner_proc.on('close', (code) => { clearTimeout(timeout); resolve(); });
919-
tree_kill(miner_proc.pid);
920-
break;
921-
} else {
922-
log("Read performance for " + algo + " algo to " + hashrate + ", waiting for " +
923-
(nr_prints_needed - nr_prints_found) + " more print(s).");
924966
}
925967
}
926968
}

0 commit comments

Comments
 (0)