스토리지 옵션 선택 섹션에 제공된 로컬 SSD 성능 한도는 로컬 SSD 인스턴스에서의 특정 설정을 사용하여 가져온 것입니다. 가상 머신(VM) 인스턴스에서 이러한 성능 한도에 도달하는 데 문제가 있고 권장 로컬 SSD 설정을 사용하여 인스턴스를 이미 구성한 경우 Compute Engine 팀에서 사용하는 설정을 복제하여 성능 한도를 게시된 한도와 비교할 수 있습니다.
여기서는 apt
패키지 관리자가 설치된 Linux 운영체제를 사용하는 것으로 가정합니다.
로컬 SSD 기기 1개가 있는 VM 만들기
VM에 포함할 수 있는 로컬 SSD 수는 VM을 만드는 데 사용하는 머신 유형을 기반으로 합니다. 자세한 내용은 유효한 로컬 SSD 수 선택을 참조하세요.
워크로드에 따라 기기당 4개 또는 8개의 vCPU를 포함하는 로컬 SSD 인스턴스를 만듭니다.
예를 들어 다음 명령어는 vCPU 4개와 로컬 SSD 1개가 있는 C3 VM을 만듭니다.
gcloud compute instances create c3-ssd-test-instance \ --machine-type "c3-standard-4-lssd"
2세대 및 이전 머신 유형의 경우
--local-ssd
플래그를 사용하여 VM에 연결할 로컬 SSD 수를 지정합니다. 다음 명령어는 NVMe 디스크 인터페이스를 사용하는 vCPU 8개와 로컬 SSD 1개가 있는 N2 VM을 만듭니다.gcloud compute instances create ssd-test-instance \ --machine-type "n2-standard-8" \ --local-ssd interface=nvme
VM에서 다음 스크립트를 실행합니다. 이 스크립트는 성능 섹션에 제공된 SSD 성능 수치를 얻기 위해 사용된 설정을 복제합니다.
--bs
매개변수는 여러 유형의 읽기 및 쓰기 작업 결과에 영향을 주는 블록 크기를 정의합니다.# install tools sudo apt-get -y update sudo apt-get install -y fio util-linux # discard Local SSD sectors sudo blkdiscard /dev/disk/by-id/google-local-nvme-ssd-0 # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=readbenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --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=writebenchmark --runtime=30 --ioengine=libaio \ --filename=/dev/disk/by-id/google-local-nvme-ssd-0 --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=4 --rw=randwrite --blocksize=4k --group_reporting
최대 로컬 SSD 수가 있는 VM 만들기
인스턴스에 24개 이상의 로컬 SSD 기기를 연결하려면 32개 이상의 vCPU가 있는 머신 유형을 사용하세요.
다음 명령어는 NVMe 인터페이스를 사용하여 허용 되는 최대 로컬 SSD 디스크 수로 VM을 만듭니다.
VM에 로컬 SSD 연결
gcloud 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
-lssd 머신 유형 사용
최신 머신 시리즈는 사전 정의된 수의 로컬 SSD 디스크와 함께 제공되는
-lssd
머신 유형을 제공합니다. 예를 들어 32개의 로컬 SSD(12TiB 용량)가 있는 VM을 벤치마킹하려면 다음 명령어를 사용합니다.gcloud compute instances create ssd-test-instance \ --machine-type "c3-standard-176-lssd"
mdadm
도구를 설치합니다.mdadm
의 설치 프로세스에는 스크립트를 중단하는 사용자 프롬프트가 포함되어 있으므로 프로세스를 수동으로 실행합니다.Debian 및 Ubuntu
sudo apt update && sudo apt install mdadm --no-install-recommends
CentOS 및 RHEL
sudo yum install mdadm -y
SLES 및 openSUSE
sudo zypper install -y mdadm
find
명령어를 사용하여 함께 마운트할 모든 로컬 SSD를 식별합니다.find /dev/ | grep google-local-nvme-ssd
결과는 다음과 유사합니다.
/dev/disk/by-id/google-local-nvme-ssd-23 /dev/disk/by-id/google-local-nvme-ssd-22 /dev/disk/by-id/google-local-nvme-ssd-21 /dev/disk/by-id/google-local-nvme-ssd-20 /dev/disk/by-id/google-local-nvme-ssd-19 /dev/disk/by-id/google-local-nvme-ssd-18 /dev/disk/by-id/google-local-nvme-ssd-17 /dev/disk/by-id/google-local-nvme-ssd-16 /dev/disk/by-id/google-local-nvme-ssd-15 /dev/disk/by-id/google-local-nvme-ssd-14 /dev/disk/by-id/google-local-nvme-ssd-13 /dev/disk/by-id/google-local-nvme-ssd-12 /dev/disk/by-id/google-local-nvme-ssd-11 /dev/disk/by-id/google-local-nvme-ssd-10 /dev/disk/by-id/google-local-nvme-ssd-9 /dev/disk/by-id/google-local-nvme-ssd-8 /dev/disk/by-id/google-local-nvme-ssd-7 /dev/disk/by-id/google-local-nvme-ssd-6 /dev/disk/by-id/google-local-nvme-ssd-5 /dev/disk/by-id/google-local-nvme-ssd-4 /dev/disk/by-id/google-local-nvme-ssd-3 /dev/disk/by-id/google-local-nvme-ssd-2 /dev/disk/by-id/google-local-nvme-ssd-1 /dev/disk/by-id/google-local-nvme-ssd-0
find
는 순서를 보장하지 않습니다. 출력 줄 수가 예상 SSD 파티션 수와 일치하는 한 기기가 다른 순서로 나열되더라도 괜찮습니다.SCSI 기기를 사용하는 경우 다음
find
명령어를 사용합니다.find /dev/ | grep google-local-ssd
NVMe 기기는 모두
google-local-nvme-ssd-#
형식이어야 하고 SCSI 기기는 모두google-local-ssd-#
형식이어야 합니다.mdadm
도구를 사용하여 여러 로컬 SSD 기기를/dev/md0
이라는 이름의 단일 배열로 결합합니다. 다음 예시에서는 NVMe 인터페이스를 사용하는 로컬 SSD 기기 24개를 병합합니다. SCSI를 사용하는 로컬 SSD 기기의 경우 3단계의find
명령어에서 반환된 기기 이름을 사용합니다.sudo mdadm --create /dev/md0 --level=0 --raid-devices=24 \ /dev/disk/by-id/google-local-nvme-ssd-0 \ /dev/disk/by-id/google-local-nvme-ssd-1 \ /dev/disk/by-id/google-local-nvme-ssd-2 \ /dev/disk/by-id/google-local-nvme-ssd-3 \ /dev/disk/by-id/google-local-nvme-ssd-4 \ /dev/disk/by-id/google-local-nvme-ssd-5 \ /dev/disk/by-id/google-local-nvme-ssd-6 \ /dev/disk/by-id/google-local-nvme-ssd-7 \ /dev/disk/by-id/google-local-nvme-ssd-8 \ /dev/disk/by-id/google-local-nvme-ssd-9 \ /dev/disk/by-id/google-local-nvme-ssd-10 \ /dev/disk/by-id/google-local-nvme-ssd-11 \ /dev/disk/by-id/google-local-nvme-ssd-12 \ /dev/disk/by-id/google-local-nvme-ssd-13 \ /dev/disk/by-id/google-local-nvme-ssd-14 \ /dev/disk/by-id/google-local-nvme-ssd-15 \ /dev/disk/by-id/google-local-nvme-ssd-16 \ /dev/disk/by-id/google-local-nvme-ssd-17 \ /dev/disk/by-id/google-local-nvme-ssd-18 \ /dev/disk/by-id/google-local-nvme-ssd-19 \ /dev/disk/by-id/google-local-nvme-ssd-20 \ /dev/disk/by-id/google-local-nvme-ssd-21 \ /dev/disk/by-id/google-local-nvme-ssd-22 \ /dev/disk/by-id/google-local-nvme-ssd-23
응답은 다음 예시와 유사합니다.
mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started.
mdadm --detail
을 사용하여 배열의 세부정보를 확인할 수 있습니다.--prefer=by-id
플래그를 추가하면/dev/disk/by-id
경로를 사용하는 기기가 나열됩니다.sudo mdadm --detail --prefer=by-id /dev/md0
배열의 각 기기에서 다음과 같이 출력되어야 합니다.
... Number Major Minor RaidDevice State 0 259 0 0 active sync /dev/disk/by-id/google-local-nvme-ssd-0 ...
VM에서 다음 스크립트를 실행합니다. 이 스크립트는 성능 섹션에 제공된 SSD 성능 수치를 얻기 위해 사용된 설정을 복제합니다.
--bs
매개변수는 여러 유형의 읽기 및 쓰기 작업 결과에 영향을 주는 블록 크기를 정의합니다.# install tools sudo apt-get -y update sudo apt-get install -y fio util-linux # full write pass - measures write bandwidth with 1M blocksize sudo fio --name=writefile \ --filename=/dev/md0 --bs=1M --nrfiles=1 \ --direct=1 --sync=0 --randrepeat=0 --rw=write --end_fsync=1 \ --iodepth=128 --ioengine=libaio # rand read - measures max read IOPS with 4k blocks sudo fio --time_based --name=benchmark --runtime=30 \ --filename=/dev/md0 --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 --runtime=30 \ --filename=/dev/md0 --ioengine=libaio --randrepeat=0 \ --iodepth=128 --direct=1 --invalidate=1 --verify=0 --verify_fatal=0 \ --numjobs=32 --rw=randwrite --blocksize=4k --group_reporting --norandommap
스토리지 최적화 VM 벤치마킹
스토리지 최적화 VM(예: Z3 제품군)은 기기 파티션을 기준으로 직접 벤치마킹해야 합니다.
lsblk
를 사용하여 파티션 이름을 가져올 수 있습니다.lsblk -o name,size -lpn | grep 2.9T | awk '{print $1}'
결과는 다음과 유사합니다.
/dev/nvme1n1 /dev/nvme2n1 /dev/nvme3n1 /dev/nvme4n1 /dev/nvme5n1 /dev/nvme6n1 /dev/nvme7n1 /dev/nvme8n1 /dev/nvme9n1 /dev/nvme10n1 /dev/nvme11n1 /dev/nvme12n1
로컬 SSD 파티션을 콜론 구분 기호로 구분하여 로컬 SSD 파티션에 대한 벤치마크를 직접 실행합니다.
# install benchmarking tools sudo apt-get -y update sudo apt-get install -y fio util-linux # Full Write Pass. # SOVM achieves max read performance on previously written/discarded ranges. sudo fio --readwrite=write --blocksize=1m --iodepth=4 --ioengine=libaio \ --direct=1 --group_reporting \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand read - measures max read IOPS with 4k blocks sudo fio --readwrite=randread --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1 # rand write - measures max write IOPS with 4k blocks sudo fio --readwrite=randwrite --blocksize=4k --iodepth=128 \ --numjobs=4 --direct=1 --runtime=30 --group_reporting --ioengine=libaio \ --name=job1 --filename=/dev/nvme1n1 --name=job2 --filename=/dev/nvme2n1 \ --name=job3 --filename=/dev/nvme3n1 --name=job4 --filename=/dev/nvme4n1 \ --name=job5 --filename=/dev/nvme5n1 --name=job6 --filename=/dev/nvme6n1 \ --name=job7 --filename=/dev/nvme7n1 --name=job8 --filename=/dev/nvme8n1 \ --name=job9 --filename=/dev/nvme9n1 --name=job10 --filename=/dev/nvme10n1 \ --name=job11 --filename=/dev/nvme11n1 --name=job12 --filename=/dev/nvme12n1
다음 단계
- 로컬 SSD 가격 자세히 알아보기