하이퍼스레드 4개 코어가 있는 i7에서 16개 스레드가 8개 스레드보다 더 효율적인 이유는 무엇입니까? (로보카피)

하이퍼스레드 4개 코어가 있는 i7에서 16개 스레드가 8개 스레드보다 더 효율적인 이유는 무엇입니까? (로보카피)

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

관련된 3개의 PC는 모두 4개의 코어를 갖춘 i7 CPU를 갖추고 있으며 1Gb 네트워크에 있습니다. 대상의 저장 공간(D:에서 미러링 및 스트라이프)은 4 x 4TB 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에서 16개의 스레드를 사용하는 것이 8개의 스레드보다 더 효율적인 이유는 무엇입니까?

답변1

TL;dr 버전: Handbrake를 사용하여 비디오를 트랜스코딩하는 등 CPU 집약적인 작업을 수행하는 경우 작업을 수행할 곳이 없기 때문에 CPU보다 더 많은 코어를 사용하고 싶지 않을 것입니다. 이 경우 대부분의 스레드는 더 많은 스레드가 작동하는 읽기 또는 쓰기를 기다리는 동안 잠자기 시간의 90%를 소비합니다.~을 위한반대보다는 당신을.


파일 복사는 특별히 CPU에 바인딩된 작업이 아닙니다. 더 많은 코어가 있으면 다른 작업이 복사 도구를 차단하는 것을 방지하는 데 도움이 될 수 있지만 각 스레드가 각 코어에서 거의 100% 실행될 가능성은 거의 없습니다.

각 복사 스레드는 하드 디스크에 읽기 요청을 보낸 다음 읽기 요청이 이행될 때까지 기다리는 동안 절전 모드로 전환됩니다. 회전하는 러스트 디스크의 검색 시간은 일반적으로 9밀리초로 CPU 측면에서는 거의 영원하며, 복사 작업은 단순히 "아직 준비됐나요?"라고 말하면서 돌아가지 않습니다. 그리고 CPU 사이클을 낭비합니다. 그렇게 하면 해당 스레드가 100% CPU로 잠기고 리소스가 낭비됩니다. 아니요, 스레드가 읽기를 실행하고 스레드는 읽기가 완료되고 데이터가 다음 단계를 수행할 준비가 될 때까지 절전 모드로 전환됩니다.

그 동안 다른 스레드도 동일한 작업을 수행하고 읽기가 차단되어 절전 모드로 전환됩니다. 이는 16개 스레드 모두에서 발생합니다. (실제로 읽기 및 쓰기는 동기화되지 않은 임의의 시간에 발생하지만 아이디어는 얻을 수 있습니다.)

스레드 중 하나에 데이터가 준비되면 Windows는 이를 다시 예약하고 쓰기 처리를 시작합니다. 스레드에 관한 한 프로세스는 동일합니다. "이 데이터를 y 위치의 파일 x에 쓰기"라고 말하고 Windows는 데이터를 가져와 스레드 일정을 취소합니다. Windows는 파일이 어디에 있는지 파악하기 위해 백그라운드 작업을 수행하고 데이터를 이동한 다음(잠재적으로 네트워크를 통해 지연에 밀리초를 더 추가) 쓰기가 성공하면 스레드에 제어권을 반환합니다.

CPU 코어에서 항상 하나의 스레드가 소모되지 않으므로 CPU보다 많은 스레드가 문제가 되지 않습니다. 문제가 될 만큼 오랫동안 깨어 있는 스레드는 없습니다.

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

하드 드라이브 성능에 병목 현상이 발생하고 드라이브의 읽기 또는 쓰기 버퍼에 대한 대기열 깊이에 도달할 가능성이 높습니다. 더 많은 스레드를 사용하여 푸시하고 있습니다.무엇디스크든 네트워크든 한계가 있으며, 최적의 스레드 수가 무엇인지 알아내는 유일한 방법은 지금까지 수행한 작업을 수행하고 이를 실험해 보는 것입니다.

SSD에서 SSD로 복사하는 시스템에서는 회전하는 Rust HDD에서 파일을 복사하고 네트워크를 통해 밀어넣고 회전하는 Rust에 쓰는 것보다 대기 시간이 짧기 때문에 더 적은 수의 스레드가 더 나을 것이라고 의심하지만 이에 대한 증거는 없습니다. 그 가정을 지지합니다.

관련 정보