왜 하이퍼 스레드 4 코어를 가진 i7에서 16 개 스레드가 8 개보다 효율적입니까? (Robocopy) 2 대의 서버 데이터를 전용 PC의 저장

Windows 8.1에서는 Robocopy를 사용하여 2 대의 서버 데이터를 전용 PC의 저장 공간에 저장합니다. 데이터 볼륨은 4,110 개의 폴더에있는 147,314 개의 파일 (66,841,845,760 바이트)입니다.

3 개의 모든 관련 PC에는 4 개의 코어가있는 i7 CPU가 있으며 1Gb 네트워크에 있습니다. 대상의 저장 공간 (D에서 미러 및 스트라이프 됨)은 4 x 4 TB JBOD의 경우를 사용하여 구현됩니다.

CPU의 4 코어와 하이퍼 스레딩으로 인해 Robocopy 스위치 / MT : 8이 가장 잘 작동 할 것이며 8 스레드 이상이 수익자가 아닌 스레드 관리로 인해 잔인 할 것이라고 예상했습니다.

나는 이것을 시험했다. 네 번째 테스트 시리즈의 데이터를 여기에 나열합니다 (기간 : mm : ss).

 1 thread:  59:19
 2 threads: 39:12
 4 threads: 29:13
 8 threads: 24:36
16 threads: 24:19
32 threads: 24:27

16 스레드를 사용하는 몇 초는 무시할 만하지만 그들은 일관성이있다. 모든 테스트 시리즈에서, 즉 16 스레드 테스트 미만의로드 워크가 더 많아서는 안됩니다 (4 가지 테스트 시리즈에서 모두 해당되지 않는 한). 또한 32 스레드는 거의 항상 8 스레드보다 약간 빠릅니다.

질문 : 4 개의 하이퍼 스레드 코어가있는 i7에서 8 개의 스레드보다 16 개의 스레드를 사용하는 것이 기술적 인 이유는 무엇입니까?



답변

TL, dr version : Handbrake를 사용하여 비디오를 코드 변환하는 것과 같이 CPU 집중적 인 작업을 수행했다면 CPU보다 많은 코어를 사용하고 싶지는 않습니다. 작업을 수행 할 곳이 없기 때문입니다. 이 경우 대부분의 쓰레드가 90 %의 시간을 들여서 쓰레드가 더 많은 쓰레드를 읽거나 쓰는 것을 기다리는 것을 기다린다. …에 대한 당신보다는 오히려.


파일 복사는 특히 CPU와 관련된 작업이 아닙니다. 더 많은 코어를 사용하면 다른 작업이 복사 도구를 차단하는 것을 방지하는 데 도움이되지만 각 스레드가 각 코어에서 100 % 근처에서 실행되는 것은 거의 없습니다.

각 복사 스레드는 하드 디스크에 읽기 요청을 보내고 읽기 요청이 완료되기를 기다리는 동안 잠자기 상태가됩니다. 회전 녹슬 대는 디스크의 탐색 시간은 일반적으로 CPU 사용 시간이 9 밀리 초이며 실제로 복사 작업은 “아직 준비가 되셨습니까?”라고 말하면서 회전하지 않습니다. CPU 사이클 낭비. 이렇게하면 해당 스레드가 100 % CPU로 잠기고 리소스가 낭비됩니다. 아니요, 스레드가 읽기를 발행하고 스레드가 읽기가 완료되고 데이터가 다음 단계를 위해 준비 될 때까지 대기 상태가됩니다.

그 동안 다른 스레드는 똑같은 일을하고, 읽기가 차단되고 잠자기 상태가됩니다. 이것은 모든 16 개의 스레드에서 발생합니다. (실제로 동기화에서 벗어남에 따라 읽기와 쓰기가 임의의 시간에 일어날 것입니다.하지만 아이디어는 얻을 수 있습니다)

스레드 중 하나가 데이터를 준비하면 Windows는 스레드를 다시 스케줄하고 쓰 기 위해 처리를 시작합니다. 스레드에 관한 한 프로세스는 같습니다. 그것은 “이 데이터를 위치 x의 파일 x에 기록합니다”라고 말하면 Windows는 데이터를 가져 와서 스레드를 축약합니다. Windows는 파일이 어디에 있는지 파악하기 위해 백그라운드 작업을 수행하고 네트워크를 통해 잠재적으로 지연에 더 많은 시간 (밀리 초 추가) 데이터를 이동 한 다음 쓰기가 성공하면 제어를 스레드로 반환합니다.

CPU 코어에서 항상 하나의 쓰레드가 레코딩되지 않으므로 CPU보다 더 많은 쓰레드가 문제가되지 않습니다. 어떤 스레드도 문제가되지 않을 정도로 오래 깨어있을 수 없습니다.

실행중인 다른 스레드가 많은 단일 CPU 만있는 경우 CPU 병목 현상이 발생할 수 있지만 이러한 종류의 작업 부하가있는 다중 코어 시스템에서는 CPU가 문제라면 놀랄 것입니다.

하드 드라이브 성능에서 병목 현상이 발생할 확률이 높고 드라이브의 읽기 또는 쓰기 버퍼의 대기열 깊이에 도달하고 있습니다. 더 많은 스레드를 사용하여 푸시합니다. 어떤 것 디스크 나 네트워크가 될 수있는 한계에 도달해야하며, 최고의 스레드 수를 알아낼 수있는 유일한 방법은 수행 한 작업을 수행하고이 스레드로 실험하는 것입니다.

SSD에서 SSD로 복사하는 시스템에서는 녹슬지 않는 HDD에서 파일을 복사하는 것보다 대기 시간이 적을 것이므로 네트워크의 양을 줄이고 쓰레기를 녹이기보다는 쓰레드 수가 적을수록 더 좋을 것으로 생각됩니다. 그 가정을지지하십시오.