Open3
WasmLinux: Emscritptenのstd::counting_semaphoreがバカみてぇに遅いしdevtoolsを開くと速くなる
これは辛い。。
devtoolsで影響されるということは、JITC、GC、タイマあたりと考えられる。というわけで、早くなってても良いからプロファイルを取る。
トレースを取る
とりあえず早い状態でプロファイルを取る:
超みづれぇ。。
emscripten_thread_sleep
__clock_nanosleep
nanosleep
std::__2::__libcpp_thread_sleep_for[abi:ue170004](std::__2::chrono::duration<long long, std::__2::ratio<1ll, 1000000000ll>> const&)
std::__2::__libcpp_timed_backoff_policy::operator()[abi:ue170004](std::__2::chrono::duration<long long, std::__2::ratio<1ll, 1000000000ll>>) const
bool std::__2::__libcpp_thread_poll_with_backoff[abi:ue170004]<std::__2::__libcpp_platform_wait_on_address(std::__2::__cxx_atomic_impl<long long, std::__2::__cxx_atomic_base_impl<long long>> const volatile*, long long)::$_0, std::__2::__libcpp_timed_backoff_policy>(std::__2::__libcpp_platform_wait_on_address(std::__2::__cxx_atomic_impl<long long, std::__2::__cxx_atomic_base_impl<long long>> const volatile*, long long)::$_0&&, std::__2::__libcpp_timed_backoff_policy&&, std::__2::chrono::duration<long long, std::__2::ratio<1ll, 1000000000ll>>)
std::__2::__libcpp_platform_wait_on_address(std::__2::__cxx_atomic_impl<long long, std::__2::__cxx_atomic_base_impl<long long>> const volatile*, long long)
std::__2::__libcpp_contention_wait(std::__2::__cxx_atomic_impl<long long, std::__2::__cxx_atomic_base_impl<long long>> volatile*, std::__2::__cxx_atomic_impl<long long, std::__2::__cxx_atomic_base_impl<long long>> const volatile*, long long)
std::__2::__libcpp_atomic_wait(void const volatile*, long long)
bool std::__2::__libcpp_thread_poll_with_backoff[abi:ue170004]<std::__2::__atomic_semaphore_base::acquire[abi:ue170004]()::'lambda'() const&, std::__2::__libcpp_atomic_wait_backoff_impl<std::__2::__cxx_atomic_impl<long, std::__2::__cxx_atomic_base_impl<long>>, std::__2::__atomic_semaphore_base::acquire[abi:ue170004]()::'lambda'()>&>(std::__2::__atomic_semaphore_base::acquire[abi:ue170004]()::'lambda'() const&, std::__2::__libcpp_atomic_wait_backoff_impl<std::__2::__cxx_atomic_impl<long, std::__2::__cxx_atomic_base_impl<long>>, std::__2::__atomic_semaphore_base::acquire[abi:ue170004]()::'lambda'()>&, std::__2::chrono::duration<long long, std::__2::ratio<1ll, 1000000000ll>>)
w2c_env_nccc_call64
w2c_kernel_host_sem_down
こういう感じで、LKLのリクエストである sem_down
が何故か __libcpp_thread_sleep_for
とsleepに至っている。devtoolsを開くと、ここのsleepの精度が上がるのではないだろうか。。?
POSIX semaphoreに切り替えた
これで常識的な速度になった。。ついでに、wasm2cのbound checkを省略するチートを導入している。これによりWasmバイナリは20MiBを切るくらいのサイズになり、Cloudflare pagesに置ける規模になった。