최신 하드 드라이브는 "고급 형식"예를 들어 기본적으로 512/4096의 논리/물리 섹터 크기를 보고합니다.
기본적으로 대부분의 Linux 포맷 도구는 4096바이트의 블록 크기를 사용합니다(적어도 Debian/EXT4에서는 기본값입니다).
지금까지 저는 이것이 최적화라고 생각했습니다. Linux/EXT4는 논리 섹터 크기가 512K임에도 불구하고 4K 블록을 HDD로 전송하여 이를 최적으로 처리합니다.
그런데 오늘 나는 읽었다.이 최근 (2021) 게시물. 그 사람은 HDD의 논리 섹터 크기를 512e에서 4Kn으로 전환하면 더 나은 성능을 제공할 수 있는지 확인하기 위해 일부 HDD 벤치마크를 수행했습니다. 그의 결론은 다음과 같습니다.
명심하세요: 내 이론은 파일 시스템이 4k 블록을 사용하고 모든 것이 올바르게 정렬되어 있으므로 의미 있는 차이가 없어야 한다는 것입니다.
이것이 사실입니까? 음 ... 아니. 별말씀을요. (...) 4kb 청크를 사용하면... 여기에는 매우 큰 차이가 있습니다. 이는 단일 스레드 벤치마크이지만 4k 섹터 드라이브는 항상 4kb 블록 전송에서 큰 우위를 점하고 있습니다. (...)
결론: 4k 섹터를 사용하세요!
내가 생각하는 한, 여기서의 결론은 꽤 분명하다. 4k 섹터를 처리할 수 있는 최신 운영 체제가 있고 드라이브가 512바이트 또는 4k 섹터 실행을 지원하는 경우 다른 작업을 수행하기 전에 드라이브를 4k 기본 섹터로 변환하십시오. 그런 다음 계속해서 운영 체제가 처리하도록 하십시오.
기본적으로 그의 결론은 HDD의 논리 섹터 크기를 4Kn으로 전환하면 기본 제공되는 512e에 비해 성능이 크게 향상된다는 것입니다.
이제 주목해야 할 중요한 사항은 이 특정 벤치마크가 단일 스레드라는 것입니다. 그는 또한 4스레드 벤치마크를 수행했는데 512e와 4Kn 사이에 큰 차이가 나타나지 않았습니다.
그래서 내 질문은 다음과 같습니다
- 그의 결론은 드라이브에 단일 스레드 프로세스 읽기/쓰기가 있는 경우에만 적용됩니다. Linux에 이러한 단일 스레드 프로세스가 있습니까?
- 그렇다면 HDD의 논리 섹터 크기를 4Kn으로 설정하는 것이 좋나요?
답변1
@Tomes의 제안에 따라 @user10489와의 의견 교환을 바탕으로 내 질문에 답하려고 합니다.
물론, 나는 이 주제에 대한 전문가가 아니므로, 필요하다면 내 진술을 자유롭게 수정하거나 수정할 수 있습니다.
하지만 많은 웹사이트에서 사람들이 블록 크기와 섹터 크기를 혼동하기 때문에 먼저 몇 가지 설명이 필요합니다.
- 블록은 파일 시스템이 처리할 수 있는 가장 작은 데이터 양입니다(일반적으로 EXT4와 같이 기본적으로 4096바이트이지만 포맷 중에 변경될 수 있음). Windows 세계에는 클러스터라는 것이 있다고 생각합니다.
- 섹터는 드라이브가 처리할 수 있는 가장 작은 데이터 양입니다. 2010년부터 모든 HDD는 4096바이트 섹터를 사용합니다(예: 물리적 섹터 크기는 4096바이트). 그러나 512바이트 섹터 HDD만 처리할 수 있는 이전 운영 체제와의 호환성을 유지하기 위해 최신 드라이브는 여전히 512바이트 HDD로 표시됩니다(예: 논리 섹터 크기는 512바이트입니다). 운영 체제에 표시되는 논리적 512바이트를 HDD의 물리적 4096바이트로 변환하는 작업은 HDD의 펌웨어에 의해 수행됩니다. 이것은 ... 불리운다고급 포맷 하드 드라이브
e
( 아날로그 및 네이티브의 경우 512e/4Kn HDD라고도 함n
)
따라서 기본 HDD의 논리 섹터 크기는 512바이트입니다. 드라이브 제조업체에서는 이전 운영 체제를 포함한 모든 운영 체제에서 이를 인식할 것으로 기대하기 때문입니다. 그러나 모든 최신 운영 체제는 기본 4K 드라이브를 처리할 수 있습니다(Linux에서는 가능).2010년 커널 2.6.31 이후). 따라서 합리적인 질문은 다음과 같습니다. 2010년 이전 운영 체제를 절대 사용하지 않을 것이라는 것을 알고 있다면 사용하기 전에 새 HDD의 논리 섹터 크기를 512바이트에서 4096바이트로 수정하는 것이 합리적입니까?
누군가 벤치마크 테스트를 했는데요이렇게 하면 실질적인 이점이 있는지 알아보고, 실제로 차이를 만드는 경우는 단일 스레드 R/W 테스트뿐이라는 사실을 알아보세요. 멀티스레드 테스트에서는 큰 차이점을 발견하지 못했습니다.
내 질문은: 이 특정 사용 사례가 실제 생활에 적용됩니까? 예를 들어, Linux는 단일 스레드 R/W 작업을 많이 수행합니까? 이 경우 HDD의 논리 섹터 크기를 4096으로 설정하면 몇 가지 실질적인 이점을 얻을 수 있습니다.
나는 아직도 이 질문에 대한 답을 가지고 있지 않습니다.하지만 다른 관점에서 보면 최신 운영 체제에서는 드라이브의 기본 512바이트 논리 섹터 크기를 4096바이트로 변경해도 아무런 해가 없습니다. 가장 좋은 시나리오는 운영 체제가 이렇게 하면 어느 정도 얻을 수 있을 것입니다. 단일 스레드 R/W 작업에 대한 성능 개선, 최악의 경우 변경 없음.
다시 말하지만, 드라이브가 기본적으로 512바이트 논리 섹터를 사용하는 유일한 이유는 2010년 이전 운영 체제와의 호환성을 유지하기 위한 것입니다. 최신 운영 체제에서는 4096바이트로 설정해도 문제가 되지 않습니다.
마지막으로 주목해야 할 점은 모든 HDD가 이 변경 사항을 지원하는 것은 아니라는 점입니다. 내가 아는 한, 그런 일을 하는 사람들은지원되는 논리 섹터 크기를 명시적으로 보고합니다.:
# hdparm -I /dev/sdX | grep 'Sector size:'
Logical Sector size: 512 bytes [ Supported: 512 4096 ]
Physical Sector size: 4096 bytes
그런 다음 또는 제조업체의 독점 도구를 사용하여 hdparm
변경할 수도 있습니다 .
[ 편집하다 ]
그러나 논리 섹터 크기를 512에서 4K로 변경하는 것이 아마도 좋은 생각이 아닌 이유가 있습니다.위키피디아에 따르면운영 체제 외에도 응용 프로그램도 512바이트 기반 코드를 사용할 수 있는 잠재적인 영역입니다.
그렇다면 4Kn을 지원하는 최신 운영 체제를 사용하더라도 특정 앱이 이를 지원하지 않으면 문제가 발생한다는 뜻인가요?
이 경우 모든 애플리케이션이 4Kn을 처리할 수 있다고 절대적으로 확신하지 않는 한 HDD의 기본 512e 논리 섹터 크기를 유지하는 것이 더 합리적일 수 있습니다.
[편집 2]
다시 생각해보면 최신 하드웨어와 소프트웨어에서는 4K 섹터로 전환하는 것이 그다지 위험하지 않을 수 있습니다. 대부분의 소프트웨어는 파일 시스템 수준에서 작동하며 직접적인 원시 블록 액세스(포맷 도구, 복제 도구 등)가 있는 소프트웨어는 더 이상 사용되지 않는 한 4K 섹터를 지원할 가능성이 높습니다. 당신은 또한 볼 수 있습니다HDD 섹터 크기를 4096바이트로 전환
답변2
저는 파일 시스템에 대해 잘 알지 못하지만 귀하의 기사를 읽은 후 즉시 벤치마크가 어떻게 수행되었는지, 그리고 표시된 그래프가 단순히 데이터를 디스크로 전송하는 데 사용되는 버스로 인해 더 큰 블록 크기를 지원할 수 있는지 스스로에게 질문했습니다.
어쩌면 내가 수집한 링크 중 일부를 "나중에 읽기" 목록에 사용하고 싶을 수도 있습니다. 멀티 스레드 I/O 관련: 실제로 데이터를 디스크에 병렬로 전송하려면 별도의 버스가 필요하다고 가정합니다.
어쨌든, 나는 녹색이지만 아마도 다음 내용을 읽어보고 싶을 것입니다.
두 파일 시스템을 비교합니다..제 의견은 "좋은 벤치마크"입니다.
또한 특정 파일 시스템에 관심이 있는 경우 간단한 매뉴얼 페이지를 알려줄 수 있기를 바랍니다. 옵션은 매뉴얼 페이지에 설명되어 있으며 하단에서 기능을 지원하는 데 필요한 커널 버전을 찾을 수 있습니다. 그러나 귀하의 질문을 읽으면 이것이 이미 귀하에게 분명할 수 있습니다. 답변이 부족해서 죄송합니다.