node icon indicating copy to clipboard operation
node copied to clipboard

[v18.x] backport startup performance patches

Open joyeecheung opened this issue 2 years ago • 9 comments

This is a backport of https://github.com/nodejs/node/pull/45659 and https://github.com/nodejs/node/pull/45849, the first two commits are specifically added for v18.x with the second one taken from https://github.com/nodejs/node/pull/44483.

Refs: https://github.com/nodejs/node/pull/46425

joyeecheung avatar Jan 30 '23 16:01 joyeecheung

Review requested:

  • [ ] @nodejs/loaders
  • [ ] @nodejs/modules
  • [ ] @nodejs/net
  • [ ] @nodejs/startup

nodejs-github-bot avatar Jan 30 '23 16:01 nodejs-github-bot

CI: https://ci.nodejs.org/job/node-test-pull-request/49253/

nodejs-github-bot avatar Jan 30 '23 16:01 nodejs-github-bot

CI: https://ci.nodejs.org/job/node-test-pull-request/49281/

nodejs-github-bot avatar Jan 31 '23 15:01 nodejs-github-bot

CI: https://ci.nodejs.org/job/node-test-pull-request/49282/

nodejs-github-bot avatar Jan 31 '23 15:01 nodejs-github-bot

CI: https://ci.nodejs.org/job/node-test-pull-request/49415/

nodejs-github-bot avatar Feb 05 '23 23:02 nodejs-github-bot

I cannot reproduce the snapshot test failures locally on similar platforms. It could be a flake, or maybe something wasn't backported properly for v18.x. Will need to wait until the CI is unlocked to do a bit more runs to find out.

joyeecheung avatar Feb 09 '23 15:02 joyeecheung

I would love to land this in the v18.15.0 release <3, I was going to kick a CI for this but it needs a rebase first.

juanarbol avatar Feb 23 '23 23:02 juanarbol

@joyeecheung It looks like this needs a rebase

danielleadams avatar Apr 02 '23 21:04 danielleadams

Hi! What is the expected performance gain in startup with this PR?

krk avatar Apr 26 '23 12:04 krk

hi @joyeecheung this PR needs rebasing in case we want to land it in v18.x

ruyadorno avatar Aug 16 '23 15:08 ruyadorno

I took the time to rebase and adapt this.

targos avatar Oct 28 '23 12:10 targos

CI: https://ci.nodejs.org/job/node-test-pull-request/55284/

nodejs-github-bot avatar Oct 28 '23 12:10 nodejs-github-bot

@joyeecheung parallel/test-snapshot-gzip fails when built with --shared. Any idea?

targos avatar Oct 28 '23 13:10 targos

I'd really like to see this land. It's making it difficult to backport other changes.

targos avatar Nov 01 '23 08:11 targos

I'm on the test machine to investigate. The test is actually flaky. It fails ~5% of the runs

targos avatar Nov 04 '23 09:11 targos

oops I missed the pings. It seems similar to what I was seeing in https://github.com/nodejs/node/pull/46425#issuecomment-1424358745 will need some stack trace to figure out what is going on

joyeecheung avatar Nov 04 '23 09:11 joyeecheung

It segfaults:

$ NODE_TEST_MODE=verify NODE_TEST_FIXTURE=/home/iojs/build/workspace/node-test-commit-linux-containered/test/fixtures/person.jpg.gz out/Release/node --snapshot-blob=/home/iojs/tmp/.tmp.6/snapshot.blob test/fixtures/snapshot/decompress-gzip-sync.js
Segmentation fault (core dumped)

I'm installing gdb to get a stack trace.

targos avatar Nov 04 '23 10:11 targos

Here's the full stack trace:

(gdb) bt
#0  0x000055cd8d06a589 in v8::internal::Deserializer<v8::internal::Isolate>::PostProcessNewJSReceiver(v8::internal::Map, v8::internal::Handle<v8::internal::JSReceiver>, v8::internal::JSReceiver, v8::internal::InstanceType, v8::internal::SnapshotSpace) ()
#1  0x000055cd8d06aaa1 in v8::internal::Deserializer<v8::internal::Isolate>::PostProcessNewObject(v8::internal::Handle<v8::internal::Map>, v8::internal::Handle<v8::internal::HeapObject>, v8::internal::SnapshotSpace) ()
#2  0x000055cd8d06dd77 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#3  0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#4  0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#5  0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#6  0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#7  0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#8  0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#9  0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#10 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#11 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#12 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#13 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#14 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#15 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#16 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#17 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#18 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#19 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#20 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#21 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#22 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#23 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#24 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#25 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#26 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
---Type <return> to continue, or q <return> to quit---
#27 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#28 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#29 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#30 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#31 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#32 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#33 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#34 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#35 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#36 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#37 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#38 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#39 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#40 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#41 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#42 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#43 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#44 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#45 0x000055cd8d06c159 in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHandle<v8::internal::Isolate> >(unsigned char, v8::internal::SlotAccessorForHandle<v8::internal::Isolate>) ()
#46 0x000055cd8d06c790 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject() ()
#47 0x000055cd8d06dcad in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#48 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#49 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#50 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#51 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#52 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#53 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#54 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsig---Type <return> to continue, or q <return> to quit---
ned char, v8::internal::SlotAccessorForHeapObject) ()
#55 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#56 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#57 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#58 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#59 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#60 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#61 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#62 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#63 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#64 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#65 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#66 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#67 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#68 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#69 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#70 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#71 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#72 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#73 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#74 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#75 0x000055cd8d06c159 in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHandle<v8::internal::Isolate> >(unsigned char, v8::internal::SlotAccessorForHandle<v8::internal::Isolate>) ()
#76 0x000055cd8d06c790 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject() ()
#77 0x000055cd8d06dcad in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#78 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#79 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#80 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#81 0x000055cd8d06c159 in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHandle<v8::internal::Isolate> >(unsigned char, v8::internal::SlotAccessorForHandle<v8::internal::Isolate>) ()
---Type <return> to continue, or q <return> to quit---
#82 0x000055cd8d06c790 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject() ()
#83 0x000055cd8d06dcad in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#84 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#85 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#86 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#87 0x000055cd8d06c159 in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHandle<v8::internal::Isolate> >(unsigned char, v8::internal::SlotAccessorForHandle<v8::internal::Isolate>) ()
#88 0x000055cd8d06c790 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject() ()
#89 0x000055cd8d06dcad in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#90 0x000055cd8d06d0be in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHeapObject>(unsigned char, v8::internal::SlotAccessorForHeapObject) ()
#91 0x000055cd8d06dbe1 in v8::internal::Deserializer<v8::internal::Isolate>::ReadData(v8::internal::Handle<v8::internal::HeapObject>, int, int) ()
#92 0x000055cd8d06dd64 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject(v8::internal::SnapshotSpace) ()
#93 0x000055cd8d06c159 in int v8::internal::Deserializer<v8::internal::Isolate>::ReadSingleBytecodeData<v8::internal::SlotAccessorForHandle<v8::internal::Isolate> >(unsigned char, v8::internal::SlotAccessorForHandle<v8::internal::Isolate>) ()
#94 0x000055cd8d06c790 in v8::internal::Deserializer<v8::internal::Isolate>::ReadObject() ()
#95 0x000055cd8d065dbb in v8::internal::ContextDeserializer::Deserialize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGlobalProxy>, v8::DeserializeInternalFieldsCallback) ()
#96 0x000055cd8d065f5f in v8::internal::ContextDeserializer::DeserializeContext(v8::internal::Isolate*, v8::internal::SnapshotData const*, bool, v8::internal::Handle<v8::internal::JSGlobalProxy>, v8::DeserializeInternalFieldsCallback) ()
#97 0x000055cd8d094def in v8::internal::Snapshot::NewContextFromSnapshot(v8::internal::Isolate*, v8::internal::Handle<v8::internal::JSGlobalProxy>, unsigned long, v8::DeserializeInternalFieldsCallback) ()
#98 0x000055cd8cd4125b in v8::internal::Genesis::Genesis(v8::internal::Isolate*, v8::internal::MaybeHandle<v8::internal::JSGlobalProxy>, v8::Local<v8::ObjectTemplate>, unsigned long, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*) ()
#99 0x000055cd8cd42128 in v8::internal::Bootstrapper::CreateEnvironment(v8::internal::MaybeHandle<v8::internal::JSGlobalProxy>, v8::Local<v8::ObjectTemplate>, v8::ExtensionConfiguration*, unsigned long, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*) ()
#100 0x000055cd8ca7faf6 in v8::NewContext(v8::Isolate*, v8::ExtensionConfiguration*, v8::MaybeLocal<v8::ObjectTemplate>, v8::MaybeLocal<v8::Value>, unsigned long, v8::DeserializeInternalFieldsCallback, v8::MicrotaskQueue*) ()
#101 0x000055cd8ca7ff39 in v8::Context::FromSnapshot(v8::Isolate*, unsigned long, v8::DeserializeInternalFieldsCallback, v8::ExtensionConfiguration*, v8::MaybeLocal<v8::Value>, v8::MicrotaskQueue*) ()
#102 0x000055cd8c8bc685 in node::NodeMainInstance::CreateMainEnvironment(int*) ()
#103 0x000055cd8c8bc965 in node::NodeMainInstance::Run() ()
#104 0x000055cd8c82a777 in node::LoadSnapshotDataAndRun(node::SnapshotData const**, node::InitializationResult const*) ()
#105 0x000055cd8c82e607 in node::Start(int, char**) ()
#106 0x00007f9c9d615c87 in __libc_start_main (main=0x55cd8c79e020 <main>, argc=3, argv=0x7ffe54a0a3b8, init=<optimized out>, fini=<optimized out>,
    rtld_fini=<optimized out>, stack_end=0x7ffe54a0a3a8) at ../csu/libc-start.c:310
---Type <return> to continue, or q <return> to quit---
#107 0x000055cd8c7a5daa in _start ()

targos avatar Nov 04 '23 10:11 targos

I think this needs some more in-depth debugging into the actual memory situation to figure out what's happening. In the mean time backporting https://chromium-review.googlesource.com/c/v8/v8/+/3793525 might make a difference

joyeecheung avatar Nov 04 '23 11:11 joyeecheung

I could reproduce locally with --shared with ~1% chances. This happens when deserializing the backing store of a typed array - I am fairly certain that https://chromium-review.googlesource.com/c/v8/v8/+/3813068 should fix it, but I haven't checked locally

joyeecheung avatar Nov 07 '23 23:11 joyeecheung

I did a manual patching of https://chromium-review.googlesource.com/c/v8/v8/+/3813068 locally and the crash went away.

joyeecheung avatar Nov 07 '23 23:11 joyeecheung

Amazing!

targos avatar Nov 08 '23 08:11 targos

Cherry-picked the change.

targos avatar Nov 08 '23 08:11 targos

CI: https://ci.nodejs.org/job/node-test-pull-request/55492/

nodejs-github-bot avatar Nov 08 '23 08:11 nodejs-github-bot

V8 CI: https://ci.nodejs.org/job/node-test-commit-v8-linux/5653/

targos avatar Nov 08 '23 12:11 targos

@joyeecheung (or anyone else) want to review that latest state?

targos avatar Nov 08 '23 12:11 targos

Rubber stamp LGTM - I just realized that we have no --shared options in the stress test API, so we can probably only count on the main CI

joyeecheung avatar Nov 08 '23 17:11 joyeecheung

Landed in 5f852cc9fe10...23069c34b261

targos avatar Nov 10 '23 08:11 targos