/plushcap/analysis/ably/beam-optimization-mqtt

Adventures in BEAM optimization with our MQTT adapter

What's this blog post about?

The author shares their experience of optimizing Elixir code for an MQTT protocol adapter, only to discover that the true solution to performance issues was an obscure setting in the Erlang VM controlling which system call the IO polling subsystem used. They initially spent time profiling and optimizing the code but found that the majority of CPU usage was due to SLEEP calls, which they later realized were a measurement artifact. After disabling masking for WebSocket pings and adding special cases for MQTT pings, they continued to see high CPU usage. They eventually discovered that enabling +K true in the Erlang runtime significantly reduced CPU usage by switching from poll to epoll system call for IO polling. The author's micro-optimizations were ultimately irrelevant as the majority of CPU cycles were spent on IO polling.

Company
Ably

Date published
July 17, 2020

Author(s)
Simon Woolf

Word count
1724

Hacker News points
None found.

Language
English


By Matt Makai. 2021-2024.