Maybe I’m missing something, but the code in the repo seems to do more than that. If I simplify that top-level plug, to just return 204:
defmodule Icepick.PlugRouter do
import Plug.Conn
def init(options) do
options
end
def call(conn, _opts) do
conn
|> send_resp(204, [])
end
def start_link() do
{:ok, _} = Plug.Adapters.Cowboy.http(
__MODULE__,
[],
[port: 8000])
end
end
I get the following on my dev machine:
$ wrk -c 100 -d 60 -t 2 -s wrk.lua http://localhost:8000/supply-partners/mopub
Running 1m test @ http://localhost:8000/supply-partners/mopub
2 threads and 100 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 26.40ms 79.89ms 291.43ms 91.53%
Req/Sec 22.38k 8.47k 46.78k 79.63%
2510775 requests in 1.00m, 362.02MB read
Requests/sec: 41846.51
The latency here is still unusually large, but at least the throughput is way better (originally it was below 20k/sec).
Recently I demoed a simple Phoenix app which did some parameter decoding and json encoding (so a bit more work than this simple example), and I got a sub-micromillisecond 99th percentile latency with a wrk test (this same machine), so I’m pretty certain there’s room for improvements here.


















