[번역] How to Tune vMotion for Lower Migration Times?

출처 : https://blogs.vmware.com/vsphere/2019/09/how-to-tune-vmotion-for-lower-migration-times.html

이전의 블로그 포스트인 "The vMotion Process Under the Hood"에서 vMotion 프로세스 내부를 살펴보았다. 이제 vMotion이 어떻게 작동하는지 이해했으므로 마이그레이션 시간을 훨씬 더 단축하기 위해 현재 보유하고 있는 몇 가지 옵션에 대해 살펴보겠다. 활성화하면 기본적으로 잘 동작한다. 그러나 고대역폭 네트워크가 빠르게 주류가 되고 있는 상황에서 25, 40, 100GbE NIC를 완전히 활용하려면 어떻게 해야 할까? 이 블로그 게시물은 vMotion 튜너와 이들이 프로세스를 최적화하는 데 도움이 될 수 있는 방법에 대해 자세히 설명한다.

스트림과 스레드

vMotion 성능을 조정해서 실시간 마이그레이션 시간을 단축할 수 있는 방법을 이해하려면 먼저 vMotion 스트림의 개념을 이해해야 한다. vMotion의 스트리밍 아키텍처는 vSphere 4.1에 처음 도입되었으며, 그 이후로 계속 개발 및 개선되었다. 실시간 마이그레이션을 수행하기 위한 사전 요구 사항 중 하나는 vMotion 네트워크를 구성하는 것이다. vMotion을 사용하도록 설정하는 경우 해당 ESXi 호스트에서 vMotion 트래픽이 사용하도록 설정된 VMkernel 인터페이스가 하나 이상 필요하다.

vmotion-vmkernelconf1.png

vMotion에 대해 사용하도록 설정된 VMkernel 인터페이스가 있는 경우 단일 vMotion 스트림이 인스턴스화된다. 하나의 vMotion 스트림에는 다음과 같은 세 가지 헬퍼(helper)가 포함되어 있다.

  • Completion helper : vMotion 프로세스 지원
  • Crypto helper : 암호화된 vMotion을 사용할 때 트래픽 암호화 및 암호 해독 전용
  • Stream helper : 데이터를 와이어(네트워크)에 올리는 책임

vMotion-streams.png

'헬퍼(helper)'라는 용어는 내부적으로 쓰이지만, 실제로는 스레드다. 하나의 스레드는 하나의 CPU 코어를 소비할 수 있다. 실시간 마이그레이션 시간을 살펴보면, 마이그레이션 모듈이 소스에서 대상 ESXi 호스트로 메모리를 전송하기 위해 사용하는 대역폭에 따라 마이그레이션 소요시간이 크게 달라진다. 그러나, 우리는 오직 하나의 스트림 도우미, 즉 하나의 CPU 코어와 같은 하나의 스레드에 의해 제한된다. 이는 일반적으로 현대 CPU 패키지 및 10GbE 네트워크를 사용할 때는 문제가 되지 않지만 25GbE 이상의 대역폭 NIC 및 네트워크를 사용할 때는 문제가 된다. 25GbE 이상의 NIC는 하나의 vMotion 스트림에 의해 완전히 활용되지 않을 것이다.

vmotion-cpuutil1.png

vMotion 성능 확장

우리는 하나의 CPU 코어에 의해 구속되는 위험을 완화할 수 있는 방법을 가지고 있다. 가장 간단한 해결책은 스트림 도우미가 포함된 더 많은 vMotion 스트림을 인스턴스화하는 것이다. 그러기 위해서는 두 가지 방법이 있다.

옵션 1: 여러 VMkernel 인터페이스

가장 쉬운 방법은 동일한 NIC 및 네트워크를 사용하여 여러 VMkernel 인터페이스를 구성하는 것일 수 있다. 이를 Multi-NIC vMotion과 혼동하지 말아야 한다. 이는 여러 개의 1GbE NIC 또는 10GbE NIC에 vMotion 트래픽을 분산시키는 데 필요한 모든 사항이며, 이러한 속도는 쉽게 포화되기 때문이다. 단일 NIC에서 vMotion에 대한 대역폭 활용률을 높이는 방법에 대해 논의하고 있다. 그렇게 함으로써, 우리는 실시간 이민 시간을 줄이고 있다.

vMotion-multivmkmltstreams.png

단일 vMotion 스트림은 평균 대역폭 활용 능력이 15GbE이다. 다양한 NIC 속도를 살펴보면 다음과 같다.

  • 25GbE : 1개 스트림 = ~15GbE
  • 40GbE : 2개의 스트림 = ~30GbE
  • 50GbE : 3개의 스트림 = ~45GbE
  • 100GbE : 6개 스트림 = ~90GbE

즉, 100GbE NIC를 사용하여 가용 대역폭을 효율적으로 사용하려면 단일 ESXi 호스트에서 vMotion VMkernel 인터페이스 6개가 필요하다.

추가 VMkernel 인터페이스를 생성하는 단점은 운영 오버헤드. 모든 VMkernel 인터페이스는 모든 ESXi 호스트에서 생성되어야 하며 IP 주소가 필요함 이를 규모에 맞게 수행하는 것은 vSphere 관리 작업에 상당한 영향을 미칠 수 있다. 이 작업은 PowerCLI를 사용하여 상당히 쉽게 자동화할 수 있지만 추가 IP 주소의 필요성은 여전하다.

옵션 2: 단일 vMotion VMkernel 성능 조정

또 다른 방법이 있다. 이 옵션을 사용하면 첫 번째 옵션과 마찬가지로 VMkernel 인터페이스가 무분별하게 확장되고 IP 주소가 필요하지 않게 된다. 그러나 각 ESXi 호스트에서 수동 구성이 필요한 정말로 고급 옵션이다. vMotion 트래픽에 대해 사용하도록 설정된 VMkernel 인터페이스당 Rx 큐(queue) 수와 vMotion Stream Helper 모두에 대한 설정을 적용할 수 있는 기능이 있다.

참고: 이 블로그 포스트의 첫 번째 반복에서, 나는 지금 논의하려는 설정을 변경하기 위해 vsi(VMkernel Sys Info, vsish) shell이 필요하다고 언급했다. 다행히도, 우리는 다른 방법을 가지고 있다.

VMkernel 인터페이스 및 Rx 대기열당 더 많은 vMotion 스트림을 실현하기 위해 다음 설정을 조사하는 것으로 시작하십시오.

vsish-outputPNG.png

위의 스크린샷은 vsi 셸의 두 구성 요소에 대한 기본값을 보여준다. vsi 셸 변경은 영구적이지 않고 권장되지 않으므로 vsi 셸과 관련된 ESXi 호스트 고급 설정을 찾도록 하자.

/net/tcpip/defaultNumRxQueue는 고급 설정 Net.TcpipRxDispatchQueues 변환된다. /config/Migrate/intOpts/VMotionStream 도움말은 고급 설정 Migrate.VMotionStreamHelpers로 변환된다.

기본적으로 VMotionStreamHelpers는 IP당 하나의 스트림을 동적으로 할당하는 설정인 '0'으로 설정된다. 이 설정은 향후 릴리스에서 변경될 수 있으므로 이 설정을 다른 값으로 조정할 때 주의한다. VMotionStreamHelpers을 구성할 때다른 값으로 설정하는, TcpipRxDispatchQueues 설정은 그에 따라 변경되어야 한다. TcpipRxDispatchQueue를 증가시키려면 호스트 메모리를 더 많이 사용해야 한다는 점에 유의한다.

이러한 설정을 변경하려면 UI에서 ESXi 호스트 고급 설정을 간단히 구성하면 된다. 이 예제에서는 VMkernel 인터페이스당 Rx 대기열 2개와 스트림 도우미 2개를 사용하도록 구성하십시오.

vmotionhelper-advsetting.png

vmotionhelper-advsetting2.png

UI 다음으로 PowerCLI를 사용하여 다음과 같은 작업을 수행할 수도 있다.

Get-AdvancedSetting -Entity <esxi host> -Name Net.TcpipRxDispatchQueues | Set-AdvancedSetting -Value '2'
Get-AdvancedSetting -Entity <esxi host> -Name Migrate.VMotionStreamHelpers | Set-AdvancedSetting -Value '2'

두 설정을 모두 조정한 후 ESXi 호스트가 재부팅되어 적용되도록 한다. 이 옵션을 사용하면 VMkernel 인터페이스가 하나 있지만 백그라운드에서는 여러 도우미가 스핀업되고 있다.

vMotion-singlevmkmltstreams.png

이는 훌륭한 솔루션이지만 이를 실현하려면 수동 구성과 ESXi 호스트를 재부팅해야 한다.

결과

결국, 우리는 vMotion에 사용할 수 있는 대역폭을 효율적으로 활용할 수 있는 시나리오를 달성하고자 한다. 이것은 또한 CPU 활용도가 더 높다는 것을 의미한다. 왜냐하면 우리는 여러 개의 스레드를 사용하고, 그래서 여러 개의 CPU 코어를 사용하기 때문이다. 특히 워크로드가 큰 경우 vMotion을 조정하면 마이그레이션 시간을 크게 단축할 수 있다.

vmotion-cpuutil2.png

마치면서

오늘날에는 vMotion에 의해 충분히 활용될 수 있는 고대역폭 네트워크를 위한 여러 가지 옵션이 있다는 것을 알게 되어 좋다. 그러나 두 옵션 모두 수동 구성이 필요하다. 또한 관련 작업을 자동화할 수 있지만 귀사를 위해 보다 단순하게 유지한다. 그렇기 때문에 우리는 정확히 같은 일을 좀 더 역동적으로 할 생각을 하고 있는 것이다. 향후 vSphere 릴리스에서 네트워크 및 NIC 대역폭을 감지할 수 있고 그에 따라 vMotion 튜너를 조정할 수 있는 세부 사항이 제공될 경우 유용할 수 있다. 현재로서는 수동 옵션의 혜택을 받을 수 있다.

 

구강사의 간단 요약

  • vMotion은 일반 상태에서 15gbps 이상의 네트워크 대역폭을 충분히 활용 못한다.
  • 25gbps 이상의 경우 한번에 여러개의 스트림을 사용하도록 구성해주어야 효과적이다.
  • 스트림을 늘리는 방법은 2가지가 있다.
  • vSphere 다음 버전에서는 이러한 작업이 자동으로 튜닝될 것 같다.