가상 머신에서 CPU 선호도(예: SCHED_SETAFFINITY)를 설정한다는 것은 무엇을 의미합니까?

가상 머신에서 CPU 선호도(예: SCHED_SETAFFINITY)를 설정한다는 것은 무엇을 의미합니까?

프로세스/스레드 선호도를 설정하는 방법에는 여러 가지가 있습니다.
예를 들어 운영 체제에 특정 코어에서만 실행되도록 지시하는 것입니다.
또는 스레드가 특정 코어에서 실행되도록 지시합니다.

CPU가 실제로 가상인(어쨌든 물리적 CPU에 매핑되는) 가상 머신에서 이는 무엇을 의미합니까?

답변1

VM 내 및 vCPU 내 선호도만 설정합니다. 이는 실제 호스트 CPU와 정적 관계가 없을 수 있지만 VM 호스트가 가상 CPU를 별도의 물리적 CPU(아마도 그래야 함)에 유지하려고 시도한다고 가정하면 게스트에 선호도를 설정하면 프로세스를 계속 유지하는 데 도움이 될 수 있습니다. 단일 물리적 CPU가 우수합니다. CPU(호스트 및 게스트의 로드 유형에 따라 다름)

게스트의 가상 CPU 수만큼 호스트에 물리적 CPU가 있는 경우 VM 호스트는 가상 CPU를 이동할 필요가 없습니다. 그러나 더 많은 VM이 있을 수 있으므로 VM을 이동해야 하며 게스트에서 이에 대해 수행할 수 있는 작업이 없습니다. 필요한 경우 호스트 수준에서 선호도를 설정해야 합니다.

즉, 호스트 시스템 CPU를 가상 머신에 노출하는 특별한 드라이버가 없다고 가정합니다.

답변2

가상 머신이 이를 통해 이점을 얻을 수 있는 사례를 볼 수 있습니다.SCHED_SETAFFINITY(2). 각각 2개의 "가상 소켓"(동일한 호스트에 있는 2개의 서로 다른 물리적 CPU에 매핑 및 고정됨)과 2개의 "가상 코어"가 있는 "특수" VM을 살펴보겠습니다. 맨페이지에 설명된 대로 게스트 내부에 대한 선호도를 설정하려는 프로세스의 성능 비용이 더 낮은지 확인할 수 있습니다.

스레드가 단일 CPU에서 실행되도록 제한하면 스레드가 한 CPU에서 실행을 중지했다가 다른 CPU에서 실행을 재개할 때 발생하는 캐시 무효화로 인한 성능 비용도 방지됩니다.

왜 이것을 설정해야 합니까? 모르겠어요 :) 하지만 2개의 가상 소켓이 있으면 여전히 캐시 무효화 문제가 발생합니다.

24코어를 사용한 벤치마크도 있습니다vmware에서는 다양한 구성으로 사용 가능합니다(소켓 1개, 24개 코어 - 24개 소켓, 1개 코어 - 2소켓, 12개 코어). 과거에는 프로세스가 소켓에 바인딩되었음을 증명할 수 있으면 "CPU 소켓 권한"(cof, cof, Oracle...)이 필요한 소프트웨어에서 이 선호도 집합이 작동했지만 오늘날에는 이러한 선호도 집합이 많이 있습니다. 가상 머신을 실행하는 전체 물리적 CPU에 대한 라이센싱을 요구하는 가상 환경 라이센싱에 대해 점점 더 명확해지고 있는 소프트웨어 솔루션입니다. 보시다시피 vmware 솔루션은 보유하고 있는 vSocket 수에 따라 다양한 vNUMAS를 생성합니다.

이 외에도 게스트 내에서 선호도를 설정하면 하이퍼바이저에서 가상 머신을 이동할 때 선호도를 설정하여 수행되는 작업이 더 복잡해질 수 있습니다.

관련 정보