結論
muslを使用するのをやめた
経緯
- DockerfileでVersionを指定せず、
FROM rust:slim-bullseye
の形でmusl build - 負荷テストで問題なかったのでリリース
- この間にRustのバージョンが上がる
- 機能追加して再リリース
- latency悪化に気づく
- latencyが許容範囲だったRustVersion 1.70.0に固定
どのくらい悪化したか
BuildするRustのVersionのみを変更してGatlingで負荷テストを行った。version1.71から悪化し始める。1.74.1は2023/12/12時点の最新Version。
RustVersion | 99th ptc | Max |
---|---|---|
1.70.0 | 23ms | 92ms |
1.71.0 | 25ms | 117ms |
1.74.1 | 32ms | 327ms |
latency悪化の原因
musl
が原因。
Why does musl make my Rust code so slow?
この記事を見て、バイナリを配布する事はなくmusl
にこだわる必要もないので、使用しないことにした。
改修前後のBuild部分Dockerfile
改修前:
FROM rust:1.70.0-slim-buster as builder
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential \
musl-tools \
perl
RUN rustup target add x86_64-unknown-linux-musl
RUN cargo build --release --target x86_64-unknown-linux-musl
改修後:
FROM rust:slim-bullseye as builder
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential
RUN cargo build --release
latencyの変化
gnuにするとlatencyは想定した値に戻った。
RustVersion | 99th ptc | Max |
---|---|---|
1.70.0(musl) | 23ms | 92ms |
1.71.0(musl) | 25ms | 117ms |
1.74.1(musl) | 32ms | 327ms |
1.71.0(gnu) | 18ms | 83ms |
1.74.1(gnu) | 17ms | 73ms |
教訓
当たり前だが、環境が更新されたらパフォーマンステストしよう。