EC2 인스턴스에서 `hdparm -t`가 정확한 결과를 생성하는 데 시간이 오래 걸리는 이유는 무엇입니까?

EC2 인스턴스에서 `hdparm -t`가 정확한 결과를 생성하는 데 시간이 오래 걸리는 이유는 무엇입니까?

나는 내가 작성한 데이터 처리 프로그램을 프로파일링하고 있으며 내가 사용 중인 기계의 이론적 처리량을 이해하고 싶습니다. 특히 g4dn EC2 인스턴스가 애플리케이션에 제공하는 디스크 읽기 속도를 측정하고 싶습니다. 이 특정 인스턴스에는 제가 벤치마킹하고 싶은 임시 NVMe 드라이브가 있습니다.

hdparm보고된 처리량이 증가하지 않을 때까지 꽤 많은 실행이 필요하다는 것을 알았습니다 . 내 질문은 hdparm전체 읽기 처리량을 얻기 위해 여러 번 실행하는 이유는 무엇입니까? hdparm정확한 결과를 얻기 위해 여러 번 실행해야 하는 Linux 커널/디스크 드라이버/드라이브 컨트롤러/실제 하드웨어에는 무엇이 있습니까 ?

매뉴얼 페이지에서는 몇 번 실행하라고 나와 있지만 내 경험상 처리량을 최대화하려면 권장되는 3회보다 훨씬 더 많은 시간이 걸립니다.

-t     Perform timings of device reads for benchmark and
       comparison purposes.  For meaningful results, this
       operation should be repeated 2-3 times on an otherwise
       inactive system (no other active processes) with at least
       a couple of megabytes of free memory.  This displays the
       speed of reading through the buffer cache to the disk
       without any prior caching of data.  This measurement is an
       indication of how fast the drive can sustain sequential
       data reads under Linux, without any filesystem overhead.
       To ensure accurate measurements, the buffer cache is
       flushed during the processing of -t using the BLKFLSBUF
       ioctl.

읽기 속도를 수집하기 위해 다음을 실행합니다.

#!/usr/bin/env bash
while true; do
   sudo hdparm -t /dev/nvme0n1p1;
   sleep 1;
done

다음 출력을 얻습니다.

$ while true; do sudo hdparm -t /dev/nvme0n1p1; sleep 1; done

/dev/nvme0n1p1:
 Timing buffered disk reads: 470 MB in  3.09 seconds = 152.30 MB/sec

/dev/nvme0n1p1:
 Timing buffered disk reads: 490 MB in  3.10 seconds = 158.21 MB/sec

/dev/nvme0n1p1:
 Timing buffered disk reads: 526 MB in  3.02 seconds = 174.43 MB/sec

약 330MB/초로 안정되기까지는 20번의 실행이 필요합니다.

올바른 NVMe 드라이버가 있는 AMI를 사용하고 있습니다.

답변1

기본적으로 일부 EC2 인스턴스에서 사용할 수 있는 로컬 nvme 드라이브는 사용할 준비가 되어 있지 않으며 "사용 준비가 완료된" nvme 장치는 실제로 nvme 드라이브로 탑재된 EBS 볼륨입니다. 이는 낮은 처리량(300MB/s)과 느린 준비 시간(20회 실행)을 설명합니다.

hdparm나중에 참고할 수 있도록 포맷하고 마운트했을 때 첫 번째 실행에서 1.7GB/s의 순차 읽기 속도를 얻었습니다.진짜nvme 드라이브. 에서 볼 수 있습니다 lsblk.

관련 정보