Python: 가상화가 성능에 미치는 영향

Python: 가상화가 성능에 미치는 영향

나는 이 질문이 이전에도 다소 비슷하게 요청되었다는 것을 알고 있지만 내 질문은 더 구체적이고 기존 질문은 오래되었습니다. 따라서 상황이 많이 변경되었을 수 있습니다(예를 들어 벡터 명령에 대해 생각).

간단히 말해서 기본적으로 항상 사용해야 하는 Python 모듈이 있고 내 Python 코드는 VM(유형 1 및 2)에서 훨씬 느리게 실행됩니다(이중 런타임). 모듈 자체는 대부분 C 라이브러리의 래퍼/API이지만 광범위하지는 않습니다.

Python 자체가 영향을 받는지 아니면 모듈에만 영향을 미치는지 알아내려고 노력 중입니다. 그렇다면 VM에서 Python을 실행할 때 Python이 많은 어려움을 겪는다는 것이 알려져 있습니까?

답변1

귀하의 질문에서 사과를 사과와 비교하고 있는지 알 수 있는 방법이 없습니다.

올바르게 구성되고 합리적으로 로드된 가상화 환경에서는 대부분의 로드가 베어메탈에서보다 최대 몇 퍼센트 더 느리게 실행될 것으로 예상합니다. 코드가 대규모로 확장 가능하고 사용 가능한 모든 하드웨어 리소스를 활용할 수 있다면 가상화된 환경에서 성능이 크게 저하될 것으로 예상됩니다. 특히 리소스가 부족한 경우 더욱 그렇습니다. 코드가 특정 가속기 하드웨어에 종속되는 경우 가상화의 영향은 구현에 따라 다릅니다.

답변2

당신은 아무것도 증명하지 않았고 분리하지 않은 수많은 변수가 있습니다. Python 버전, 운영 체제 버전, 하드웨어 리소스, VM 리소스 할당량, CPU 모델 등이 있습니다.


코드에서 구체적으로 어떤 기능에 시간이 걸리는지 프로파일링하세요. 시각화해 보세요불꽃 그래프.Python 기반 스택 샘플링구현하면 좋겠지만 C 기능을 얼마나 잘 포착하는지 모르겠습니다. 이 경우 C 라이브러리와 OS에 대한 더 나은 가시성을 제공하는 운영 체제 기반 프로파일러(eBPF, xperf)를 사용해 볼 수 있습니다.

어떤 기능이 느린지 자세히 연구해보세요. 그것이 무엇인지 알아보고, 가능하다면 소스 코드를 얻으세요. 시스템 호출을 계산하여 운영 체제에 요청하는 내용을 측정합니다.

CPU, 메모리, 디스크, 네트워크 등 제한적인 리소스를 찾습니다. 성능 모니터링 도구를 통해 호스트 수준에서 해당 리소스를 측정합니다.

다양한 환경, 베어메탈, 다양한 VM 유형, 다양한 하드웨어의 결과를 비교해 보세요. CPU나 RAM이 아닌 VM 호스트의 리소스를 과도하게 커밋하지 마십시오. 이는 베어메탈 전용 호스트와 비교할 때 불공평합니다.


실제로 이는 환경의 제한 요소가 무엇인지 알아보기 위한 일반적인 성능 조사입니다. Python을 사용하면 프로파일링 및 최적화를 위해 코드 런타임이 변경될 수 있습니다.

답변3

문제의 코드가 많은 컨텍스트 전환을 수행할 가능성이 있습니다(및/또는 하이퍼바이저가 물리적 코어 주위로 가상 코어를 이동하여 컨텍스트 전환을 악화시키고 있음). 컨텍스트 전환은 베어메탈보다 하이퍼바이저에서 최대 100배 더 비쌀 수 있습니다. 캐시 누락은 하이퍼바이저가 다양한 물리적 코어 주변의 가상 코어를 예약하기 때문에 큰 요인이 될 수도 있습니다.

이러한 오버헤드 중 일부를 완화하려면 가상 코어를 물리적 코어에 고정하고 기본 CPU 토폴로지를 VM(소켓/코어/스레드)에 노출하고 VM 전체를 단일 NUMA 노드 내에 유지하고 게스트에게 전체 기능을 제공하지 마십시오. 코드가 캐시/메모리 대기 시간에 민감한 경우 호스트에 있는 CPU 코어/스레드 집합입니다.

다양한 워크로드에 대한 하이퍼바이저의 성능은 베어메탈보다 훨씬 더 나쁠 수 있습니다.거기에 있는 숫자는 몇 년 전의 것이지만 나는 이러한 것들을 합리적으로 정기적으로 다시 테스트했으며 지난 10년 동안 상황이 크게 변하지 않았습니다.

관련 정보