hauleth

hauleth

I have recently spent some time optimising the hell out of my fork of Supabase’s Supavisor. I wanted to make it as fast as possible to compare it against “state of the art” and “native” solutions like PgBouncer and PgDog.

I haven’t achieved comparable performance, but I think that the read may be interesting to some people out there.

Showing Posts 1 to 3

rkallos

rkallos

Nice post! And thank you for the shout-out, and your many contributions to Peep :slight_smile:

I think your post is currently missing the links to Ultravisor and Speedoscope.

This project now lives as [Ultravisor][]
[…]
That has disadvantages, but at least it was workable within [Speedoscope][]

Aside: Did you happen to explore using Linux’s perf(1) for less-obtrusive tracing? It’s a bit clunky to use (or maybe I haven’t found a better way of wielding it), but I find it super helpful, especially since the BEAM emits perf maps for jitted functions. When I was spending a lot of time trying to optimize stuff, which runs in a Docker container in prod, I repeatedly ran perf(1), and generated flame graphs (using GitHub - brendangregg/FlameGraph: Stack trace visualizer · GitHub ) like so:

# copy perf map out of Docker container, making it visible to perf running on the host.
sudo docker cp container:/tmp/perf-6.map /tmp/perf-2969015.map
sudo perf record --call-graph=fp --pid 2969015 -- sleep 10
sudo perf script > out.perf
sudo chown richard:richard out.perf
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
# strip [0-9]+_ and/or _[0-9]+ from all scheduler names
sed -e 's/^[0-9]\+_//' -e 's/^erts_\([^_]\+\)_[0-9]\+/erts_\1/' out.folded > out.folded_sched
./FlameGraph/flamegraph.pl out.folded_sched > out_sched.svg

These flame graphs weren’t totally complete (i.e. they missed stuff from NIFs compiled in the container without debug symbols), but it was nice to get a mix of BEAM and native code in a single flame graph.

hauleth

hauleth OP

Yes, I dod. That required a little bit of twiddling to get it right, but I have managed to run it in OrbStack, as unfortunately +JPperf true do not work on macOS with Instruments.app.

dimitarvp

dimitarvp

This was an enjoyable read, thank you. I’ll try using Peep soon as a result.

— All posts loaded —

Where Next? Top

Trending in Blog Posts Top

rhcarvalho
At the heart of every Phoenix application is the often “invisible” HTTP server layer. For over a decade Cowboy has served the community ...
New
pckrishnadas88
Hey everyone! :waving_hand: I’ve published Part 7 of the Building Distributed Systems in Elixir series, where we build core distributed ...
New
mudasobwa
So, instead of wasting my afternoon arguing with anonymous handles on X, I turned to my trusty, soulless assistant and said: “Listen, ple...
New
pckrishnadas88
I’ve published Part 4 of my Elixir distributed systems learning series. This part explores process linking using low-level primitives di...
New
abreujp
New article: Elixir Project Structure — From mix new to a Growing Codebase I’ve published a new article in my Elixir learning series on d...
New
zorn
An educational side project in Elixir, Phoenix, and Tauri. I share what I learned while wiring Automerge into the BEAM, including how I s...
New
jola
The way Phoenix is set up adding a CDN sub-domain for serving static assets, without worrying about the main dynamic content, is incredib...
New

Other Trending Topics Top

mudasobwa
I am happy to introduce the very α version of the new programming language compiled to BEAM. Welcome Cure. It has literally three kille...
New
garrison
Hobbes is a low-level distributed database for the Elixir programming language. Hobbes provides a simple, safe, and scalable storage lay...
New
marciok
Hi there! We created Gust: A task orchestrator inspired by Airflow. For those who have never heard about Aiflow, it’s a Python-based wor...
New
jimsynz
Beam Bots (or just BB for short) is a framework for building fault-tolerant robotics applications in Elixir using familiar OTP patterns. ...
New
Dmk
Xamal is a deployment tool for Elixir apps that deploys native releases to bare metal servers over SSH. It’s a port of GitHub - basecamp/...
New
Damirados
Hello everyone. After busy few months I am happy to announce v0.1.0 of Emerge & Solve. They are GUI (Emerge) and State management (S...
New

We're in Beta

About us Mission Statement

Options

Thread Display Mode




Thread Preview

Skip Thread Previews