파일 시스템 성능 벤치마킹
Offering: GitLab Self-Managed
파일 시스템 성능은 특히 Git 리포지터리를 읽거나 쓰는 작업에서 전체 GitLab 성능에 큰 영향을 미칩니다. 파일 시스템 성능에 대한 가장 큰 관심사는 네트워크 파일 시스템(NFS)입니다. I/O 성능을 테스트하려면 Fio를 사용해야 합니다.
파일 시스템 성능은 특히 Git 리포지터리를 읽거나 쓰는 작업에서 전체 GitLab 성능에 큰 영향을 미칩니다. 이 정보는 알려진 좋고 나쁜 실제 시스템에 대한 파일 시스템 성능 벤치마크에 도움이 됩니다.
파일 시스템 성능에 대한 가장 큰 관심사는 네트워크 파일 시스템(NFS)입니다. 그러나 일부 로컬 디스크도 느린 I/O를 가질 수 있습니다. 이 페이지의 정보는 두 가지 시나리오 모두에 사용할 수 있습니다.
벤치마크 실행#
fio를 사용한 벤치마킹#
I/O 성능을 테스트하려면 Fio를 사용해야 합니다. 이 테스트는 낮은 디스크 성능의 영향을 받을 수 있는 다음 서버에서 실행해야 합니다:
- NFS 호스트 및 NFS 드라이브를 마운트하는 애플리케이션 노드.
- Gitaly 노드.
- PostgreSQL 노드.
설치 방법:
- Ubuntu에서:
apt install fio. yum관리 환경에서:yum install fio.
그런 다음 다음을 실행합니다:
file="/path/to/nfs-or-postgres-or-gitaly/fio-benchmark-$(date +%s)"
fio --ioengine=libaio --direct=1 --gtod_reduce=1 --iodepth=64 --randrepeat=1 \
--readwrite=randrw --name="$file" --filename="$file" \
--size=4G --rwmixread=75 --bs=4k
이것은 NFS, PostgreSQL 또는 Gitaly 경로에 4 GB 파일을 생성합니다. Fio는 파일에서 75%/25% 비율로 4 KB 읽기 및 쓰기를 수행하며, 한 번에 64개의 작업이 실행됩니다. 테스트가 완료된 후 파일을 삭제하세요.
출력은 설치된 fio 버전에 따라 다릅니다. 다음은 네트워크 솔리드 스테이트 드라이브(SSD)에서 fio v2.2.10의 예시 출력입니다:
path/to/nfs-or-postgres-or-gitaly/fio-benchmark-1234567890: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.10
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 1024MB)
Jobs: 1 (f=1): [m(1)] [100.0% done] [131.4MB/44868KB/0KB /s] [33.7K/11.3K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=10287: Sat Feb 2 17:40:10 2019
read : io=784996KB, bw=133662KB/s, iops=33415, runt= 5873msec
write: io=263580KB, bw=44880KB/s, iops=11219, runt= 5873msec
cpu : usr=6.56%, sys=23.11%, ctx=266267, majf=0, minf=8
IO depths : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.0%
submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, >=64=0.0%
issued : total=r=196249/w=65895/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64
Run status group 0 (all jobs):
READ: io=784996KB, aggrb=133661KB/s, minb=133661KB/s, maxb=133661KB/s, mint=5873msec, maxt=5873msec
WRITE: io=263580KB, aggrb=44879KB/s, minb=44879KB/s, maxb=44879KB/s, mint=5873msec, maxt=5873msec
이 출력에서 iops 값을 주목하세요. 이 예시에서 SSD는 초당 33,415번의 읽기 작업과 11,219번의 쓰기 작업을 수행했습니다. 회전 디스크는 초당 2,000 및 700번의 읽기 및 쓰기 작업을 수행할 수 있습니다.
간단한 벤치마킹#
이 테스트는 단순하지만 시스템에서 fio를 사용할 수 없는 경우에 사용할 수 있습니다. 이 테스트에서 좋은 결과를 받더라도 읽기 속도 및 기타 다양한 요소로 인해 성능이 저하될 수 있습니다.
다음 한 줄 명령은 파일 시스템 쓰기 및 읽기 성능에 대한 빠른 벤치마크를 제공합니다. 이는 실행된 디렉터리에 1,000개의 소규모 파일을 쓰고, 동일한 1,000개의 파일을 읽습니다.
-
적절한 리포지터리 스토리지 경로의 루트로 변경합니다.
-
나중에 제거할 수 있도록 테스트용 임시 디렉터리를 만듭니다:
mkdir test; cd test -
명령을 실행합니다:
time for i in {0..1000}; do echo 'test' > "test${i}.txt"; done -
읽기 성능을 벤치마킹하려면 명령을 실행합니다:
time for i in {0..1000}; do cat "test${i}.txt" > /dev/null; done -
테스트 파일을 제거합니다:
cd ../; rm -rf test
time for ... 명령의 출력은 다음과 유사합니다. 중요한 지표는 real 시간입니다.
$ time for i in {0..1000}; do echo 'test' > "test${i}.txt"; done
real 0m0.116s
user 0m0.025s
sys 0m0.091s
$ time for i in {0..1000}; do cat "test${i}.txt" > /dev/null; done
real 0m3.118s
user 0m1.267s
sys 0m1.663s
여러 고객의 경험으로 볼 때, 이 작업은 양호한 파일 시스템 성능을 나타내기 위해 10초 이내에 완료되어야 합니다.
