# Linux x86_64
wget https://github.com/minio/warp/releases/download/v1.3.0/warp_Linux_x86_64.tar.gz
tar zxvf warp_Linux_x86_64.tar.gz
chmod +x warp
mv warp /usr/local/bin
warp --version
#
kubectl get secret -n tenant1 tenant1-tls -o jsonpath='{.data.public\.crt}' | base64 -d > tenant1.crt
kubectl get secret -n tenant1 tenant1-tls -o jsonpath='{.data.public\.crt}' | base64 -d | openssl x509 -noout -text
...
X509v3 Subject Alternative Name:
DNS:tenant1-pool-0-0.tenant1-hl.tenant1.svc.cluster.local, DNS:minio.tenant1.svc.cluster.local, DNS:minio.tenant1, DNS:minio.tenant1.svc, DNS:*., DNS:*.tenant1.svc.cluster.local
#
cp tenant1.crt /usr/local/share/ca-certificates/tenant1.crt
update-ca-certificates
#
echo "127.0.0.1 minio.tenant1.svc" >> /etc/hosts
#
mc alias set k8s-tenant1 https://minio.tenant1.svc:30002 minio minio123
mc ls --summarize --recursive k8s-tenant1
#
export WARP_ENDPOINT="minio.tenant1.svc:30002"
export WARP_ACCESS_KEY="minio"
export WARP_SECRET_KEY="minio123"
# 신규 터미널1 : 모니터링 disk
iostat nvme1n1 nvme2n1 nvme3n1 nvme4n1 1
iostat nvme1n1 nvme2n1 nvme3n1 nvme4n1 1 -d
iostat nvme1n1 nvme2n1 nvme3n1 nvme4n1 1 -x
iostat nvme1n1 nvme2n1 nvme3n1 nvme4n1 1 -x -d
r/s 초당 읽기 I/O 요청 수 (Read IOPS) 초당 몇 번의 읽기 요청이 발생했는지
rkB/s 읽기 KB/초 초당 읽은 데이터 양
rrqm/s 읽기 merge 요청 수 디바이스에서 merge 된 read 요청 수
%rrqm 읽기 merge 비율 merge된 read 요청의 비율
r_await 읽기 평균 대기 시간(ms) 읽기 요청이 큐에서 대기한 시간 평균
rareq-sz 평균 읽기 요청 크기(kB) I/O 요청당 데이터 크기 평균
w/s 초당 쓰기 I/O 요청 수 (Write IOPS) 초당 쓰기 요청 건수
wkB/s 쓰기 KB/초 초당 기록한 데이터 양
wrqm/s 쓰기 merge 요청 수 디바이스에서 merge 된 write 요청 수
%wrqm 쓰기 merge 비율 merge된 write 요청 비율
w_await 쓰기 평균 대기 시간(ms) write 요청이 큐에서 대기한 평균 시간
wareq-sz 평균 쓰기 요청 크기(kB) I/O 요청당 write 크기 평균
...
f/s 초당 플러시 요청 수 fsync 같은 flush 호출 수
f_await 플러시 평균 대기 시간(ms) flush 요청이 큐에서 대기한 시간
aqu-sz 평균 I/O 큐 깊이 디바이스 큐에 평균 몇 건의 요청이 쌓였는지
%util 디바이스 사용률 디바이스가 바쁜 비율(100%면 완전히 포화)
# 신규 터미널2 : 모니터링 cpu
htop
# 신규 터미널3 : 모니터링 network -> 실행 후 General interface statistics 선택
apt install iptraf-ng -y
iptraf-ng
# 신규 터미널4 : 부하 실행
# 기본 부하 테스트 실행 : mybucket 버킷에 임시 객체들을 업로드하며 성능 측정 :32개의 동시 클라이언트로 1GB 객체 100개 업로드.
# 객체 업로드 실시간 확인 해보자. 해당 버킷에 기본의 객체는 실행 종료 시 삭제됨.
warp put --host $WARP_ENDPOINT \
--access-key $WARP_ACCESS_KEY \
--secret-key $WARP_SECRET_KEY \
--tls \
--obj.size 1MiB \
--duration 2m \
--concurrent 32 \
--bucket mybucket
Reqs: 21625, Errs:0, Objs:21625, Bytes: 21.12GiB
- PUT Average: 180 Obj/s, 180.2MiB/s; Current 187 Obj/s, 187.3MiB/s, 142.8 ms/req
Reqs: 보낸 총 요청 수 (21625건)
Errs: 에러 발생 건수 (0 → 오류 없음)
Objs: 업로드된 객체 수(=요청 수와 같음)
Bytes: 총 업로드된 데이터 용량(21.12GiB)
PUT Average: 평균 업로드 속도
180 Obj/s → 초당 평균 180개의 객체 업로드
180.2MiB/s → 초당 평균 180MiB 데이터 전송
Current: 지금 이 시점의 속도(실시간)
187 Obj/s / 187.3MiB/s
142.8 ms/req: 현재 요청당 평균 지연시간(ms)
Report: PUT. Concurrency: 32. Ran: 1m57s
* Average: 180.23 MiB/s, 180.23 obj/s
* Reqs: Avg: 182.5ms, 50%: 154.9ms, 90%: 311.0ms, 99%: 423.4ms, Fastest: 37.0ms, Slowest: 598.0ms, StdDev: 85.6ms
PUT: PUT(업로드) 테스트
Concurrency: 32: 동시에 32개의 병렬 스레드(커넥션)로 업로드
Ran: 1m57s: 전체 테스트 1분57초 동안 실행
Average: 전체 테스트 동안 평균 전송속도
180.23 MiB/s / 180.23 obj/s
Reqs (latency): 요청 지연 시간 통계
Avg: 182.5ms → 요청 평균 처리시간
50%: 154.9ms → 중간값(절반의 요청이 155ms 이내)
90%: 311.0ms → 90%가 311ms 이내
99%: 423.4ms → 99%가 423ms 이내
Fastest: 37.0ms / Slowest: 598.0ms
StdDev: 85.6ms → 응답 시간 분산 정도
Throughput, split into 117 x 1s:
* Fastest: 296.6MiB/s, 296.65 obj/s
* 50% Median: 176.8MiB/s, 176.78 obj/s
* Slowest: 100.2MiB/s, 100.17 obj/s
테스트 전체를 1초 단위로 쪼개서, 각 초마다의 처리량을 계산
Fastest: 가장 높은 처리량을 보인 구간(296MiB/s)
50% Median: 중앙값 구간(176MiB/s)
Slowest: 가장 낮았던 구간(100MiB/s)
# GET 테스트 + 병렬 : 동시에 32개의 워커(thread)로 GET 요청 , 병렬 처리로 최대 throughput 측정 가능
# --autoterm 시간절약을 위해 변화가 어느정도 안정되면 자동으로 종료.
warp get --host $WARP_ENDPOINT \
--access-key $WARP_ACCESS_KEY \
--secret-key $WARP_SECRET_KEY \
--tls \
--obj.size 1MiB \
--duration 2m \
--concurrent 32 \
--bucket mybucket # --autoterm
# 평균 다운로드 속도: 약 498 MiB/s, 초당 객체 수 약 498개
Reqs: 8402, Errs:0, Objs:8402, Bytes: 8402.0MiB
- GET Average: 499 Obj/s, 499.2MiB/s; Current 515 Obj/s, 515.2MiB/s, 65.8 ms/req, TTFB: 41.5ms
Reqs: 8402 총 GET 요청 수
Errs: 0 오류 발생 건수 (0 → 모든 요청 성공)
Objs: 8402 다운로드된 객체 수
Bytes: 8402.0MiB 총 다운로드 데이터 용량
GET Average 평균 전송 속도
499 Obj/s 초당 객체 수
499.2 MiB/s 초당 데이터 전송량
Current 최근 측정 시점의 실시간 속도
515 Obj/s, 515.2MiB/s 현재 초당 객체/데이터 속도
65.8 ms/req 요청당 평균 지연 시간
TTFB: 41.5ms Time To First Byte, 서버에서 첫 바이트를 받기까지 평균 시간
Throughput 540202802.0MiB/s within 7.500000% for 7s. Assuming stability. Terminating benchmark.
Report: GET. Concurrency: 32. Ran: 15s
* Average: 498.48 MiB/s, 498.48 obj/s
* Reqs: Avg: 64.8ms, 50%: 61.2ms, 90%: 101.5ms, 99%: 146.8ms, Fastest: 4.5ms, Slowest: 262.5ms, StdDev: 28.2ms
* TTFB: Avg: 40ms, Best: 1ms, 25th: 27ms, Median: 38ms, 75th: 50ms, 90th: 64ms, 99th: 105ms, Worst: 223ms StdDev: 20ms
Latency 통계 (요청 지연 시간)
Avg: 64.8ms → 전체 요청 평균 지연
50%: 61.2ms → 절반의 요청은 61.2ms 이내 처리
90%: 101.5ms, 99%: 146.8ms → 상위 퍼센타일 지연 시간
Fastest: 4.5ms, Slowest: 262.5ms → 가장 빠르고 느린 요청
StdDev: 28.2ms → 지연 시간 분산
TTFB(Time To First Byte)
평균 40ms → 서버가 첫 바이트를 응답하기까지 걸린 시간
Best: 1ms, Worst: 223ms
퍼센타일 통계도 제공 (25th/50th/75th/90th/99th)
TTFB가 낮으면 서버 응답이 빠르고, 네트워크가 병목이 아님을 의미
Throughput, split into 15 x 1s:
* Fastest: 568.4MiB/s, 568.37 obj/s
* 50% Median: 497.1MiB/s, 497.08 obj/s
* Slowest: 428.3MiB/s, 428.27 obj/s
테스트 전체를 1초 단위로 나누어 초당 처리량 계산
Fastest / Median / Slowest로 속도 변동 확인 가능
예시: 한 구간에서는 568MiB/s, 다른 구간은 428MiB/s → 변동폭 존재