
나는 500Gb 디스크를 가지고 있으며 이를 세 개의 파티션으로 나누면 Linux 성능에 차이가 있는지 결정하려고 합니다. 즉, 동일한 디스크의 서로 다른 파티션에 여러 스레드가 쓰는 경우 - 첫 번째 스레드가 디스크 1의 파티션 1에 쓰는 경우 두 번째 스레드가 동일한 디스크의 파티션 2에 쓰기를 기다려야 합니까?
답변1
디스크는 물리적 쓰기 헤드가 있는 물리적 장치입니다(SSD는 잠시 무시함). 한 번에 한 위치에만 쓸 수 있습니다. 동시에 쓰기를 시도하는 여러 스레드는 서로 경쟁하게 되며 실제로 헤드가 올바른 위치를 찾는 데 더 많은 작업을 수행해야 하므로 전체 속도가 느려집니다. 가장 빠른 쓰기는 인접한 섹터에서 하나의 길고 연속적인 오른쪽입니다.
SSD에는 물리적인 측면이 없지만 IO 속도에 제한이 있습니다. 스레드를 추가해도 기본 병목 현상은 변경되지 않으므로 속도가 증가하지 않습니다.
이것은 모두 주어진 스레드가 최대 속도로 쓸 준비가 되었다고 가정합니다. 응용 프로그램이 다른 리소스(사용자 입력, 네트워크)에 의존하는 경우 스레드를 추가하면 해당 스레드가 디스크에 기록할 데이터를 '대기열에 넣기' 위해 더 많은 작업을 수행하므로 쓰기가 더 빠르게 나타날 수 있습니다.
답변2
아니요. 그 반대입니다.일반적인 자기 하드 디스크는 서로 가까운 디스크 영역에 쓸 때 성능이 가장 좋습니다. 두 개의 큰 파일이 디스크의 거의 동일한 영역에 한 번, 매우 먼 부분에 한 번 기록되는 간단한 경우를 생각해 보십시오. 첫 번째 경우에는 쓰기 헤드가 실질적으로 연속적으로 움직일 수 있지만, 후자의 경우 두 개의 먼 지점 사이에서 헤드를 이동하는 데 상당한 시간이 소요됩니다.
일반 파일 시스템 드라이버는 언제, 어디서 계속해서 작성해야 하는지에 대한 합리적인 결정을 내릴 수 있도록 이미 고도로 최적화되어 있습니다. 두 개의 파일 시스템 드라이버 인스턴스를 사용하여 완전히 다른 디스크 영역에 동시에 쓰는 경우 이러한 최적화 중 많은 부분이 손실됩니다. 각 인스턴스는 뛰어난 쓰기에 대해 제한된 보기를 갖습니다.
SSD(물리적 거리를 처리하는 데 더 많은 시간을 소비하지 않음)조차도 한 번에 큰 영역을 쓸 때 더 나은 성능을 발휘합니다(여기서 작은 쓰기를 한 다음 거기에 작은 쓰기를 수행하는 대신 전체 블록만 확장). 따라서 SSD의 경우에도 단일 파일 시스템이 별도의 파티션에 있는 여러 파일 시스템보다 더 나은 성능을 발휘할 것으로 기대할 수 있습니다.
파티션에 대한 아이디어가 하나의 파일 시스템이 가득 차서 다른 파일 시스템에 대한 쓰기를 차단하지 않도록(각 폴더에 대해 서로 다른 최대 공간 예약) 확인하려는 것에서 비롯된 경우 단일 파일 시스템에 대한 솔루션도 있습니다. 그럴 때 찾으시는 키워드는몫.