파일 시스템 성능 벤치마킹

Tier: Free, Premium, Ultimate Offering: Self-Managed

파일 시스템 성능은 전체 GitLab 성능에 큰 영향을 미칩니다, 특히 Git 저장소를 읽거나 쓰는 작업에 대해 해당합니다. 이 정보는 알려진 좋은 및 나쁜 실제 시스템에 대한 파일 시스템 성능을 벤치마킹하는 데 도움이 됩니다.

파일 시스템 성능에 대해 이야기할 때 가장 큰 관심사는 네트워크 파일 시스템 (NFS)입니다. 그러나 일부 로컬 디스크도 I/O가 느릴 수 있습니다. 이 페이지의 정보는 양쪽 시나리오에 모두 사용될 수 있습니다.

벤치마킹 실행

fio로 벤치마킹

I/O 성능을 테스트하기 위해 Fio를 사용해야 합니다. 이 테스트는 NFS 서버와 NFS 서버와 통신하는 응용 프로그램 노드 양쪽에서 실행되어야 합니다.

설치 방법:

  • Ubuntu의 경우: apt install fio.
  • yum을 사용하는 환경의 경우: yum install fio.

그런 다음 다음을 실행하십시오:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --bs=4k --iodepth=64 --readwrite=randrw --rwmixread=75 --size=4G --filename=/path/to/git-data/testfile

이 명령은 /path/to/git-data/testfile에 4GB 파일을 생성합니다. 64개의 동작을 동시에 실행하여 4KB 씩 읽기 및 쓰기를 수행합니다. 테스트가 완료되면 파일을 삭제해야 합니다.

출력은 설치된 fio 버전에 따라 다양합니다. 아래는 네트워크화된 SSD에서 fio v2.2.10에서의 예시 출력입니다:

test: (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개의 파일을 읽습니다.

  1. 적절한 저장소 저장 경로의 루트로 변경하세요.
  2. 나중에 제거할 수 있도록 테스트용 임시 디렉토리를 생성하세요:

    mkdir test; cd test
    
  3. 다음 명령어를 실행하세요:

    time for i in {0..1000}; do echo 'test' > "test${i}.txt"; done
    
  4. 읽기 성능을 벤치마킹하려면 다음 명령어를 실행하세요:

    time for i in {0..1000}; do cat "test${i}.txt" > /dev/null; done
    
  5. 테스트 파일을 삭제하세요:

    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초 미만이 소요됩니다.