Home
home

MinIO - Kernel Parameter 영향도 (2)

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