Skip to content

Commit 24c001b

Browse files
authored
Merge 1d7bb65 into 277437e
2 parents 277437e + 1d7bb65 commit 24c001b

File tree

10 files changed

+64
-51
lines changed

10 files changed

+64
-51
lines changed

packages/beacon-node/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@
9595
},
9696
"dependencies": {
9797
"@chainsafe/as-sha256": "^1.0.0",
98-
"@chainsafe/blst": "^2.2.0",
98+
"@chainsafe/blst": "^2.1.0",
9999
"@chainsafe/discv5": "^9.0.0",
100100
"@chainsafe/enr": "^3.0.0",
101101
"@chainsafe/libp2p-gossipsub": "^13.0.0",

packages/beacon-node/src/chain/bls/multithread/index.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,7 @@ export class BlsMultiThreadWorkerPool implements IBlsVerifier {
394394
try {
395395
// Note: This can throw, must be handled per-job.
396396
// Pubkey and signature aggregation is defered here
397-
workReq = await jobItemWorkReq(job, this.metrics);
397+
workReq = jobItemWorkReq(job, this.metrics);
398398
} catch (e) {
399399
this.metrics?.blsThreadPool.errorAggregateSignatureSetsCount.inc({type: job.type});
400400

packages/beacon-node/src/chain/bls/multithread/jobItem.ts

+13-5
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {PublicKey, asyncAggregateWithRandomness} from "@chainsafe/blst";
1+
import {PublicKey, aggregateWithRandomness} from "@chainsafe/blst";
22
import {ISignatureSet, SignatureSetType} from "@lodestar/state-transition";
33
import {Metrics} from "../../../metrics/metrics.js";
44
import {LinkedList} from "../../../util/array.js";
@@ -48,7 +48,7 @@ export function jobItemSigSets(job: JobQueueItem): number {
4848
* Prepare BlsWorkReq from JobQueueItem
4949
* WARNING: May throw with untrusted user input
5050
*/
51-
export async function jobItemWorkReq(job: JobQueueItem, metrics: Metrics | null): Promise<BlsWorkReq> {
51+
export function jobItemWorkReq(job: JobQueueItem, metrics: Metrics | null): BlsWorkReq {
5252
switch (job.type) {
5353
case JobQueueItemType.default:
5454
return {
@@ -61,9 +61,17 @@ export async function jobItemWorkReq(job: JobQueueItem, metrics: Metrics | null)
6161
})),
6262
};
6363
case JobQueueItemType.sameMessage: {
64-
const {pk, sig} = await asyncAggregateWithRandomness(
65-
job.sets.map((set) => ({pk: set.publicKey, sig: set.signature}))
66-
);
64+
// This is slow code on main thread (mainly signature deserialization + group check).
65+
// Ideally it can be taken off-thread, but in the mean time, keep track of total time spent here.
66+
// As of July 2024, for a node subscribing to all subnets, with 1 signature per validator per epoch,
67+
// it takes around 2.02 min to perform this operation for a single epoch.
68+
// cpu profile on main thread has 250s idle so this only works until we reach 3M validators
69+
// However, for normal node with only 2 to 7 subnet subscriptions per epoch this works until 27M validators
70+
// and not a problem in the near future
71+
// this is monitored on v1.21.0 https://github.com/ChainSafe/lodestar/pull/6894/files#r1687359225
72+
const timer = metrics?.blsThreadPool.aggregateWithRandomnessMainThreadDuration.startTimer();
73+
const {pk, sig} = aggregateWithRandomness(job.sets.map((set) => ({pk: set.publicKey, sig: set.signature})));
74+
timer?.();
6775

6876
return {
6977
opts: job.opts,

packages/beacon-node/src/metrics/metrics/lodestar.ts

+5
Original file line numberDiff line numberDiff line change
@@ -486,6 +486,11 @@ export function createLodestarMetrics(
486486
name: "lodestar_bls_thread_pool_batchable_sig_sets_total",
487487
help: "Count of total batchable signature sets",
488488
}),
489+
aggregateWithRandomnessMainThreadDuration: register.histogram({
490+
name: "lodestar_bls_thread_pool_aggregate_with_randomness_main_thread_time_seconds",
491+
help: "Total time performing aggregateWithRandomness on main thread",
492+
buckets: [0.001, 0.005, 0.01, 0.1],
493+
}),
489494
pubkeysAggregationMainThreadDuration: register.histogram({
490495
name: "lodestar_bls_thread_pool_pubkeys_aggregation_main_thread_time_seconds",
491496
help: "Total time spent aggregating pubkeys on main thread",

packages/cli/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@
5353
"dependencies": {
5454
"@chainsafe/bls-keygen": "^0.4.0",
5555
"@chainsafe/bls-keystore": "^3.1.0",
56-
"@chainsafe/blst": "^2.2.0",
56+
"@chainsafe/blst": "^2.1.0",
5757
"@chainsafe/discv5": "^9.0.0",
5858
"@chainsafe/enr": "^3.0.0",
5959
"@chainsafe/persistent-merkle-tree": "^1.0.1",

packages/flare/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
],
6060
"dependencies": {
6161
"@chainsafe/bls-keygen": "^0.4.0",
62-
"@chainsafe/blst": "^2.2.0",
62+
"@chainsafe/blst": "^2.1.0",
6363
"@lodestar/api": "^1.26.0",
6464
"@lodestar/config": "^1.26.0",
6565
"@lodestar/params": "^1.26.0",

packages/state-transition/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
"types": "lib/index.d.ts",
6060
"dependencies": {
6161
"@chainsafe/as-sha256": "^1.0.0",
62-
"@chainsafe/blst": "^2.2.0",
62+
"@chainsafe/blst": "^2.1.0",
6363
"@chainsafe/persistent-merkle-tree": "^1.0.1",
6464
"@chainsafe/persistent-ts": "^1.0.0",
6565
"@chainsafe/pubkey-index-map": "2.0.0",

packages/test-utils/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
],
5959
"dependencies": {
6060
"@chainsafe/bls-keystore": "^3.1.0",
61-
"@chainsafe/blst": "^2.2.0",
61+
"@chainsafe/blst": "^2.1.0",
6262
"@lodestar/params": "^1.26.0",
6363
"@lodestar/utils": "^1.26.0",
6464
"axios": "^1.3.4",

packages/validator/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@
4545
"blockchain"
4646
],
4747
"dependencies": {
48-
"@chainsafe/blst": "^2.2.0",
48+
"@chainsafe/blst": "^2.1.0",
4949
"@chainsafe/ssz": "^1.0.2",
5050
"@lodestar/api": "^1.26.0",
5151
"@lodestar/config": "^1.26.0",

yarn.lock

+39-39
Original file line numberDiff line numberDiff line change
@@ -491,40 +491,40 @@
491491
"@chainsafe/bls-keygen" "^0.4.0"
492492
bls-eth-wasm "^0.4.8"
493493

494-
"@chainsafe/blst-darwin-arm64@2.2.0":
495-
version "2.2.0"
496-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-arm64/-/blst-darwin-arm64-2.2.0.tgz#0ab9083805c308106c2f2107df1e6376d9190b1b"
497-
integrity sha512-BOOy2KHbV028cioPWaAMqHdLRKd6/3XyEmUEcQC2E/SpyYLdNcaKiBUYIU4pT9CrWBbJJxX68UI+3vZVg0M8/w==
494+
"@chainsafe/blst-darwin-arm64@2.1.0":
495+
version "2.1.0"
496+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-arm64/-/blst-darwin-arm64-2.1.0.tgz#8871d62dc0402df30adbd6f52fbbd02d59f3c5ff"
497+
integrity sha512-7iPRlSbQxEZ2AblmkFLuhnVPUipvA0UenEaUCaLC1MhGFpSwy5bSrF8Krs/E++GN3p2LVz7ZH3tlDfFL0z1EvQ==
498498

499-
"@chainsafe/blst-darwin-x64@2.2.0":
500-
version "2.2.0"
501-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-x64/-/blst-darwin-x64-2.2.0.tgz#231943a7736f3f89d35e03fec890b7809c98ff1a"
502-
integrity sha512-jG64cwIdPT7u/haRrW26tWCpfMfHBQCfGY169mFQifCwO4VEwvaiVBPOh5olFis6LjpcmD+O0jpM8GqrnsmUHQ==
499+
"@chainsafe/blst-darwin-x64@2.1.0":
500+
version "2.1.0"
501+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-darwin-x64/-/blst-darwin-x64-2.1.0.tgz#8fe58d92b72b1b872f8b687a0aad8beda3e09072"
502+
integrity sha512-aeoidOpOYVmRFeHVm1p/Axd6CfqWpr6SIift216/HTDBTiuJCGSJqHzk9RHf7gzkr6WtxO7g/6AtkagZA2VPFg==
503503

504-
"@chainsafe/blst-linux-arm64-gnu@2.2.0":
505-
version "2.2.0"
506-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-gnu/-/blst-linux-arm64-gnu-2.2.0.tgz#721aeec63e8e02aba3358a0084c095403a5438fa"
507-
integrity sha512-L8xV2uuLn8we76vdzfryS9ePdheuZrmY6yArGUFaF1Uzcwml6V1/VvyPl9/uooo/YfVRIrvF/D+lQfI2GFAnhw==
504+
"@chainsafe/blst-linux-arm64-gnu@2.1.0":
505+
version "2.1.0"
506+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-gnu/-/blst-linux-arm64-gnu-2.1.0.tgz#323789a10679cf81813b1e664ef4187a2e941cff"
507+
integrity sha512-d2zgqoJOqkWg2sZbNR7pv8f+oYPOJmnMu46Uulm6NkW3iYNZIc2KkVjBXGYk7xJ+U8ZEzb7KZ7gRB9315sWBcg==
508508

509-
"@chainsafe/blst-linux-arm64-musl@2.2.0":
510-
version "2.2.0"
511-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-musl/-/blst-linux-arm64-musl-2.2.0.tgz#dbbabaab93156548c86e2b2b3a1d27160b715000"
512-
integrity sha512-0Vn0luxLYVgC3lvWT1MapFHSAoz99PldqjhilXTGv0AcAk/X5LXPH2RC9Dp2KJGqthyUkpbk1j47jUBfBI+BIg==
509+
"@chainsafe/blst-linux-arm64-musl@2.1.0":
510+
version "2.1.0"
511+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-arm64-musl/-/blst-linux-arm64-musl-2.1.0.tgz#4a308d6b1f71a57a6ecc6cc0531746f5cd8ae3d0"
512+
integrity sha512-w+KiL8ViLXigZVS++tdCwnMBnbc4HXb8claKOnlCppE1rAeF0Dt186AU2TRpqOop3QoOqckqvsguR9iQwZlTUw==
513513

514-
"@chainsafe/blst-linux-x64-gnu@2.2.0":
515-
version "2.2.0"
516-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-gnu/-/blst-linux-x64-gnu-2.2.0.tgz#9f8ab825621b75227c75bb75d369d3d42e91fa74"
517-
integrity sha512-gEY/z2SDBA7kXtFEI9VNhWTJAIjx16jdeAyCaS2k4ACGurWZaWk+Ee4KniTsr4WieSqeuNTUr7Pdja0Sr4EKNQ==
514+
"@chainsafe/blst-linux-x64-gnu@2.1.0":
515+
version "2.1.0"
516+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-gnu/-/blst-linux-x64-gnu-2.1.0.tgz#c015f9f25aab10bba7720518ba9dc19bb850dcc3"
517+
integrity sha512-2xdOIkkJTvi+/gUoiPQO+p+2o19pixLsH5BOrwxY+EABLL6wxZ82w5LatV3x27YJTk7PbAlyT36n7CjmzaZ/tw==
518518

519-
"@chainsafe/blst-linux-x64-musl@2.2.0":
520-
version "2.2.0"
521-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-musl/-/blst-linux-x64-musl-2.2.0.tgz#11e99ac12b0f83cad68da56f4e9cfc4aa403a2e6"
522-
integrity sha512-58GKtiUmtVSuerRzPEcMNQZpICPboBKFnL7+1Wo+PSuajkvbae7tEFrFTtWeMoKIPgOEsPMnk96LF+0yNgavUg==
519+
"@chainsafe/blst-linux-x64-musl@2.1.0":
520+
version "2.1.0"
521+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-linux-x64-musl/-/blst-linux-x64-musl-2.1.0.tgz#da4ac690cc3b59bc21c4578d30502490c044f7fb"
522+
integrity sha512-/ddO38KkTTgTmXBLAubU1fjUWcQy90sdUi0IoRm5RprdpXvTSGZ1m8XrcxwEYkUO+KpnacOuU0UDwerHMJl4DA==
523523

524-
"@chainsafe/blst-win32-x64-msvc@2.2.0":
525-
version "2.2.0"
526-
resolved "https://registry.yarnpkg.com/@chainsafe/blst-win32-x64-msvc/-/blst-win32-x64-msvc-2.2.0.tgz#f32b164721ff5edc279f6d6cd0fffde0ad2fe16c"
527-
integrity sha512-UFrZshl4dfX5Uh2zeKXAZtrkQ+otczHMON2tsrapQNICWmfHZrzE6pKuBL+9QeGAbgflwpbz7+D5nQRDpiuHxQ==
524+
"@chainsafe/blst-win32-x64-msvc@2.1.0":
525+
version "2.1.0"
526+
resolved "https://registry.yarnpkg.com/@chainsafe/blst-win32-x64-msvc/-/blst-win32-x64-msvc-2.1.0.tgz#edaff899194caa4e40901af90779721673671631"
527+
integrity sha512-wSRVGoLrluus38fmYYS0ft3VSG2EaeeWvb7yxvrAS8xUsaRFRClYo/3kaEHR3D9B9Nu5wiuWfob6DoM3w9deLw==
528528

529529
"@chainsafe/blst@^0.2.0":
530530
version "0.2.11"
@@ -535,18 +535,18 @@
535535
node-fetch "^2.6.1"
536536
node-gyp "^8.4.0"
537537

538-
"@chainsafe/blst@^2.2.0":
539-
version "2.2.0"
540-
resolved "https://registry.yarnpkg.com/@chainsafe/blst/-/blst-2.2.0.tgz#ced8b861b94934e3c1c53e173c3e1205d775d93b"
541-
integrity sha512-VBaQoNE2a9d9+skAjQKv3Suk0yGKqp3mZM0YWYJNPj/Ae/f6lAyeVSgKqo2LrsNQBzD/LqrJLKUY8rJT3vDKLA==
538+
"@chainsafe/blst@^2.1.0":
539+
version "2.1.0"
540+
resolved "https://registry.yarnpkg.com/@chainsafe/blst/-/blst-2.1.0.tgz#1df4fa8e390db5c3cceed673b57468e23b4da36f"
541+
integrity sha512-oY5k4whglgVOkisfujO0s1QgCOp3N/J3GogRbHhuNLrf6KN0zs1C3pKHg66EQhQqWVYnFY2Shx2s71/NFD7y+A==
542542
optionalDependencies:
543-
"@chainsafe/blst-darwin-arm64" "2.2.0"
544-
"@chainsafe/blst-darwin-x64" "2.2.0"
545-
"@chainsafe/blst-linux-arm64-gnu" "2.2.0"
546-
"@chainsafe/blst-linux-arm64-musl" "2.2.0"
547-
"@chainsafe/blst-linux-x64-gnu" "2.2.0"
548-
"@chainsafe/blst-linux-x64-musl" "2.2.0"
549-
"@chainsafe/blst-win32-x64-msvc" "2.2.0"
543+
"@chainsafe/blst-darwin-arm64" "2.1.0"
544+
"@chainsafe/blst-darwin-x64" "2.1.0"
545+
"@chainsafe/blst-linux-arm64-gnu" "2.1.0"
546+
"@chainsafe/blst-linux-arm64-musl" "2.1.0"
547+
"@chainsafe/blst-linux-x64-gnu" "2.1.0"
548+
"@chainsafe/blst-linux-x64-musl" "2.1.0"
549+
"@chainsafe/blst-win32-x64-msvc" "2.1.0"
550550

551551
"@chainsafe/discv5@^9.0.0":
552552
version "9.0.0"

0 commit comments

Comments
 (0)