You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
We are working on a I/O heavy application. Previously with OTP 21.2(erts-10.2), we disable busy waiting of dirty I/O scheduler by "+sbwtdio none". Recently we upgraded to OTP22.07(erts-10.4.4), we see way too much CPU usage with same "+sbwtdio none".
I did some CPU profiling by Linux perf. It seems wake_dirty_scheduler in erl_process.c is the one who consumes most of cpu cycles. It is busy with a spinlock. Is that a known issue in OTP 22 that "+sbwtdio none" is broken?
BTW - if I switch to "+sbwtdio short"(default option), CPU usage is back to normal level.
The text was updated successfully, but these errors were encountered:
Spinlocks are notoriously bad when they get highly contended. I pushed a branch {{rickard/dirty-sleepers-contention}} (based on OTP-22.1.7) to my [github repo|https://github.com/rickard-green/otp] which replace the usage of spinlocks with mutexes for this. The contention is still there, but it should behave much better. Please try and get back with the result.
I really would like to rewrite how dirty schedulers sleep and are woken, but haven't got time for that right now. Have put it on the todo-list though.
Original reporter:
huiliu
Affected version:
OTP-22.0
Fixed in version:
OTP-22.1.8
Component:
erts
Migrated from: https://bugs.erlang.org/browse/ERL-1079
The text was updated successfully, but these errors were encountered: