![멀티스레드 애플리케이션이 VMWare에서 Ubuntu의 모든 코어를 사용하도록 만드는 방법은 무엇입니까?](https://linux55.com/image/2547/%EB%A9%80%ED%8B%B0%EC%8A%A4%EB%A0%88%EB%93%9C%20%EC%95%A0%ED%94%8C%EB%A6%AC%EC%BC%80%EC%9D%B4%EC%85%98%EC%9D%B4%20VMWare%EC%97%90%EC%84%9C%20Ubuntu%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%EC%BD%94%EC%96%B4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8F%84%EB%A1%9D%20%EB%A7%8C%EB%93%9C%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 작은 CPU의 4개 코어를 모두 사용하여 Windows에서 잘 실행되는 대형 플랫 파일을 처리하는 멀티 스레드 C++ 응용 프로그램(pThreads 사용)을 가지고 있습니다. 고객은 Red Hat 64 Xeon CPU 시스템에서 동일한 코드를 실행하기를 원했습니다. 그래서 여기에서 컴파일하고(g++) VMWare의 Ubuntu에서 실행했으며 코드는 4개의 코어 중 하나만 사용했습니다. 그래서 저는 그것이 VMWare 문제라고 생각하고 클라이언트에 코드를 보냈습니다. 동일한 작업을 수행합니다(원격으로 알 수 있는 한 - mpstat -P ALL은 CPU가 거의 로드되지 않았음을 보여줍니다). Red Hat이 스레드를 분산시키도록 강제로 수행해야 할 작업이 있습니까? 제가 뭔가를 놓치고 있는 걸까요? 다음에는 "좋은" 우선순위를 바꾸려고 노력 중입니다. 그런데 뭔가 빠진 것 같은 느낌이 듭니다.
코드를 게시할 수 있지만 앞서 말했듯이 pThreads 등을 사용하면 Windows에서 잘 작동합니다.
답변1
이것이 귀하의 VM 환경이나 코드에 문제가 있는지 진단해 보겠습니다. 가상 머신에 관해 고려해야 할 몇 가지 사항은 다음과 같습니다.
여러 CPU에 대한 액세스를 허용하도록 vmware를 구성했습니까? 최신 버전에 대한 경험은 없지만, 예전에는 특별히 허용해야 했던 내용이었습니다. VirtualBox에는 게스트가 사용할 수 있는 CPU 수에 대한 가상 머신 구성 옵션이 있습니다.
cat /proc/cpuinfo
Ubuntu 가상 머신에 CPU가 두 개 이상 있으면 어떻게 되나요?일반적인 작업(예: 커널 소스로 이동하여 커널 컴파일 실행)을 수행하는 경우 여러 CPU를 올바르게 사용할 수 있습니까
make -j10
?
이러한 오류가 발생하면 코드에 문제가 있는 것이 아니라 가상 머신이 잘못 구성된 것입니다.