TAKE YOUR TIME
BEN MARX
@bgmarx
ARCHITECT
AdoptingElixir_Workshop_2018
25% off til 9/15
HOW
SCHEDULERS
WORK
NIFS
BRIEFLY
DIRTY
SCHEDULERS
RUST
NIFS OR NAY?
SCHEDULERS
PREEMPTIVE
RUN QUEUE
MIGRATION
LOGIC
RUN QUEUE 2SCHEDULER 2
RUN QUEUE NSCHEDULER N
RUN QUEUE 1SCHEDULER1
MIGRATION LOGIC
FINELY
TUNED
1MS
SCHEDULER
COLLAPSE
SCHEDULERS
NIFS
NATIVELY
IMPLEMENTED
FUNCTIONS
WRITTEN IN C
NIFS
DIRTY
SCHEDULERS
“Due to heroic efforts by Steve Vinoski, Rickard Green, and
Sverker Eriksson, we have an (experimental) so-called
dirty-scheduler (DS) NIF API in the Erlang runtime, which
has been somewhat stable since release 17.3.”
https://medium.com/@jlouis666/erlang-dirty-scheduler-overhead-6e1219dcc7
IO INTENSIVE
OR
CPU INTENSIVE
DIRTY NIF FLAGS
ERL_NIF_DIRTY_JOB_CPU_BOUND
ERL_NIF_DIRTY_JOB_IO_BOUND
http://erlang.org/doc/man/erl_nif.html
RUN QUEUE CPUDIRTY CPU
RUN QUEUE NSCHEDULER N
RUN QUEUE IODIRTY IO
MIGRATION LOGIC
DIRTY SCHEDULERS
ARE
UNMANAGED
https://github.com/erlang/otp/blob/maint/erts/emulator/internal_doc/ThreadProgress.md
DIRTY SCHEDULERS
AREN’T
FREE
RE-SCHEDULE DIRTY
http://erlang.org/doc/man/erl_nif.html#enif_schedule_nif
ENIF_SCHEDULE _NIF
DIRTY TO “CLEAN”
LONG SCHEDULING
http://erlang.org/doc/man/erlang.html#system_monitor-2
erlang:system_monitor(Pid, [{long_schedule,Time}])
DIRTY
SCHEDULERS
RUST
MEMORY SAFE
FOND OF
DIALYZER?
BLAZINGLY
FAST
THREAD
SAFETY
“SAFE C”
SYSTEMS
PROGRAMMING
https://mgattozzi.com/avoiding-logic-errors
RUSTLER
https://github.com/hansihe/rustler/
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler/src/schedule.rs
UNSAFE
DIRTY
FUNCTIONS
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler_tests/src/test_dirty.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler_tests/src/lib.rs
https://github.com/hansihe/rustler/blob/b6578ea3999fd42f377c2497d8fae0bd629b927d/rustler_tests/test/dirty_test.exs
RUST
NIFS OR NAY?
SERVICES
CRITICAL
LINKS
https://bgmarx.com/2018/08/01/getting-started-with-rustler/
https://bgmarx.com/2018/08/15/using-dirty-
schedulers-with-rustler/
THANK YOU
@BGMARX
IMAGE CREDITS
https://wallpaper-gallery.net/single/vaporwave-background-hd-14.html
http://www.desktopimages.org/preview/770453/1920/1080/
https://www.wallpapervortex.com/
wallpaper-52083_1_miscellaneous_digital_art_vaporwave_image_glitch.html
https://www.deviantart.com/epix0r/art/R-o-a-d-W-a-y-1920-x-1080-HD-629299503
https://wallpaper-gallery.net/single/glitch-wallpaper-hd-11.html
THANK YOU
@BGMARX
RESOURCEShttp://hansihe.com/erlang/elixir/c/2016/07/26/erlang-nif-preemptive-scheduling.html
https://medium.com/@jlouis666/erlang-dirty-scheduler-overhead-6e1219dcc7
http://erlang.org/doc/man/erl_nif.html
https://www.youtube.com/watch?v=FYQcn9zcZVA
https://www.youtube.com/watch?v=lSLTwWqTbKQ
https://hamidreza-s.github.io/erlang/scheduling/real-time/preemptive/migration/2016/02/09/erlang-scheduler-
details.html
https://jlouisramblings.blogspot.com/2013/01/how-erlang-does-scheduling.html
https://www.rust-lang.org/en-US/
http://www.erlang-factory.com/upload/presentations/105/KennethLundin-ErlangFactory2009London-
AboutErlangOTPandMulti-coreperformanceinparticular.pdf
https://github.com/vinoski/bitwise
THANK YOU
@BGMARX
QUESTIONS?
@bgmarx

Take Your Time