Open3

WasmLinux: Emscritptenのstd::counting_semaphoreがバカみてぇに遅いしdevtoolsを開くと速くなる

okuokuokuoku

これは辛い。。

devtoolsで影響されるということは、JITC、GC、タイマあたりと考えられる。というわけで、早くなってても良いからプロファイルを取る。

okuokuokuoku

トレースを取る

とりあえず早い状態でプロファイルを取る:

超みづれぇ。。

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の精度が上がるのではないだろうか。。?