From 26ce156a0149fdb607adbcb3dc0cca4cbe061018 Mon Sep 17 00:00:00 2001 From: tuyennhv Date: Tue, 12 Sep 2023 15:23:28 +0700 Subject: [PATCH] chore: avoid using bigint for metrics (#5926) * chore: avoid using bigint for metrics * chore: use tuple for sec and ns --- .../src/chain/bls/multithread/index.ts | 15 +++++++++------ .../src/chain/bls/multithread/types.ts | 8 ++++---- .../src/chain/bls/multithread/worker.ts | 8 +++++--- .../beacon-node/src/chain/bls/singleThread.ts | 17 ++++++++--------- 4 files changed, 26 insertions(+), 22 deletions(-) diff --git a/packages/beacon-node/src/chain/bls/multithread/index.ts b/packages/beacon-node/src/chain/bls/multithread/index.ts index db8791e46e92..755eb16660af 100644 --- a/packages/beacon-node/src/chain/bls/multithread/index.ts +++ b/packages/beacon-node/src/chain/bls/multithread/index.ts @@ -432,10 +432,13 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier { // If the job, metrics or any code below throws: the job will reject never going stale. // Only downside is the the job promise may be resolved twice, but that's not an issue - const jobStartNs = process.hrtime.bigint(); + const [jobStartSec, jobStartNs] = process.hrtime(); const workResult = await workerApi.verifyManySignatureSets(workReqs); - const jobEndNs = process.hrtime.bigint(); - const {workerId, batchRetries, batchSigsSuccess, workerStartNs, workerEndNs, results} = workResult; + const [jobEndSec, jobEndNs] = process.hrtime(); + const {workerId, batchRetries, batchSigsSuccess, workerStartTime, workerEndTime, results} = workResult; + + const [workerStartSec, workerStartNs] = workerStartTime; + const [workerEndSec, workerEndNs] = workerEndTime; let successCount = 0; let errorCount = 0; @@ -477,9 +480,9 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier { } } - const workerJobTimeSec = Number(workerEndNs - workerStartNs) / 1e9; - const latencyToWorkerSec = Number(workerStartNs - jobStartNs) / 1e9; - const latencyFromWorkerSec = Number(jobEndNs - workerEndNs) / 1e9; + const workerJobTimeSec = workerEndSec - workerStartSec + (workerEndNs - workerStartNs) / 1e9; + const latencyToWorkerSec = workerStartSec - jobStartSec + (workerStartNs - jobStartNs) / 1e9; + const latencyFromWorkerSec = jobEndSec - workerEndSec + Number(jobEndNs - workerEndNs) / 1e9; this.metrics?.blsThreadPool.timePerSigSet.observe(workerJobTimeSec / startedSigSets); this.metrics?.blsThreadPool.jobsWorkerTime.inc({workerId}, workerJobTimeSec); diff --git a/packages/beacon-node/src/chain/bls/multithread/types.ts b/packages/beacon-node/src/chain/bls/multithread/types.ts index cefdc799ee16..3ebc979b559e 100644 --- a/packages/beacon-node/src/chain/bls/multithread/types.ts +++ b/packages/beacon-node/src/chain/bls/multithread/types.ts @@ -31,9 +31,9 @@ export type BlsWorkResult = { batchRetries: number; /** Total num of sigs that have been successfully verified with batching */ batchSigsSuccess: number; - /** Time worker function starts - UNIX timestamp in nanoseconds */ - workerStartNs: bigint; - /** Time worker function ends - UNIX timestamp in nanoseconds */ - workerEndNs: bigint; + /** Time worker function starts - UNIX timestamp in seconds and nanoseconds */ + workerStartTime: [number, number]; + /** Time worker function ends - UNIX timestamp in seconds and nanoseconds */ + workerEndTime: [number, number]; results: WorkResult[]; }; diff --git a/packages/beacon-node/src/chain/bls/multithread/worker.ts b/packages/beacon-node/src/chain/bls/multithread/worker.ts index a9237d5be4d6..0db88dcfccd8 100644 --- a/packages/beacon-node/src/chain/bls/multithread/worker.ts +++ b/packages/beacon-node/src/chain/bls/multithread/worker.ts @@ -28,7 +28,7 @@ expose({ }); function verifyManySignatureSets(workReqArr: BlsWorkReq[]): BlsWorkResult { - const startNs = process.hrtime.bigint(); + const [startSec, startNs] = process.hrtime(); const results: WorkResult[] = []; let batchRetries = 0; let batchSigsSuccess = 0; @@ -95,12 +95,14 @@ function verifyManySignatureSets(workReqArr: BlsWorkReq[]): BlsWorkResult { } } + const [workerEndSec, workerEndNs] = process.hrtime(); + return { workerId, batchRetries, batchSigsSuccess, - workerStartNs: startNs, - workerEndNs: process.hrtime.bigint(), + workerStartTime: [startSec, startNs], + workerEndTime: [workerEndSec, workerEndNs], results, }; } diff --git a/packages/beacon-node/src/chain/bls/singleThread.ts b/packages/beacon-node/src/chain/bls/singleThread.ts index 49eae40e3b8b..58ef6b6d9eec 100644 --- a/packages/beacon-node/src/chain/bls/singleThread.ts +++ b/packages/beacon-node/src/chain/bls/singleThread.ts @@ -24,14 +24,13 @@ export class BlsSingleThreadVerifier implements IBlsVerifier { })); // Count time after aggregating - const startNs = process.hrtime.bigint(); - + const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer(); const isValid = verifySignatureSetsMaybeBatch(setsAggregated); // Don't use a try/catch, only count run without exceptions - const endNs = process.hrtime.bigint(); - const totalSec = Number(startNs - endNs) / 1e9; - this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.observe(totalSec); + if (timer) { + timer(); + } return isValid; } @@ -40,7 +39,7 @@ export class BlsSingleThreadVerifier implements IBlsVerifier { sets: {publicKey: PublicKey; signature: Uint8Array}[], message: Uint8Array ): Promise { - const startNs = process.hrtime.bigint(); + const timer = this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.startTimer(); const pubkey = bls.PublicKey.aggregate(sets.map((set) => set.publicKey)); let isAllValid = true; // validate signature = true @@ -72,9 +71,9 @@ export class BlsSingleThreadVerifier implements IBlsVerifier { }); } - const endNs = process.hrtime.bigint(); - const totalSec = Number(startNs - endNs) / 1e9; - this.metrics?.blsThreadPool.mainThreadDurationInThreadPool.observe(totalSec); + if (timer) { + timer(); + } return result; }