Hi Andreas, > I don't understand yet though how you would like to integrate a compiled module cache for wasm. What kind of JavaScript code would a user write to access the cache? Would the user just write normal JavaScript code with `new WebAssembly.Module()` and `WebAssembly.compile()`, and we should do a cache lookup in that case? Or would there be explicit commands in the JavaScript code for serialization and deserialization?
While having implicit caching in `WebAssembly.compile()` would be super cool, it is probably not feasible, is it? What should the cache key be? A crypto digest would work, but that's slow. A non-crypto quality hash function would have security implications. Using the whole module as a key would require a database. The next best option is exposing serialisation and deserialisation, so that Node.js could implement a cache-enabled custom API, e.g. loadFromFileAndCompile(path). It would be nice if it was possible to disable Liftoff for a particular Module. Use case: a utility that's not supposed to run long enough, Turbofan burns CPU cycles but never completes. Also: AOT compilation. On Tuesday, 5 January 2021 at 17:14:21 UTC+3 ah...@google.com wrote: > Hi Nick, > > I agree with Clemens that this is definitely an API that we can add to > support your use case, and we don't have it yet because we don't have a > user for it yet. > > I don't understand yet though how you would like to integrate a compiled > module cache for wasm. What kind of JavaScript code would a user write to > access the cache? Would the user just write normal JavaScript code with > `new WebAssembly.Module()` and `WebAssembly.compile()`, and we should do a > cache lookup in that case? Or would there be explicit commands in the > JavaScript code for serialization and deserialization? > > As soon as we understand the use case, we can also work on an API to > support it. > > Cheers, Andreas > > On Tue, Jan 5, 2021 at 1:12 PM Clemens Backes <clem...@chromium.org> > wrote: > >> Yes, compileStreaming is the only API that supports deserialization, >> currently. But it sounds like you are not really doing streaming >> compilation, you just want to implement similar functionality for >> synchronous compilation. In that case, I would propose to extend the V8 API >> to support your use case, instead of using an existing but >> not-quite-fitting API. >> >> Maybe you just need to add two new methods: >> CompiledWasmModule::AddTopTierCompiledCallback and (static) >> CompiledWasmModule::Deserialize. >> Let me know if you need help adding those to V8. I could send you a patch >> for prototyping locally, to figure out if this approach works well for >> Node.js. >> >> On Tue, Jan 5, 2021 at 12:42 PM Nick Zavaritsky <mej...@gmail.com> wrote: >> >>> Hi Clemens, >>> >>> Thank you for the reply. I am reading your response as a confirmation >>> that indeed there is currently no other way to deserialise a WASM module >>> apart from using compileStreaming. >>> >>> I dunno if reviving the API you are referring to is enough. We need to >>> find out if the top-tier compiler has completed before serialising, don't >>> we? >>> >>> CompileStreaming handles that. It would be nice if it was possible to >>> invoke it giving a streaming callback as an argument via a C++ API. >>> >>> On Tuesday, 5 January 2021 at 14:01:08 UTC+3 Clemens Backes wrote: >>> >>>> V8 used to have an API to directly create a Wasm module from serialized >>>> bytes. It was removed in https://crrev.com/c/2033171. We could bring >>>> it back if there is use for it (it would need some tests then, which were >>>> missing before). >>>> >>>> On Thu, Dec 31, 2020 at 11:32 AM Nick Zavaritsky <mej...@gmail.com> >>>> wrote: >>>> >>>>> Forgot to mention that implementing a >>>>> standards-conforming WebAssembly.compileStreaming in Node.js is probably >>>>> not an option. There's no Request in Node.js to start with. The feature >>>>> is >>>>> covering local files only. Hence the proposal introduces a cache-enabled >>>>> loader as a custom api (e.g. require("wasm/cache").loadFile(path) ). >>>>> >>>>> The problem is that there's a single global WasmStreaming callback. >>>>> Hijacking it makes future implementation of the proper >>>>> WebAssembly.compileStreaming unnecessary cumbersome (if it comes to be). >>>>> Even though Node.js itself probably isn't going to need it in foreseeable >>>>> future, Node is often embedded in larger projects (e.g. Electron). >>>>> Barring >>>>> them from having this opportunity makes Node.js maintainers unhappy. >>>>> >>>>> Best, >>>>> N >>>>> >>>>> On Thursday, 31 December 2020 at 13:13:44 UTC+3 Nick Zavaritsky wrote: >>>>> >>>>>> Hi! >>>>>> >>>>>> There's currently no compiled module cache for WASM modules in >>>>>> Node.js. I've started an effort to make one ( >>>>>> https://github.com/nodejs/node/issues/36671). There's a POC already. >>>>>> >>>>>> The POC hijacks WebAssembly.compileStreaming. It uses >>>>>> v8::WasmStreaming::SetCompiledModuleBytes to deserialise a cached >>>>>> module. >>>>>> Please let me know if there's a cleaner approach. >>>>>> >>>>>> Best, >>>>>> N >>>>>> >>>>> -- >>>>> -- >>>>> v8-dev mailing list >>>>> v8-...@googlegroups.com >>>>> http://groups.google.com/group/v8-dev >>>>> --- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "v8-dev" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to v8-dev+un...@googlegroups.com. >>>>> To view this discussion on the web visit >>>>> https://groups.google.com/d/msgid/v8-dev/9c27c1ec-61c7-486c-abb5-138a2d7feac4n%40googlegroups.com >>>>> >>>>> <https://groups.google.com/d/msgid/v8-dev/9c27c1ec-61c7-486c-abb5-138a2d7feac4n%40googlegroups.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> >>>> >>>> -- >>>> >>>> Clemens Backes >>>> >>>> Software Engineer >>>> >>>> clem...@google.com >>>> >>>> Google Germany GmbH >>>> >>>> Erika-Mann-Straße 33 >>>> >>>> 80636 München >>>> >>>> Geschäftsführer: Paul Manicle, Halimah DeLaine Prado >>>> >>>> Registergericht und -nummer: Hamburg, HRB 86891 >>>> >>>> Sitz der Gesellschaft: Hamburg >>>> >>>> Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise >>>> erhalten haben sollten, leiten Sie diese bitte nicht an jemand anderes >>>> weiter, löschen Sie alle Kopien und Anhänge davon und lassen Sie mich >>>> bitte >>>> wissen, dass die E-Mail an die falsche Person gesendet wurde. >>>> >>>> >>>> This e-mail is confidential. If you received this communication by >>>> mistake, please don't forward it to anyone else, please erase all copies >>>> and attachments, and please let me know that it has gone to the wrong >>>> person. >>>> >>>> -- >>> -- >>> v8-dev mailing list >>> v8-...@googlegroups.com >>> http://groups.google.com/group/v8-dev >>> --- >>> You received this message because you are subscribed to the Google >>> Groups "v8-dev" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to v8-dev+un...@googlegroups.com. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/v8-dev/5a2a2777-a5a5-436e-a20c-1aa7e2503376n%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/v8-dev/5a2a2777-a5a5-436e-a20c-1aa7e2503376n%40googlegroups.com?utm_medium=email&utm_source=footer> >>> . >>> >> >> >> -- >> >> Clemens Backes >> >> Software Engineer >> >> clem...@google.com >> >> Google Germany GmbH >> >> Erika-Mann-Straße 33 >> >> 80636 München >> >> Geschäftsführer: Paul Manicle, Halimah DeLaine Prado >> >> Registergericht und -nummer: Hamburg, HRB 86891 >> >> Sitz der Gesellschaft: Hamburg >> >> Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten >> haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, >> löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, >> dass die E-Mail an die falsche Person gesendet wurde. >> >> >> This e-mail is confidential. If you received this communication by >> mistake, please don't forward it to anyone else, please erase all copies >> and attachments, and please let me know that it has gone to the wrong >> person. >> >> -- >> -- >> v8-dev mailing list >> v8-...@googlegroups.com >> http://groups.google.com/group/v8-dev >> --- >> You received this message because you are subscribed to the Google Groups >> "v8-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to v8-dev+un...@googlegroups.com. >> > To view this discussion on the web visit >> https://groups.google.com/d/msgid/v8-dev/CAGO%3DqhDAK8dokJ%3DQvdBLWkuAQv864iqr1gHXyKoqe6v6AE%3Dcrg%40mail.gmail.com >> >> <https://groups.google.com/d/msgid/v8-dev/CAGO%3DqhDAK8dokJ%3DQvdBLWkuAQv864iqr1gHXyKoqe6v6AE%3Dcrg%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > > Andreas Haas > > Software Engineer > > ah...@google.com > > > Google Germany GmbH > > Erika-Mann-Straße 33 > > 80636 München > > > Geschäftsführer: Paul Manicle, Halimah DeLaine Prado > > Registergericht und -nummer: Hamburg, HRB 86891 > > Sitz der Gesellschaft: Hamburg > > > Diese E-Mail ist vertraulich. Falls sie diese fälschlicherweise erhalten > haben sollten, leiten Sie diese bitte nicht an jemand anderes weiter, > löschen Sie alle Kopien und Anhänge davon und lassen Sie mich bitte wissen, > dass die E-Mail an die falsche Person gesendet wurde. > > > > This e-mail is confidential. If you received this communication by > mistake, please don't forward it to anyone else, please erase all copies > and attachments, and please let me know that it has gone to the wrong > person. > > -- -- v8-dev mailing list v8-dev@googlegroups.com http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to v8-dev+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/v8-dev/6f405501-d906-4244-b418-80e12749966en%40googlegroups.com.