로컬 SSD 성능 벤치마킹

스토리지 옵션 선택 섹션에 제공된 로컬 SSD 성능 한도는 로컬 SSD 인스턴스에서의 특정 설정을 사용하여 가져온 것입니다. 가상 머신(VM) 인스턴스에서 이러한 성능 한도에 도달하는 데 문제가 있고 권장 로컬 SSD 설정을 사용하여 인스턴스를 이미 구성한 경우 Compute Engine 팀에서 사용하는 설정을 복제하여 성능 한도를 게시된 한도와 비교할 수 있습니다.

여기서는 apt 패키지 관리자가 설치된 Linux 운영체제를 사용하는 것으로 가정합니다.

vCPU 8개와 로컬 SSD 파티션 1개로 가상 머신 만들기

  1. 워크로드에 따라 기기당 4개 또는 8개의 vCPU를 포함하는 로컬 SSD 인스턴스를 만듭니다. 예를 들어 4개의 로컬 SSD 파티션을 인스턴스에 연결하려면 vCPU가 16개 또는 32개인 머신 유형을 사용합니다.

    다음 명령어는 8개의 vCPU와 단일 로컬 SSD를 포함하는 가상 머신을 만듭니다.

    gcloud compute instances create ssd-test-instance \
        --machine-type "n1-standard-8" \
        --local-ssd interface=nvme
    
  2. VM에서 다음 스크립트를 실행합니다. 이 스크립트는 성능 섹션에 제공된 SSD 성능 수치를 얻기 위해 사용된 설정을 복제합니다. --bs 매개변수는 여러 유형의 읽기 및 쓰기 작업 결과에 영향을 주는 블록 크기를 정의합니다.

    # install dependencies
    sudo apt-get -y update
    sudo apt-get install -y build-essential git libtool gettext autoconf \
    libgconf2-dev libncurses5-dev python-dev fio bison autopoint
    
    # blkdiscard
    git clone https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
    cd util-linux/
    ./autogen.sh
    ./configure
    make
    sudo ./blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile --size=100G --filesize=100G \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
    --iodepth=200 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randread --blocksize=4k --group_reporting
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
    

vCPU 32개와 로컬 SSD 파티션 24개로 가상 머신 만들기

  1. 24개의 로컬 SSD 파티션을 인스턴스(베타 버전으로 제공)에 연결하려면 32개 이상의 vCPU가 있는 머신 유형을 사용합니다.

    다음 명령어는 vCPU 32개와 로컬 SSD 파티션 24개가 있는 가상 머신을 만듭니다.

    gcloud beta compute instances create ssd-test-instance \
    --machine-type "n1-standard-32" \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme \
    --local-ssd interface=nvme
    
  2. VM에서 다음 스크립트를 실행합니다. 이 스크립트는 성능 섹션에 제공된 SSD 성능 수치를 얻기 위해 사용된 설정을 복제합니다. --bs 매개변수는 여러 유형의 읽기 및 쓰기 작업 결과에 영향을 주는 블록 크기를 정의합니다.

    # install dependencies
    sudo apt update -y
    sudo apt install -y build-essential git libtool gettext autoconf \
    libgconf2-dev libncurses5-dev python-dev fio bison autopoint
    
    # blkdiscard
    git clone https://git.kernel.org/pub/scm/utils/util-linux/util-linux.git
    cd util-linux/
    ./autogen.sh
    ./configure
    make
    sudo ./blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0
    
    # full write pass - measures write bandwidth with 1M blocksize
    sudo fio --name=writefile --size=100G --filesize=100G \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \
    --direct=1 --sync=0 --randrepeat=0 --rw=write --refill_buffers --end_fsync=1 \
    --iodepth=200 --ioengine=libaio
    
    # rand read - measures max read IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=32 --rw=randread --blocksize=4k --group_reporting --norandommap
    
    # rand write - measures max write IOPS with 4k blocks
    sudo fio --time_based --name=benchmark --size=100G --runtime=30 \
    --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --ioengine=libaio --randrepeat=0 \
    --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \
    --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
    

다음 단계