“4K”속도 테스트에서 HDD가 왜 이렇게 느린가요?


46

4K 속도에 어떤 문제가 있습니까? 왜 그렇게 느려? 아니면 그런 식으로되어 있습니까?

벤치 마크 스크린 샷

그 속도 괜찮아? 4K에서 왜 그런 속도가 느린가요?


13
그것은 정상이며 예상되는 것입니다. 이 문맥에서 "4K"는 기계적 HDD가 엄청나게 수행하는 랜덤 읽기 / 쓰기 (4 킬로바이트 블록, 따라서 "4K")를 의미합니다. 그것이 바로 당신이 SSD를 원하는 곳입니다. 보다 자세한 설명 은 여기 를 참조 하십시오 .
Bob

4Kb는 실제 섹터 (디스크 자체의 낮은 수준의 구조)의 일반적인 디스크 클러스터 크기와 많은 현대 HDD에서 사용되기 때문에 사용됩니다. 즉, 요청 된 데이터가 더 작더라도 읽기 또는 쓰기로 한 번에 한 번에 전송 될 수있는 가장 적은 양의 데이터입니다. 지금까지이 페이지에 대한 답변이 없음에도 불구하고 클러스터 나 섹터를 언급합니다.
thomasrutter

2
@thomasrutter 답변과 관련이 없기 때문입니다. 중요한 부분은이 테스트가 무작위 탐색을 포함한다는 것입니다. 전송되는 데이터의 양과 디스크의 섹터 크기의 배수인지 여부는 어느 정도 관련이 없습니다. 중요한 부분은 테스트가 탐색 성능을 측정하기 위해 최소량의 데이터를 전송한다는 것입니다.
Micheal Johnson

이 테스트는 파티션 또는 전체 디스크에서 수행됩니까? 물리 섹터가 4K이지만 논리 섹터가 1K 인 디스크가 있고 파티션 경계를 스 트래들 섹터에 잘못 정렬하면 파티션 레벨 테스트가 4K 액세스에 대해 훨씬 더 나빠질 수 있습니다.
Toby Speight

최신 파티션 도구는 파티션이 섹터 경계에서 시작하고 끝나는 경향이 있습니다. 1MB의 세분성도 이제는 일반적입니다. 4Kb 네이티브 섹터에 문제를 야기하는 오래된 "63 512 바이트 섹터"시대는 지났습니다.
thomasrutter

답변:


85

당신이 겪고있는 것은 기계식 HDD의 전형적인 것이며 SSD의 주요 이점 중 하나입니다. HDD는 끔찍한 임의 액세스 성능을 가지고 있습니다.

CrystalDiskMark에서 "Seq"는 순차 액세스를 의미 하고 "4K"는 임의 액세스를 의미 합니다 (한 번에 4kB 단위로 단일 바이트가 너무 느리고 비현실적이므로 1 ).


정의

파일에 액세스 할 수있는 방법은 크게 두 가지가 있습니다.

순차적 액세스

순차적 액세스는 파일을 1 바이트 씩 계속 읽거나 쓰는 것을 의미합니다. 예를 들어, 비디오를보고 있다면 비디오를 처음부터 끝까지로드 할 수 있습니다. 파일을 다운로드하는 경우 파일이 처음부터 끝까지 다운로드되어 디스크에 기록됩니다.

디스크 관점에서 "블록 # 1 읽기, 블록 # 2 읽기, 블록 # 3 읽기, 바이트 블록 # 4 읽기" 1과 같은 명령이 표시 됩니다.

랜덤 액세스

랜덤 액세스는 읽기 또는 쓰기에 명확한 패턴이 없음을 의미합니다. 이것은 실제로 무작위를 의미 할 필요는 없습니다. 실제로는 "순차적이지 않음"을 의미합니다. 예를 들어, 한 번에 많은 프로그램을 시작하는 경우 드라이브 주위에 흩어져있는 많은 파일을 읽어야합니다.

드라이브 관점에서 "블록 # 56 읽기, 블록 # 5463 읽기, 블록 # 14 읽기, 블록 # 5 읽기"와 같은 명령이 표시됩니다.

블록

블록을 몇 번 언급했습니다. 컴퓨터는 이러한 큰 크기 (1MB ~ = 1000000B)를 처리하므로 각 바이트마다 드라이브를 요청해야하는 경우 순차 액세스조차 비효율적입니다. 채터가 너무 많습니다. 실제로 운영 체제 는 한 번에 디스크에서 데이터 블록 을 요청합니다 .

블록 바이트 단지 범위이고; 예를 들어, 블록 # 1은 바이트 # 1- # 512, 블록 # 2는 바이트 # 513- # 1024 등일 수 있습니다.이 블록은 드라이브에 따라 512 바이트 또는 4096 바이트입니다. 그러나 개별 바이트가 아닌 블록을 처리 한 후에도 순차 블록 액세스는 임의 블록 액세스보다 빠릅니다.


공연

잇달아 일어나는

순차적 액세스는 일반적으로 임의 액세스보다 빠릅니다. 순차적 액세스는 운영 체제 드라이브가 다음에 필요한 것을 예측하고 큰 청크를 미리로드 할 수 있기 때문 입니다. "1, 2, 3, 4"블록을 요청한 경우 OS는 다음에 "5, 6, 7, 8"을 원한다고 추측 할 수 있으므로 드라이브에 "1, 2, 3, 4를 읽도록 지시합니다. , 5, 6, 7, 8 "한 번에. 마찬가지로, 드라이브는 "1에서 1,2,3,4를 읽고, 5를 찾고, 5,6,7,8을 읽는"대신 물리적 저장소를 한 번에 읽을 수 있습니다.

아, 나는 무언가를 찾는 것을 언급했다. 기계식 HDD는 물리적으로 배치되는 방식으로 인해 탐색 시간이 매우 느립니다. 디스크를 읽기 위해 물리적 팔을 앞뒤로 움직이는 여러 개의 중금속 디스크로 구성되어 있습니다. 다음은 회전하는 디스크와 움직이는 팔을 볼 수있는 열린 HDD의 비디오입니다.

HDD 내부 다이어그램
http://www.realtechs.net/data%20recovery/process2.html의 이미지

즉, 언제든지 팔 끝에있는 헤드 아래의 데이터 비트 만 읽을 수 있습니다. 드라이브는 두 가지를 기다려야합니다. 팔이 디스크의 오른쪽 고리 ( "트랙")로 이동할 때까지 기다려야하며 디스크가 회전 할 때까지 기다려야 데이터가 읽 히게됩니다. 머리. 이것은 탐색 2 로 알려져 있습니다 . 회전하는 팔과 움직이는 팔 둘 다 이동하는 데 물리적 인 시간이 걸리며, 피해를 입지 않고 크게 속도를 낼 수 없습니다.

일반적으로 실제 판독 시간보다 훨씬 오래 걸립니다. 우리는 요청 된 바이트가 사는 곳으로 가기 위해 5ms 이상을 말하는 반면, 바이트의 실제 읽기는 순차적 바이트 읽기 당 약 0.00000625ms (또는 512 B 블록 당 0.003125ms)까지 평균합니다.

무작위

반면에 랜덤 액세스는 예측 가능성의 이점이 없습니다. 따라서 블록 "8,34,76,996,112,644,888,341"에서 임의의 바이트 8 개를 읽으려면 드라이브를 "8로, 8을 읽고, 34를 찾고, 34를 읽고, 76을 찾고, 76을 읽고, ..."로 이동해야합니다. . 모든 단일 블록에 대해 어떻게 다시 검색해야합니까? 순차적 인 512 B 블록 당 평균 0.003125ms 대신, 이제는 블록 당 평균 (5ms 탐색 + 0.003125ms 판독) = 5.003125ms입니다. 그것은 여러 번, 느리게 진행됩니다. 실제로 수천 배는 느립니다.

SSD

다행히도 SSD 솔루션이 있습니다.

SSD ( 솔리드 스테이트 드라이브 )는 이름에서 알 수 있듯이 솔리드 스테이트 입니다. 그것은 움직이는 부분없다는 것을 의미합니다 . 더욱이, SSD가 배치되는 방식 은 바이트의 위치를 ​​찾을 필요가 없다는 것을 의미한다 (효과적으로 3 ). 이미 알고 있습니다. 이것이 SSD가 순차 액세스와 임의 액세스 사이의 성능 격차가 훨씬 적은 이유입니다.

여전히 차이가 있지만, 다음에 무엇이 올지 예측할 수없고 요청하기 전에 해당 데이터를 미리로드 할 수 없기 때문 입니다.


1 보다 정확하게, 효율성을 위해 LBA 드라이브는 512 바이트 (512n / 512e) 또는 4kB (4Kn)의 블록으로 처리됩니다. 또한 실제 프로그램은 한 번에 하나의 바이트 만 필요로하지 않습니다.

2 기술적으로, 탐색 은 팔 이동 만 참조합니다. 헤드 아래에서 데이터가 회전하기를 기다리는 것은 탐색 시간에 대한 회전 대기 시간입니다.

3 기술적으로, 룩 레벨링과 같은 다른 이유로 룩업 테이블이 있고 다시 매핑되지만 HDD와 비교할 때 완전히 무시할 수 있습니다 ...


@KamilMaciorowski 나는 탐색 + 읽기 시간 계산을 버리지 않기 때문에 실제로 단순화를 다시 생각하고 있습니다. 오 잘 개념에는 그다지 중요하지 않습니다.
Bob

: 당신은 임의의 부분을 수정해야 Notice how it needs to look for every single byte?바꾸 byte으로 block(그리고 그에 따라 exemple 변경). 드라이브는 4k 부분을 찾고 (이는 512 바이트 청크로 더 분산 될 수 있지만 이보다 낮지 않습니다. 모든 바이트 사이를 탐색하지 않습니다! 다음 블록이 바로 뒤에 있지 않으면 모든 블록 사이를 탐색합니다. 탐색 (머리를 플래터 주위로 옮기고 블록이 그 아래를 통과하기를 기다리는 것)는 매우 긴 시간 (몇 밀리 초)
Olivier Dulac

2
4 킬로바이트 / 512B의 작은 다이 노트. 4kiB는 거의 모든 페이지 크기이며, LBA 드라이버가 512B 청크로 읽더라도 OS $는 4KB 블록 전체를 미리 읽을 수 있습니다. 또한 문제는 HDD가 물리적으로 올바른 위치로 회전 해야하는 것보다 SDD보다 더 많은 바이트를 '찾기'해야한다고 생각하지 않습니다. 블록에 다시 액세스하면 HDD가 계속 회전하면서 블록을 다시 찾아야합니다. 모든 블록 리매핑은 2 차 효과 일 가능성이 높습니다 (매핑 된 블록은 일반적으로 탐색을 최소화하기 위해 살아있는 어쨌든 손상된 직후입니다).
Maciej Piechotka

(아마도 완전한 참고 사항-NAND / NOR에 대해서는 확실하지 않지만 적어도 DDR 주소 지정은 이름이 표시하지만 주소의 '버스트'에서 작동하므로 완전히 임의적이지는 않습니다. 대부분의 경우 64 B입니다. 대부분의 CPU의 $ 라인 크기이지만 다른 응용 프로그램의 경우 훨씬 더 클 수 있습니다.)
Maciej Piechotka

1
@OlivierDulac 블록을 도입하는 것이 혼란 스러울 수 있다고 생각하지만 설명하려고했습니다. 답변이 업데이트되었습니다.
Bob

3

다른 답변에서 이미 지적했듯이 "4K"는 크기가 4 KiB 인 블록의 임의 액세스를 거의 확실하게 나타냅니다.

SSD가 아닌 하드 디스크에 데이터를 읽거나 쓸 때마다 두 가지 중요한 지연이 발생합니다.

  • 읽기 / 쓰기 헤드가 플래터의 올바른 원형 트랙 (또는 "실린더")에 "탐색"되도록 대기 시간을 찾으십시오. 헤드가 트랙을 안정화하고 플래터에 저장된 데이터와 동기화하는 데 필요한 시간을 포함하여
  • 트랙의 원하는 부분 ( "섹터")이 헤드 아래를 통과하도록 읽기 / 쓰기 헤드 아래의 회전 플래터가 회전하는 회전 대기 시간

두 드라이브 모두 주어진 드라이브에 대해 비교적 일정한 시간입니다. 탐색 대기 시간은 헤드를 얼마나 빨리 움직일 수 있고 얼마나 멀리 움직여야하는지에 대한 함수이며 회전 대기 시간은 플래터가 얼마나 빨리 회전하는지에 따라 달라집니다. 무엇보다, 그들은 훨씬 지난 몇 년 동안 변경되지 않았습니다. 제조업체는 실제로 평균 검색 시간을 광고에 사용했습니다. 그들은 그 지역에 개발이 거의 없거나 전혀 없을 때 그 일을 거의 중단했습니다. 특히 경쟁이 치열한 환경의 제조업체는 경쟁 업체 제품보다 더 나은 제품을 원하지 않습니다.

일반적인 데스크탑 하드 디스크는 7200rpm에서 회전하는 반면, 일반적인 랩톱 드라이브는 약 5000rpm에서 회전 할 수 있습니다. 이는 매초 총 120 회 (데스크톱 드라이브) 또는 약 83 회 (랩톱 드라이브)를 거치는 것을 의미합니다. 이후 평균 원하는 분야 머리 아래에 전달하기 전에 디스크는 우리가 약 두 배 초당 많은 I / O 요청이 있다고 가정하는 디스크가 서비스 할 수있을 것으로 예상 할 수있는이 수단, 반 혁명을 회전해야합니다

  • 중 하나는 (이 아마 I / O가 추구 포함 현재 하드 디스크의 안전한 내기) 디스크가 회전하는 동안 수행 추구 하고 이 지연 추구하지 않는 특정 I / O에 대한 회전 지연 시간보다 더 이상
  • 또는 헤드가 이미 올바른 실린더 위에 우연히 유발 (a 레이턴시 제로의 탐색과, 상기의 특별한 경우 인) 구해야하지 않도록 드라이브

따라서 (읽기 또는 쓰기를 위해) 액세스하도록 요청되는 데이터가 물리적으로 상대적으로 현지화되어 회전 지연이 제한 요인 인 경우 초당 200 I / O 정도의 속도로 수행 할 수 있어야합니다. 일반적으로 데이터가 플래터 또는 플래터에 분산되어 있으면 상당한 탐색이 필요하고 탐색 대기 시간이 제한 요인이되도록 드라이브가 초당 100 I / O 정도의 속도로 수행 될 수 있습니다. . 스토리지 측면에서 이는 " IOPS순차 I / O 성능이 아닌 하드 디스크의 성능 "은 일반적으로 실제 스토리지 시스템에서 제한 요소입니다. (SSD가 훨씬 더 빠른 이유는 SSD가 회전 대기 시간을 없애고 읽기 / 쓰기 헤드의 물리적 이동이 전자적으로 저장되는 플래시 매핑 계층 테이블에서 테이블 조회가되므로 탐색 대기 시간을 크게 줄입니다.)

캐시 플러시가 관련된 경우 일반적으로 쓰기 속도가 느려집니다. 일반적으로 운영 체제 및 하드 디스크는 임의 쓰기를 재정렬하여 가능한 경우 임의 I / O를 순차적 I / O로 전환하여 성능을 향상시킵니다. 명시 적 캐시 플러시 또는 쓰기 장벽 이있는 경우 영구 저장소의 데이터 상태가 소프트웨어가 기대하는 것과 일치하도록하기 위해이 최적화가 제거됩니다. 기본적으로 디스크 캐시가없는 경우 (데스크탑 스타일 시스템에서는 일반적이지 않음) 소프트웨어가 의도적으로 디스크를 우회하기 때문에 (I / O 성능을 측정 할 때 종종 수행됨) 기본적으로 동일한 추론이 적용됩니다. 두 가지 모두 최대 잠재적 IOPS 성능을보다 비관적 인 경우의 성능으로 낮추거나 7200rpm 드라이브의 경우 120 IOPS로 줄입니다.

  • I / O 당 4 KiB에서 100 IOPS로 약 400KB / s의 성능을 얻습니다.
  • I / O 당 4 KiB에서 200 IOPS로 약 800KB / s의 성능을 얻습니다.

숫자와 거의 정확히 일치하는 결과입니다. 블록 크기가 작은 랜덤 I / O는 회전식 하드 디스크의 성능을 저하시키는 요인 이므로 관련 메트릭스이기도합니다.

순차 순차 I / O의 경우 최신 회전식 하드 디스크의 경우 150MB / s 범위의 처리량이 전혀 합리적이지 않습니다. 그러나 실제 I / O는 거의 순차적이지 않기 때문에 대부분의 상황에서 순차 순차 I / O 성능은 실제 성능을 나타내는 것보다 학문적 연습이됩니다.


이것은 훌륭한 답변이며 내 것보다 훨씬 더 잘 읽습니다. 최소한, Seagate는 여전히 데이터 시트에서 평균 탐색 대기 시간 을 지정합니다 . WD는 보이지 않는 것 같습니다.
Bob

@Bob 감사합니다. 나는 실제로 광고와 비슷한 것을 의미했다. 나는 그것을 명확히하기 위해 대답을 편집했습니다. 데이터 시트를 읽는 사람은 거의 없다고해도 안전하다고 생각합니다. 비록 그렇게하는 것이 많은 사람들에게는 냉정한 경험 일 것입니다.
CVn

2

4K는 임의 I / O를 나타냅니다 . 이는 디스크가 테스트 파일 내의 임의의 지점에서 작은 블록 (4KB 크기)에 액세스하도록 요청 받고 있음을 의미합니다. 이것은 하드 드라이브의 약점입니다. 디스크의 여러 영역에서 데이터에 액세스하는 기능은 디스크가 회전하는 속도와 읽기 / 쓰기 헤드가 얼마나 빨리 이동할 수 있는지에 따라 제한됩니다. 연속 블록에 액세스하는 순차적 I / O 는 디스크가 회전 할 때 드라이브가 단순히 블록을 읽거나 쓸 수 있기 때문에 훨씬 쉽습니다.

솔리드 스테이트 드라이브 (SSD)는 데이터가 기본 메모리 (일반적으로 NAND 플래시, 3D XPoint 또는 DRAM 일 수 있음)에 저장된 위치를 찾고 읽기만하면되므로 임의 I / O에는 아무런 문제가 없습니다. 또는 적절한 위치에 데이터를 쓰십시오. SSD는 전적으로 전자적이며 회전 디스크 또는 이동하는 읽기 / 쓰기 헤드에서 데이터에 액세스하기 위해 기다릴 필요가 없으므로 하드 드라이브보다 훨씬 빠릅니다. 이러한 이유로 SSD로 업그레이드하면 시스템 성능이 크게 향상됩니다.

참고 : SSD의 순차적 I / O 성능은 종종 하드 드라이브보다 훨씬 높습니다. 일반적인 SSD에는 플래시 메모리 컨트롤러에 병렬로 연결된 여러 개의 NAND 칩이 있으며 동시에 액세스 할 수 있습니다. 이러한 칩에 데이터를 분산시킴으로써 RAID 0과 유사한 드라이브 레이아웃이 달성되어 성능이 크게 향상됩니다. (많은 최신 드라이브, 특히 저렴한 드라이브는 데이터를 쓸 때 속도가 느린 TLC NAND라는 NAND 유형을 사용합니다. TLC NAND가있는 드라이브는 종종 더 빠른 NAND의 작은 버퍼를 사용하여 작은 쓰기 작업에 더 높은 성능을 제공하지만 버퍼가 가득 차면 속도가 크게 느려집니다.)


IIRC, 일부 NVMe SSD는 심지어 DRAM 캐시를 사용합니다.
timuzhti

1
대부분 그렇습니다. 드램리스 SSD는 저가형입니다.
Journeyman Geek
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.