문제

소프트웨어 (OS의 일부가 아닌 드라이버가 아니라 응용 프로그램 만)가 가상화 된 환경에서 실행된다는 것을 알고 있다면 코드 및/또는 컴파일러 설정을 최적화하기위한 전략이 있습니까? 아니면해야 할 일과하지 말아야 할 안내서가 있습니까?

이것은 0.0x% 성능 이득이 아니라 성능을 급격히 향상시키는 간단한 것들이나 간단 해 보이지만 가상화 된 환경에서 비참한 것으로 알려진 것들이있을 수 있습니다. 예를 들어 커널 빌드에서 config_paravirt를 활성화하는 것이 쉽게 수행되며 성능을 많이 향상시킬 수 있습니다. 이제 응용 프로그램에 대해 비슷한 것을 찾고 있습니다.

필자의 경우 C ++ 코드와 VMware 일 것입니다. 그러나 가능한 한 언어/제품 공유법으로 질문을 유지하고 싶습니다. 그러한 전략이 있는지 또는 이것이 완전히 시간 낭비가 될지 궁금합니다.

도움이 되었습니까?

해결책

내가 당신에게 줄 수있는 유일한 조언은 버기 풍선 드라이버를 찾는 동안 mlock () / mlockall ()을 신중하게 사용하는 것입니다.

예를 들어, Xen 게스트가 1GB로 부팅 한 다음 512MB로 풍선을 뿌리면 권한있는 도메인이 Paravirtualized 커널이 실제로 프로세스에 약속 한 메모리를 보지 못했다는 것은 매우 일반적입니다 (IE Committed_A). 실제로, Xen의 경우,이 값이 Xenbus에 배치되지 않는 한, 특권 호스트는 그러한 풍선이 무엇을 할 것인지 전혀 모른다. 나는 이것이 커널이 어떻게 구성되는지에 따라 KVM과 일치한다고 생각합니다. 그러나 귀하의 질문은 우리가 그런 것들에 대해 아무것도 모른다고 생각합니다 :)

따라서 단순히 페이징 할 수없는 물건을 보호하고 항상 '하늘이 떨어지는'시나리오를 설명하십시오.

마찬가지로, posix_fadvise () / posix_madvise ()를 사용하여 PV 커널에 버퍼링이 필요한 금액 또는 필요한 금액을 알려주는 것이 항상 좋은 생각입니다.

그 외에도, 당신은 할 수있는 일이 거의 없습니다. 당신은 Paravirtualized 커널에 대해서만 이야기하기 때문에, 프로세스를 처음부터 가상화에 대해 잊어 버리도록 설계되었습니다.

KVM을 많이 사용하지는 않지만 앞으로 더 많이 탐색 할 계획입니다. 그러나 최근에 작성한 물건의 90%는 특별히 Paravirtualized Xen 게스트에서 실행되도록 설계되었습니다. 약간의 Xen / C 중심이되어 죄송하지만, 그것이 내 경험이있는 곳이고 PV_OPS는 메인 라인 (곧 Xen-0 Ops)에 있습니다. :)

좋은 질문, btw :)

편집하다:

내가 '조심하지만 신중한'이라고 말했을 때, 나는 보수적 인 것보다 한 단계를 의미했습니다. 프로그램이 대부분의 기능에 필요한 작업 구조를 할당하면 잠그십시오. 거대한 파일을 읽기 위해 할당 버퍼를 잠그지 마십시오. 또한 특히 동시성을 구성하는 데 도움이되는 경우 메모리 매핑 파일 사용에 대한 커널을 조언하십시오.

요컨대, 호스트 커널을 메모리 관리하고, 중요한 할당 된 블록이 더러운 페이징에 던져지지 않도록하십시오. 할당하는 모든 것을 잠그면 프로그램보다 프로그램보다 더 중요하다고 가정하지 마십시오. :)

모호한 죄송합니다. 내가 생각해 낼 수있는 가장 좋은 문구는 '조심하지만 신중한'것입니다.

다른 팁

나는 그것이 I/O에 관한 모든 것을 발견했다.

VMS는 일반적으로 IO에서 엄청나게 나쁘게 빨다. 이것은 실제 주석보다 다양한 것들을 훨씬 더 나쁘게 만듭니다.

스와핑은 특히 나쁜 살인자입니다. IO가 너무 느리기 때문에 VM 성능을 완전히 망쳐 놓습니다.

대부분의 구현에는 VMS간에 많은 양의 IO 경합이 있습니다. 나는 이것을 피하거나 현명하게 처리하는 것을 보지 못했습니다.

따라서 가능한 경우 임시 파일에 Ramdisc를 사용하지만 교환하지 마십시오. 더 나빠질 수 있기 때문입니다.

나의 유일한 조언은 당신의 기억을 유지하고 가능하면 IO를 낮게 사용하는 것입니다.

VM의 IO는 물리적 하드웨어에 비해 매우 느립니다. 당신이 그것을 피할 수 있다면 그것을 피하십시오.

실제 하드웨어에서 느린 것은 시스템이 가상화 될 때 더 느리게 진행됩니다. 가상화 기술이 얼마나 느려지는지에 따라 다릅니다.

특히 가상 환경 외부의 세계와 I/O가 필요한 것은 피하십시오. 사물이 설정되는 방법에 대해서는 화면에 그리기, 스와핑 및 디스크 및 네트워크 I/O가 포함됩니다. 그것은 대략적으로 중요한 순서로 중요합니다.

가능하면 열 살짜리 컴퓨터를 위해 글을 쓰는 척하십시오. 응용 프로그램이 1999 데스크탑 PC 또는 랩톱에서 작동하는 경우 괜찮아 야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top