1. 단일 MinIO 노드 구성
간략 구성
[Worker Node #1] - MinIO Node
[Worker Node #2] - WARP Client
warp get script
/warp put \
--host minio-svc:9000 \
--access-key minioadmin --secret-key minioadmin \
--bucket bench --obj.size 4MiB \
--concurrent 8 --duration 60s \
--prefix prefill --noclear --noprefix
Bash
복사
for c in 4 8 16 32 64; do
echo "### GET concurrency $c ###"
/warp get \
--host minio-svc:9000 \
--access-key minioadmin --secret-key minioadmin \
--bucket bench \
--prefix prefill \
--noprefix \
--list-existing \
--objects 1000 \
--concurrent $c --duration 60s
echo "Sleeping 30s before next run..."
sleep 30
done
Bash
복사
•
warp put으로 대상 버킷 및 객체 미리 생성
•
이후 MinIO Warp를 이용해서 동시성(concurrency)별 GETT 성능 테스트를 자동으로 실행하는 스크립트
•
벤치마크용 버킷: bench
•
대상 버킷 프리픽스 고정 (업로드 대상)
•
동시성 (멀티 쓰레드): 4, 8, 16, 32, 64
•
벤치마크 실행 시간: 60초
•
사이클이 끝날 때 GET Object는 유지
warp put script
for c in 4 8 16 32 64; do
echo "### PUT concurrency $c ###"
/warp put \
--host minio-svc:9000 \
--access-key minioadmin --secret-key minioadmin \
--bucket bench --obj.size 4MiB \
--concurrent $c --duration 60s
echo "Sleeping 30s before next run..."
sleep 30
done
Bash
복사
•
MinIO Warp를 이용해서 동시성(concurrency)별 PUT 성능 테스트를 자동으로 실행하는 스크립트
•
벤치마크용 버킷: bench
•
업로드 파일 사이즈: 4MB
•
동시성 (멀티 쓰레드): 4, 8, 16, 32, 64 (30초 간격 재시작)
•
벤치마크 실행 시간: 60초
•
사이클이 끝날 때 PUT Object는 삭제
1) 기본 환경 (Baseline)
cc=4 | cc=8 | cc=16 | cc=32 | cc=64 | |
baseline_get | 95 | 74 | 80 | 67 | 64 |
baseline_get | 93 | 91 | 83 | 65 | 63 |
baseline_get | 91 | 91 | 78 | 69 | 63 |
baseline_put | 103 | 89 | 83 | 69 | 56 |
baseline_put | 103 | 96 | 83 | 70 | 56 |
baseline_put | 102 | 88 | 76 | 68 | 54 |
baseline_get_1
baseline_get_2
baseline_get_3
baseline_put_1
baseline_put_2
baseline_put_3
2) Partial Parameter
cc=4 | cc=8 | cc=16 | cc=32 | cc=64 | |
A1_get | 94 | 91 | 76 | 70 | 62 |
A2_get | 84 | 90 | 77 | 69 | 58 |
A3_get | 93 | 91 | 82 | 69 | 62 |
A4_get | 90 | 88 | 80 | 72 | 62 |
B1_get(2048) | 94 | 87 | 79 | 66 | 62 |
B1_get(16384) | 88 | 90 | 79 | 68 | 62 |
B2_get | 93 | 86 | 82 | 70 | 60 |
A. 네트워크 수신 경로 완화
A1. 패킷 처리 버짓 늘리기 (서버/클라이언트)
sysctl -w net.core.netdev_budget=1200
sysctl -w net.core.netdev_max_backlog=250000
# 기본 값
sysctl -w net.core.netdev_budget=300
sysctl -w net.core.netdev_max_backlog=1000
Bash
복사
A1_get
A2. TCP 수신 버퍼 확대 (서버/클라이언트)
sysctl -w net.core.rmem_max=268435456
sysctl -w "net.ipv4.tcp_rmem=67108864 134217728 268435456"
# 기본 값
sysctl -w net.core.rmem_max=212992
sysctl -w "net.ipv4.tcp_rmem=4096 131072 6291456"
Bash
복사
A2_get
A3. TCP 송신 버퍼 확대 (서버/클라이언트)
sysctl -w net.core.wmem_max=268435456
sysctl -w "net.ipv4.tcp_wmem=67108864 134217728 268435456"
# 기본 값
sysctl -w net.core.wmem_max=212992
sysctl -w "net.ipv4.tcp_wmem=4096 16384 4194304"
Bash
복사
A3_get
A4. MTU 블랙홀 회피
sysctl -w net.ipv4.tcp_mtu_probing=1
# 기본 값
sysctl -w net.ipv4.tcp_mtu_probing=0
Bash
복사
A4_get
B. 파일시스템/페이지 캐시(READ 경로)
B1. 디스크 readahead 확대 (MinIO 볼륨 디바이스에 적용)
# 줄이기
blockdev --setra 2048 /dev/sda3
# 늘리기
blockdev --setra 16384 /dev/sda3
# 기본 값
blockdev --setra 8192 /dev/sda3
Bash
복사
B1_get(2048)
B1_get(16384)
B2. VFS 캐시 보존
sysctl -w vm.vfs_cache_pressure=10
# 기본 값
sysctl -w vm.vfs_cache_pressure=100
Bash
복사
B2_get
3) Full Parameter
# 기본 값
sysctl -w fs.file-max=9223372036854775807
sysctl -w vm.swappiness=30
sysctl -w vm.vfs_cache_pressure=100
sysctl -w vm.min_free_kbytes=45056
sysctl -w net.core.rmem_max=212992
sysctl -w net.core.wmem_max=212992
sysctl -w net.core.rmem_default=212992
sysctl -w net.core.wmem_default=212992
sysctl -w net.core.netdev_budget=300
sysctl -w net.core.optmem_max=81920
sysctl -w net.core.somaxconn=4096
sysctl -w net.core.netdev_max_backlog=1000
sysctl -w "net.ipv4.tcp_rmem=4096 131072 6291456"
sysctl -w "net.ipv4.tcp_wmem=4096 16384 4194304"
sysctl -w net.ipv4.tcp_low_latency=0
sysctl -w net.ipv4.tcp_adv_win_scale=1
sysctl -w net.ipv4.tcp_max_syn_backlog=4096
sysctl -w net.ipv4.tcp_max_tw_buckets=16384
sysctl -w net.ipv4.tcp_tw_reuse=2
sysctl -w net.ipv4.tcp_fin_timeout=60
sysctl -w net.ipv4.conf.all.send_redirects=1
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.tcp_mtu_probing=0
Bash
복사
# 수정 값
sysctl -w fs.file-max=4194303
sysctl -w vm.swappiness=1
sysctl -w vm.vfs_cache_pressure=10
sysctl -w vm.min_free_kbytes=1000000
sysctl -w net.core.rmem_max=268435456
sysctl -w net.core.wmem_max=268435456
sysctl -w net.core.rmem_default=67108864
sysctl -w net.core.wmem_default=67108864
sysctl -w net.core.netdev_budget=1200
sysctl -w net.core.optmem_max=134217728
sysctl -w net.core.somaxconn=65535
sysctl -w net.core.netdev_max_backlog=250000
sysctl -w "net.ipv4.tcp_rmem=67108864 134217728 268435456"
sysctl -w "net.ipv4.tcp_wmem=67108864 134217728 268435456"
sysctl -w net.ipv4.tcp_low_latency=1
sysctl -w net.ipv4.tcp_adv_win_scale=1
sysctl -w net.ipv4.tcp_max_syn_backlog=30000
sysctl -w net.ipv4.tcp_max_tw_buckets=2000000
sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_fin_timeout=5
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.accept_source_route=0
sysctl -w net.ipv4.tcp_mtu_probing=1
Bash
복사
•
전체 파라미터를 ServerSide(MinIO Node)와 ClientSide(WARP Client)에 적용 후 테스트
•
sysctl -w 옵션으로 커널 파라미터를 즉시 적용(휘발성)
cc=4 | cc=8 | cc=16 | cc=32 | cc=64 | |
serverFull_put | 103 | 97 | 84 | 68 | 58 |
clientFull_put | 103 | 96 | 83 | 69 | 58 |
2. 다중 MinIO 노드 구성
간략 구성
[Worker Node #1] - MinIO Node
[Worker Node #2] - WARP Client
[Worker Node #3] - MinIO Node
warp put script
for c in 4 16 64; do
echo "### PUT concurrency $c ###"
/warp put \
--host minio-svc:9000 \
--access-key minioadmin --secret-key minioadmin \
--bucket bench --obj.size 4MiB \
--concurrent $c --duration 60s
echo "Sleeping 30s before next run..."
sleep 30
done
Bash
복사
•
MinIO Warp를 이용해서 동시성(concurrency)별 PUT 성능 테스트를 자동으로 실행하는 스크립트
•
벤치마크용 버킷: bench
•
업로드 파일 사이즈: 4MB
•
동시성 (멀티 쓰레드): 4, 16, 64 (30초 간격 재시작) (시간 관계 상… 멀티 쓰레드 8 & 32 제외)
•
벤치마크 실행 시간: 60초
•
사이클이 끝날 때 PUT Object는 삭제
cc=4 | cc=16 | cc=64 | |
2N_baseline_put | 136 | 127 | 98 |
2N_baseline_put | 151 | 130 | 95 |
2N_baseline_put | 136 | 132 | 99 |
2N_A1_put | 149 | 133 | 101 |
2N_A1_put | 151 | 128 | 101 |
2N_A1_put | 137 | 134 | 95 |
2N_A2_put | 101 | 135 | 100 |
2N_A2_put | 135 | 131 | 101 |
2N_A3_put | 136 | 133 | 98 |
2N_A4_put | 134 | 133 | 92 |
2N_B1_put(2048) | 149 | 130 | 100 |
2N_B1_put(2048) | 137 | 132 | 101 |
2N_B1_put(16384) | 151 | 126 | 99 |
2N_B2_put | 150 | 133 | 100 |
2N_B2_put | 150 | 131 | 97 |
2N_B2_put | 150 | 132 | 100 |
2N_baseline_put_1
2N_baseline_put_2
2N_baseline_put_3
2N_A1_put_1
2N_A1_put_2
2N_A1_put_3
2N_A2_put_1
2N_A2_put_2
2N_A3_put_1
2N_A4_put_1
2N_B1_put_1
2N_B1_put_2
2N_B1_put_1
2N_B2_put_1
2N_B2_put_2
2N_B2_put_3