Dentre os recursos oferecidos pelo escalonador do AIX, algumas se destacam pela capacidade de alterar dinamicamente características do sistema operacional levando em consideração a sua interação com o Hypervisor. Essa cooperação, não tão sofisticada em outras plataformas, permite troca de informações e adaptações em situações específicas que melhoram o desempenho tanto do sistema operacional como da plataforma de virtualização em geral.
A partir do AIX 5.3 ML 3, o escalonador conta com o recurso Virtual Processor Folding, cuja ação principal é aumentar e diminuir a quantidade de processadores virtuais do sistema operacional de acordo com a sua carga de trabalho.
Em um cenário onde uma LPAR, configurada com processadores compartilhados, possui muitos processadores virtuais para uma determinada carga de trabalho, a cada intervalo de processamento (10 milissegundos) o Hypervisor irá ceder para as outras LPARs os ciclos de CPU não utilizados. Neste cenário, portanto, não ocorre desperdício de processamento.
Acontece que, no próximo intervalo de processamento, novamente o Hypervisor será obrigado a distribuir CPU para todos os processadores virtuais desta LPAR ociosa, e mais uma vez irá ceder os ciclos de CPU não utilizados para as outras LPARs.
O Virtual Processor Folding detecta situações como esta descrita, em que a carga de trabalho poderia ser consolidada em menos processadores virtuais, e desabilita dinamicamente alguns processadores da LPAR. Esta checagem é feita pelo sistema operacional a cada segundo.
Imaginando que esta LPAR está configurada com 3 processadores virtuais e 0.3 de unidades de processamento, isso significa, muito abreviadamente, que ela tem o direito de executar seus processos por 3 milissegundos durante cada intervalo de 10 milissegundos pré-determinado pelo Hypervisor.
Quando um processo estiver em execução nesta LPAR, o que seria melhor: executar durante 3 ms em um único processador virtual ou executar por 1 ms em cada um dos 3 processadores virtuais? Antes de tentar responder, considere que o Hypervisor faz uma associação de um processador virtual por processador físico.
Mantê-lo em um único processador virtual evita que o Hypervisor distribua ciclos de vários processadores físicos para esta LPAR de maneira desnecessária, deixando-os disponíveis para outras LPARs. Consequentemente, o Hypervisor terá um overhead menor e também diminuirá a quantidade de trocas de contexto (context switches), visto que o processador físico é compartilhado entre todos os processadores virtuais das LPARs.
Além disso, considerando que cada processador tem o seu próprio cache L2/L3, manter a execução do processo no mesmo processador aumentaria a probabilidade de que os dados necessários para sua execução estejam nestas memórias (cache hits), aumentando seu desempenho. Conceito este conhecido como “afinidade de processador”.
Quando um processador virtual é desabilitado pelo Virtual Processor Folding, ele não é dinamicamente removido da partição como em uma operação de DLPAR. Ele continua presente no sistema operacional, entretanto, é configurado para não executar mais processos.
No momento em que a carga de trabalho aumentar e o sistema operacional detectar a necessidade de mais processadores, ele ativa novamente os processadores virtuais desabilitados.
E quanto as aplicações, elas podem sem afetadas pela desativação dos processadores virtuais?
Não. A ativação e desativação dos processadores virtuais é uma ação interna do sistema operacional e, portanto, transparente para as aplicações. Ainda não é conhecida uma razão técnica para desabilitar o Virtual Processor Folding.
Tuning
Agora sabendo que a quantidade de processadores virtuais é alterada dinamicamente pelo Virtual Processor Folding, existem algumas regras básicas de configuração para as LPARs que precisam de desempenho de CPU:
- Para LPARs no modo Uncapped, deve-se configurar a quantidade de processadores virtuais igual à quantidade de processadores físicos no Shared Processor Pool.
- Para LPARs no modo Capped, configure o mínimo de processadores virtuais e monitore.
- Se o Virtual Processor Folding estiver desabilitado, não configure a quantidade de processadores virtuais de todas as LPARs mais do que quatro vezes a quantidade de processadores físicos no Shared Processor Pool.
Caso uma LPAR no modo Uncapped estiver com um número muito baixo de processadores virtuais, ela não conseguirá tirar muita vantagem dos ciclos de CPU doados pelo Hypervisor. Caso esteja com um número muito alto, e o Virtual Processor Folding estiver desabilitado, ocorrerá muitas trocas de contexto e o cache perderá sua eficiência, resultando em perda de desempenho.
Ativando e desativando o Virtual Processor Folding
O comando schedo é usado para habilitar, desabilitar ou alterar os parâmetros do Virtual Processor Folding.
Novamente, recomenda-se manter esse recurso habilitado. A possibilidade de desabilitá-lo existe apenas para fins de comparação, ou no caso de uma ferramenta ou software possuir alguma incompatibilidade.
Para verificar se o recurso está habilitado (0 = habilitado, -1 = desabilitado):
vpm_xvcpus = 0
Para desabilitá-lo, altere o valor do parâmetro vpm_xvcpus para -1:
Além da possibilidade de habilitar e desabilitar o recurso, o parâmetro vpm_xvcpus pode ser definido com o número de processadores que o sistema operacional irá habilitar quando ocorrer uma mudança na carga de trabalho. Por exemplo, o comando a seguir altera o valor de vpm_xvcpus para 1:
Agora, quando o sistema operacional determinar a quantidade necessária de processadores virtuais para executar a carga de trabalho, ele adiciona mais um processador a esta conta. Então, se a partição precisar de 4 processadores, com o parâmetro vpm_xcvpus configurado em 1, o número de processadores virtuais será definido em 5.
Referências
Griffin, Nigel (08-08-2011).AIX Virtual Processor Folding is Misunderstood. AIXpert Blog. Acessado em 09-08-2013.
Cordero, Mel, L et al. Redbook – IBM PowerVM Virtualization Introduction and Configuration. IBM, 2013.