NVMe ssd : 왜 읽기보다 4k 쓰기가 더 빠릅니까?


51

PCIe Gen.3x4가 실행되는 NVMe에 Samsung 960 Pro 512GB SSD가 있습니다. Samsung NVMe Driver 2.0.0.1607을 사용합니다. SSD가 정상적으로 작동합니다. 그러나 4k를 쓰는 것이 4k를 읽는 것보다 빠른 이유를 이해하지 못합니다. AS Benchmark를 사용하고 있습니다.

여기에 이미지 설명을 입력하십시오

3 배입니다! 내 시스템 또는 AS 벤치 마크에 문제가 있습니까? 아니면 이것이 정상입니까?


그리고 여전히 회전하는 하드 드라이브보다 훨씬 빠릅니다!
Zan Lynx

답변:


76

4k 읽기는 드라이브가 할 수있는 가장 어려운 일입니다. 그것들은 드라이브가 처리 할 수있는 가장 작은 블록 크기 중 하나이며 드라이브가 많은 양의 데이터를 미리로드 할 수있는 방법이 없습니다. 실제로 드라이브로드-어 헤드 로직이 무엇이든 읽으려는 경우 실제로 비효율적입니다. 4kb보다 큽니다.

"정상적인"드라이브 읽기는 작은 파일이 매우 적기 때문에 4kb보다 클 가능성이 높으며, 페이지 파일도 프로그램이 "만" 4KB의 메모리가 페이지 아웃되었습니다. 이는 드라이브가 사전로드를 시도하면 실제로 드라이브 처리량에 불이익을 준다는 것을 의미합니다.

4K 읽기는 드라이브 버퍼를 통과 할 수 있지만 테스트의 "무작위"부분은 완전히 예측할 수 없습니다. 컨트롤러는 드라이브에 더 일반적인 "대형"읽기가 언제 필요할지 알 수 없습니다.

반면에 4K 쓰기는 효율적인 방식으로 순차적으로 버퍼링, 대기 및 기록 될 수 있습니다. 드라이브 버퍼는 설계된 캐치 앤 라이트 작업을 많이 수행 할 수 있으며,웨어 레벨러는 4K 쓰기를 모두 동일한 드라이브 지우기 블록에 할당하여 때로는 4K "랜덤"쓰기를 순차적 쓰기에 더 가까운 것.

실제로 이것이 "4K-64Thrd"쓰기에서 발생하는 것으로 의심되며 "64-Thrd"는 분명히 큰 큐 깊이 를 사용하므로 드라이브에 읽거나 쓸 데이터가 많다는 신호를 보냅니다. . 이것은 많은 쓰기 클러스터링을 유발하므로 드라이브의 순차적 쓰기 속도에 접근합니다. 4K 쓰기를 수행하는 데 여전히 오버 헤드가 있지만 이제는 버퍼의 가능성을 완전히 드러내고 있습니다. 테스트의 읽기 버전에서 드라이브 컨트롤러는로드가 매우 일정하다는 것을 인식하고 데이터 사전로드를 중지하고 버퍼를 피하고 대신 "원시"읽기 모드로 전환하여 다시 순차적 읽기 속도에 접근합니다.

기본적으로 드라이브 컨트롤러가 할 수있는 뭔가 그것은 만들 아무것도 할 수없는 동안 그들의 클러스터가 비슷한 시간에 도착 특히, 4K의 쓰기를보다 효율적으로하기 위해 하나 가 최적화하기 위해 노력하고, 특히, 4K보다 효율적으로 읽기 데이터를 캐시에 사전로드하여 데이터 흐름


5
답변 자체의 일부는 아니지만 "4K 읽기"(64th 버전이 아닌)가 실제로 드라이브 기본 읽기 블록 크기를 32K 또는 64K로 노출하고 있다고 생각합니다. 이것은 2600/50 = 52 (일부 오버 헤드 + 64K, 원본 4K 읽기) 또는 1200/50 = 24 (일부 오버 헤드 + 4K 읽기는 32K)입니다.
Mokubai

16
전반적으로 좋은 대답이지만 "작은 파일이 거의 없다"고 믿지 않습니다. 실제로 나는 대부분의 시스템에서 대부분 의 파일이 4k 이하 라고 생각합니다 . 그들은 대부분의 공간을 차지하지 않지만 또 다른 문제입니다.
hobbs

3
가장 간단한 대답은 아마도 다음과 같습니다. 한 번에 하나씩 수행하면 이전 읽기에서 데이터를 반환 할 때까지 다음 읽기가 어떤 블록인지 알지 못하므로 읽기와 겹칠 수 없습니다. 그러나 이전 쓰기 작업을 계속하면서 다음 쓰기에 대한 모든 데이터를 얻을 수 있으므로 쓰기를 완전히 겹칠 수 있습니다.
David Schwartz

2
@hobbs 예를 들어 NTFS를 사용하는 경우 기본 클러스터 크기는 4K (또는 그 배수)입니다. 이는 파일 및 / 또는 메타 데이터 자체가 더 작더라도 NTFS 파일 시스템 자체가 4K 블록에서 작동 함을 의미합니다. 따라서 작은 파일은 아무런 차이가 없습니다. 모든 의도와 목적을 위해 Windows 시스템은 4K 블록 또는 그 배수로 읽기 / 쓰기를합니다.
Tonny

1
@ hobbs : NTFS를 사용하면 작은 파일을 무료로 읽을 수 있습니다 (!). 작은 파일은 파일 이름과 인접한 디렉토리 항목 자체에 저장됩니다. 디스크에 실제 4KB 파일을 가지려면 4KB에 가까운 특정 파일 크기를 사용해야합니다.
MSalters

16

다른 답변은 글쓰기가 읽기보다 빠르다는 이유를 이미 설명했습니다. 나는이 드라이브에 대해 리뷰에서 찾을 수있는 벤치 마크로 확인되었으므로 이것은 절대적으로 정상이라고 덧붙이고 싶습니다.

ArsTecnica의 리뷰

ArsTechnica 는 드라이브 (512GB)와 2TB 드라이브를 모두 검토했습니다.

아르 테크니카 (이 그래프는 리뷰에 즉시 표시되지 않으며 첫 번째 갤러리에서 다섯 번째 그래프이므로 클릭해야합니다)

이 두 모델의 성능은 매우 유사하며 그 숫자는 사용자의 모습과 비슷합니다. 드라이브는 37MB / s로 읽고 151MB / s로 쓸 수 있습니다.

AnandTech의 리뷰

AnandTech 는 또한 드라이브를 검토했습니다. 2TB 모델을 사용하여 테스트 결과를 1, 2 및 4의 큐 깊이로 평균화했습니다. 다음은 그래프입니다.

AnandTech 4K 읽기 AnandTech 4K 쓰기

드라이브는 137MB / s로 읽고 437MB / s로 씁니다. 이 수는 귀하의 수보다 훨씬 높지만 대기열 깊이가 높을 수 있습니다. 어쨌든 쓰기 속도는 읽기 속도의 3 배입니다.

PC 월드의 리뷰

PC World의 한 가지 더 검토 : 그들은 1TB 버전을 테스트했으며 4K의 결과는 읽기 30MB / s, 쓰기 155MB / s입니다 PC 월드 그래프 . 쓰기 속도는 귀하와 일치하지만 드라이브는 다음과 같습니다. 독서 속도가 느려집니다. 결과는 비율이 3 대 1이 아닌 5 대 1입니다.

결론

리뷰에 따르면이 드라이브의 경우 임의 4K의 쓰기 속도가 읽기 속도보다 훨씬 빠릅니다. 테스트에 따라 5 배 더 빠를 수도 있습니다.

당신의 운전은 괜찮습니다. 결함이 있거나 시스템에 문제가 있다고 믿을 이유가 없습니다.


8

SSD 컨트롤러는 온보드 NVRAM에서 쓰기를 캐시하고 적절한 시간에 플래시 미디어로 플러시합니다. 따라서 쓰기 대기 시간은 캐시 액세스 대기 시간이며 일반적으로 20us입니다. 반대로 읽기는 120-150us의 액세스 시간으로 미디어에서 제공됩니다.


1

Andrey의 답변을 확장하면 SSD가 컴퓨터에 작업이 완료되었다는 신호를 보내기 전에 관련된 오버 헤드를 살펴 봐야합니다.

쓰기의 경우 데이터는 내부 RAM 캐시에 기록되어야합니다. 나중에 검사, 오류 수정 및 위치를 찾는 데 필요한 다른 4k 블록 및 메타 데이터와 함께 플래시 메모리에 기록됩니다.

읽기를 위해 SSD는 먼저 데이터를 찾아야합니다. 컴퓨터가 읽고 자하는 위치를 논리 주소라고하며 플래시 메모리에있는 데이터의 실제 위치와 직접적인 관계가 없습니다. SSD는 플래시 메모리의 지오메트리 (셀이 배열되는 방식), 불량 블록 리매핑,웨어 레벨링 및 기타 여러 요인에 따라 논리적 주소를 물리적 주소로 변환합니다. 그런 다음 플래시에서 데이터를 검색하기 전에 다른 작업이 완료 될 때까지 기다려야합니다. 그런 다음 데이터를 확인하고 필요한 경우 오류를 다시 읽고 적용하여 전체 블록을 다른 곳에 다시 쓸 수도 있습니다.

쓰기 작업에 걸리는 총 시간은 일반적인 읽기 작업보다 길 수 있지만 SSD가 추가 명령을 처리 할 수있는 정도로 작업이 완료되었다고보고하는 데 걸리는 시간은 더 짧습니다. 큰 블록의 경우 오버 헤드가 제한 요소가 아니지만 많은 작은 블록의 경우 읽기 / 쓰기 속도가 제한되기 시작합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.