LoginSignup
5
0

RustのVersionを固定せずにいたらAPIのlatencyが悪化していた話

Last updated at Posted at 2023-12-17

結論

muslを使用するのをやめた

経緯

  1. DockerfileでVersionを指定せず、FROM rust:slim-bullseyeの形でmusl build
  2. 負荷テストで問題なかったのでリリース
  3. この間にRustのバージョンが上がる
  4. 機能追加して再リリース
  5. latency悪化に気づく
  6. 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

教訓

当たり前だが、環境が更新されたらパフォーマンステストしよう。

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0