Manual do xl.cfg(5) em inglês disponível em:
Descrição - Para criar uma VM - terminologia de
Xen para máquina virtual, também chamada de visitante (guest) - o comando xl requer um arquivo de configuração com as definições apropriadas. Tipicamente, o arquivo em
/etc/xen/domain.cfg é o local apropriado para armazenar perfis de máquinas virtuais que devem ser criadas. O valor domain.cfg é o nome do arquivo de configuração.
Sintaxe - Um arquivo de configuração de domínios consiste em uma série de binômios do tipo chave=valor. Algumas chaves são mandatórias, outras são opções gerais que podem ou não ser aplicadas a um ou outro tipo de visitante. Os tipos principais de visitantes são máquinas PV ou máquinas HVM.
Uma chave pode assumir os seguintes tipos de valores:
- "STRING" - Uma cadeira de caracteres. Limitada por aspas duplas ou simples.
- NUMBER - Um valor numérico. Pode ter o formato decimal, octal (usando o prefixo 0) ou hexadecimal (usando o prefixo 0x).
- BOOLEAN - Um valor booliano que representa verdadeiro (true) ou falso (false) representado pelo número um e zero respectivamente.
- [VALUE; VALUE; ... ] - Uma lista, separada por ponto e vírgula contendo qualquer um dos tipos citados anteriormente, desde que sejam homogêneas e não aninhadas. A semântica da chave define o tipo de valor requerido. Os pares (chave=valor) podem ser separados entre si por um caractere de nova linha ou pelo ponto e vírgula.
Opções:
Itens mandatórios - As seguintes chaves são mandatórias em qualquer tipo de máquina virtual.
name="NAME" - Define o nome do domínio. Nomes de domínio devem ser únicos, escritos em ASCII, sem caracteres especiais ou espaços em branco.
Tipos de visitantes:
- builder="generic" - Define um domínio PV, esse é o padrão por omissão.
- builder="hvm" - Define um domínio HVM. Esse tipo de domínio é completamente virtualizado. Isso significa que ele emula uma BIOS, dispositivos de disco, periféricos de rede, etc. Por omissão são criados domínios PV. Domínios PV são adequados para hospedar sistemas operacionais visitantes Xen-aware.
Opções gerais
Essas opções se aplicam a qualquer tipo de visitante.
Alocação de CPU:
- pool="CPUPOOLNAME" - Nomeia as vcpus do visitante, criando um pool de CPUs.
- vcpus=N - Inicializa o visitante com N cpus.
- maxvcpus=M - Define o número máximo de vcpus. Uma máquina virtual pode começar o dia com N vcpus e chegar a usar M vcpus no fim do dia.
- cpus="CPU-LIST" - Lista as cpus (físicas) que o visitante pode utilizar. Essa lista pode assumir vários formatos que podem ser combinados entre si:
- "all" - Permite que as vcpus se associem a todas as CPUs de um host.
- "0-3,5^1" - Neste exemplo, podem ser utilizadas as cpus de 0 até 3, mais a 5. Exceto a 1 (^1). Uma combinação do tipo "all,^6" permite todas, menos a 6.
- "nodes:0-3,node:^2" - Permite todas as vcpus do visitante executar em cpus de um nó NUMA 0,1,3 (exceto o 2). Se as cpus 0-3 pertencem ao nó 0, cpus 4-7 pertencem ao nó 1, e cpus 8-11 ao nó 3, o comando acima significa que todas as vcpus do visitante irão executar nas cpus 0-3,8-11.
Combinando essa notação com uma das anteriores é possível, por exemplo, "1,node:2,^6". Denotando que todas as vcpus do visitante executam em cpu 1, todas as cpus do nó 2, exceto a 6. A combinação "all,^nodes:1" define que as vcpus podem executar em todas as cpus, exceto as do nó 1.
- ["2", "3-8,^5"] - Neste exemplo, vcpu 0 do visitante será executado na cpu 2 do host e a vcpu 1 pode escolher entre as cpus 3 até 8, exceto a 5.
Na omissão desse parâmetro, nenhuma vcpu é ligada logicamente com uma cpu física. Se essa opção for definida, a interseção da vcpu com a máscara de pinagem (nome dado a esse tipo de associação), informada aqui, e a máscara de afinidade soft, fornecida em cpus_soft= (se houver), é utilizada para computar a afinidade total do domínio em relação a cpus e para fins de alocação de memória.
- cpus_soft="CPU-LIST" - Define uma lista de cpus cuja afinidade soft é computada junto com a afinidade hard (pinagem). Quando utilizando seus créditos no escalonador, define quais cpus e vcpus o domínio prefere. Uma lista é definida como acima na opção cpus=. Se essa opção não for definida, as vcpus do visitante não terão preferência por uma cpu. Se essa opção for especificada, a interseção da máscara de afinidade soft, fornecida aqui, e a pinagem, fornecida via cpus= (se houver), é utilizada para computar a afinidade de nó e para fins de alocação de memória.
Se essa opção não é definida (e cpus= também não), libxl automaticamente tentará alocar o visitante no menor número possível de nós. Uma abordagem heurística é utilizada para escolher o melhor nó (ou conjunto de nós), que permitam maximizar o desempenho do visitante e, ao mesmo tempo, obter um balanceamento entre uma utilização eficiente dos recursos de cpu e memória.
Neste caso, a afinidade soft para todas as vcpus serão configuradas para pcpus pertencentes a um nó NUMA escolhido durante a localização. Para detalhes técnicos consulte a documentação em docs/misc/xl-numa-placement.markdown.
Escalonamento de CPU
- cpu_weight=WEIGHT - Um domínio com peso 512 obtém o dobro de CPU de um domínio 256. O padrão é 256, a faixa vai de 1 até 65.535. O peso é um atributo honrado pelos escalonadores credit, credit2 e sedf.
- cap=N - O valor em cap opcionalmente fixa a soma máxima de ciclos de CPU que um domínio é capaz de consumir. O cap é expresso em percentual de utilização de CPU. O valor 100 representa uma CPU, 50 expressa metade da utilização de uma CPU, 400 representa 4 CPUs, etc. O valor zero significa ilimitado. Esse parâmetro é honrado por credit e credit2.
- period=NANOSECONDS - O escalonamento EDF normal é medido em nanosegundos. Isso significa que a cada período o domínio pega uma fatia de tempo de cpu. Essa fatia é chamada de slice (fatia). Isso é honrado por sedf.
- slice=NANOSECONDS - O escalonamento EDF normal é medido em nanosegundos. Isso significa que a cada período que o domínio pega uma fatia de tempo de cpu. Isso é honrado por sedf.
- latency=N - O período escalado se o domínio se encontra aguardando uma carga alta de I/O terminar. Isso é honrado por sedf.
- extratime=BOOLEAN - Uma flag que define se o domínio pode executar algum tempo extra. Isso é honrado por sedf.
Alocação de Memória
- memory=MBYTES - A fatia total em MB de memória RAM que é atribuída ao visitante quando ele é inicializado.
- maxmem=MBYTES - A soma total de memória que o visitante pode ver. Esse valor DEVE ser igual ou maior que memory=. A combinação desses dois parâmetros exige a presença de um driver ballon que permite a criação de um visitante "pre-balloned". Um visitante HVM sem um driver ballon falhará durante a inicialização.
Ações Causadas por Eventos
on_poweroff="ACTION" - Define o que deve ser feito se o domínio tentar encerrar a si mesmo. As ações possíveis são:
- destroy - Destrói o domínio.
- restart - Destrói o domínio e imediatamente cria outro com a mesma configuração.
- rename-restart - Renomeia o domínio terminado, e imediatamente cria um novo domínio com a mesma configuração do domínio anterior.
- preserve - Mantém o domínio. Ele pode ser objeto de auditoria, e mais tarde pode ser destruído com xl destroy.
- coredump-destroy - Escreve um despejo de núcleo em /var/xen/dump/NAME e destrói o domínio.
- coredump-restart - Escreve um despejo de núcleo em /var/xen/dump/NAME e reinicia o domínio.
A ação padrão para on_poweroff é destroy.
on_reboot="ACTION"
- Ação que será tomada se o domínio encerra por uma razão de reinício (reboot). O padrão é restart.
on_watchdog="ACTION" - Ação que será tomada se o domínio encerra em função de um timeout de um watchdog de Xen. O padrão é destroy.
on_crash="ACTION" - Ação tomada se o domínio quebrar. O padrão é destroy.
Boot Direto do Kernel
O boot direto do kernel permite bootar a partir de um kernel e o initrd relacionado, armazenados no host da máquina física. Isso permite que argumentos e comandos em linha sejam passados diretamente para esse kernel. Um visitante PV suporta boot direto do kernel. Visitantes HVM podem bootar diretamente do kernel com limitações. Essa função é suportada se estiver utilizando qemu-xen e seabios; e não é suportada quando estiver usando stubdom-dm e antigas rombios.
- kernel="PATHNAME" - Define a imagem do kernel que será carregada.
- ramdisk="PATHNAME" = Define um arquivo específico de ramdisk.
- cmdline="STRING" - Define uma cadeia de caracteres que será anexada como uma linha de comandos ao kernel. Quando esse comando é utilizado, os valores em root= e em extra= são ignorados.
- root="STRING" - Define uma cadeia de caracteres passada para o kernel.
- extra="STRING" - Define uma cadeia de caracteres com argumentos extras passados para o kernel.
Outras opções:
- uuid="UUID" - Define a UUID do domínio. Se não for definida, um valor novo e aleatório será criado.
- seclabel="LABEL" - Define uma etiqueta de segurança XSM para o domínio.
- init_seclabel="LABEL" - Define uma etiqueta de segurança XSM para o domínio a ser utilizada temporariamente durante sua construção. A etiqueta XSM pode ser alterada pela etiqueta seclabel de tempo de execução (definida em seglabel=), uma vez que a construção esteja completa e antes de retirar a pausa na execução do domínio. Com uma política de segurança de construção apropriada (como nomigrate_t definido), isso pode ser utilizado para construir um domínio cuja memória não é acessível pela pilha de ferramentas (toolstack) do domínio zero.
- nomigrate=BOOLEAN - Desativa a migração desse domínio. Isso ativa as características que são incompatíveis com a migração. Isso é limitado atualmente a flag TSC em cpuid resultando na não emulação de TSC - Time Stamp Counter.
- driver_domain=BOOLEAN - Define esse domínio como um domínio driver. Isso ativa funcionalidades necessárias para executar um domínio driver.
Dispositivos
As seguintes opções definem a paravirtualização, emulação e dispositivos físicos que o visitante poderá acessar.
disk[["DISK_SPEK_STRING", "DISK_SPEK_STRING", ... ] - Define as especificações de disco (tanto os discos emulados, quanto os dispositivos virtuais de bloco de Xen) que serão providos ao visitante, e em quais objetos esses discos são mapeados. Consulte a documentação em /docs/misc/xl-disk-configuration.txt.
vif=["NET_SPEC_STRING", "NET_SPEC_STRING", ... ] - Define a interface virtual de rede (tanto os adaptadores emulados, quanto as interfaces virtuais de Xen) que são providas ao visitante. Consulte a documentação em /docs/misc/xl-network-configuration.markdown para mais detalhes.
vtpm=["VTPM_SPEC_STRING", "VTPM_SPEC_STRING", ... ] - Define o modelo (ou módulo?) de plataforma virtual confiável fornecido ao visitante. Consulte a documentação em /docs/misc/vtpm.txt para mais detalhes.
Cada "VTPM_SPEC_STRING" deve ser separado do próximo por uma vírgula. Cada uma dessas cadeias de caracteres é uma lista de binômios do tipo chave=valor.
O valor em backend=DOMAIN é obrigatório e deve ser declarado. Esse valor define o nome de domínio backend para o ID. Se esse domínio é um visitante, o backend deve ser configurado para o nome do domínio vtpm. Se esse domínio é um vtpm, o backend deve ser configurado para o nome do gerenciador do domínio.
uuid=UUID - Define o uuid do dispositivo vtpm. O uuid é utilizado para identificar de forma única o dispositivo vtpm. Você pode criar um usando um programa como uuidgen em sistemas Unix. Se não for especificado, um uuid é gerado randomicamente cada vez que o domínio é inicializado. Se for um domínio vtpm, especificar um valor é obrigatório. Para visitantes é opcional.
vfb=["VFB_SPEC_STRING", "VFB_SPEC_STRING", ... ] - Define o dispositivo de framebuffer paravirtualizado fornecido ao domínio. Essa opção não controla os dispositivos gráficos emulados por visitantes HVM. Se opções de emulação de dispositivos VGA são utilizadas para um visitante PV, xl pegará os valores vnc, vnclisten, vncpasswd, vncdisplay, vncunused, sdl, opengl e keymap para construir um dispositivo framebuffer para o visitante.
Cada VFB_SPEC_STRING é uma lista separada por vírgulas de uma lista de pares (chave=valor) no seguinte formato:
vnc=BOOLEAN - Permite o acesso ao display através do protocolo VNC. Ativando essa opção permite ativar outras relacionadas. O padrão é ativado.
vnclisten="ADDRESS[:DISPLAYNUM]" - Define o endereço IP, e opcionalmente o número do display VNC utilizado. Se o número do display for especificado, não utilize vncdisplay.
vncdisplay=DISPLAYNUM - Define o número do display para VNC. O número da porta TCP será calculado por DISPLAYNUM + 5.900. Essa opção é mutuamente exclusiva se displaynum for definido em vcnlisten.
vcnunused=BOOLEAN - Requisita que o display VNC procure por uma porta TCP livre para que possa utilizá-la. O display atual pode ser acessado através de xl vncviewer.
vncpasswd="PASSWORD" - Define a senha de VNC.
sdl=BOOLEAN - Define se o display deve ser apresentado através do X Window (usando uma camada de DirectMedia). O padrão é não ativar esse modo.
display=DISPLAY - Define que o display X Window deve ser utilizado quando as opções sdl são utilizadas. Essa opção não está totalmente implementada.
xauthority=XAUTHORITY - Define o caminho do arquivo que deve utilizado para conectar ao servidor X. Essa opção não está totalmente implementada.
opengl=BOOLEAN - Ativa a aceleração OpenGL no display SDL. Afeta somente máquinas que usam device_model_version="qemu-xen-traditional" e somente se o modelo de dispositivo foi compilado com suporte para OpenGL. Desativado, por padrão.
keymap="LANG" - Configura o teclado para usar o tipo associado com o display. O padrão é EN-US.
channel=["CHANNEL_SPEC_STRING"; "CHANNEL_SPEC_STRING"; ... ] - Define os canais virtuais fornecidos ao visitante. Um canal é um fluxo bidirecional de bytes e possui uma largura de banda pequena, semelhante a um link serial. Os usos típicos para um canal incluem a transmissão das configurações da VM após o boot e como um canal para envio de sinais para o visitante. Consulte /docs/misc/channels.txt para mais detalhes.
Cada CHANNEL_SPEC_STRING é uma lista de pares (chave=valor) separados por vírgulas. Nem a chave, nem o valor podem conter os caracteres (igual, aspas ou vírgulas). Valores definidos são:
backend=DOMAIN - Define o nome ou o ID do domínio backend. Esse parâmetro é opcional. Se omitido então a pilha de ferramentas (toolstack) é assumida.
name=NAME - Define o nome para o dispositivo. Esse parâmetro é mandatório. Esse deve ser um nome bem conhecido pela aplicação (guest agent) e deve ser utilizado para conectar o front-end da aplicação ao canal do dispositivo. Não há registro formal dos nomes dos canais, os autores das aplicações são encorajados a tornar seus nomes únicos pela inclusão de um nome ou número de versão como, por exemplo, "org.meudominio.guestagente.1".
connection=CONNECTION - Define como o backend será implementado. As seguintes opções estão disponíveis.
connection=SOCKET - O backend ouve em um soquete do tipo unix.
connection=PTY - O backend cria uma console virtual pty e encaminha os dados entre o canal e o dispositivo master. O comando xl channel-list pode ser utilizado para definir um dispositivo escravo.
pci=["PCI_SPEC_STRING", "PCI_SPEC_STRING", ... ] - Define os dispositivos PCI que são passados para o visitante. Cada cadeia de caracteres possui o seguinte formato.
[DDDD:]BB:DD.F[@VSLOT],KEY=VALUE,KEY=VALUE,...
DDDD:BB:DD.F - Identifica o dispositivo PCI na perspectiva do domínio (DDDD), do barramento (bus - BB), do dispositivo (DD) e da função (F). Observe que essa é a mesma disposição utilizada pela saída do comando lspci. Por padrão, lspci omite o domínio, pois normalmente ele é uma sequência de zeros. Especificar a função (F) como um asterisco (*) indica todas as funções.
@VSLOT - Define um dispositivo virtual onde o visitante enxerga o dispositivo. Isso é equivalente ao DD que o visitante vê. No visitante DDDD:BB são vistos sempre como 0000:00.
CHAVE=VALOR
Possíveis chaves são:
permissive=BOOLEAN - Por padrão, pciback somente permite que visitantes PV escrevam valores "bem conhecidos" no espaço de configuração PCI. De modo semelhante QEMU (tanto qemu-xen quanto o qemu tradicional) impõe o mesma limitação aos visitantes HVM. Por outro lado, muitos dispositivos requerem escrita para outras áreas do espaço de configuração para funcionar corretamente. Essa opção diz ao backend (pickback ou QEMU) para permitir todas as escritas no espaço PCI desse dispositivo por esse domínio.
Essa opção pode ser ativada com cautela; ela dá ao visitante muito mais controle sobre o dispositivo, com implicações na segurança e na estabilidade. O recomendado é ativar somente para máquinas cujos administradores sejam confiáveis.
msitranslate=BOOLEAN - Define que a tradução MSI-INTx deve ser ligada para o dispositivo PCI. Isso pode ter implicações sobre certos dispositivos.
seize=BOOLEAN - Diz ao xl para tentar designar um dispositivo para pciback, se ele não foi designado.
power_mgmt=BOOLEAN - Esse parâmetro somente pode ser utilizado por máquinas HVM. Define se a VM deve ser capaz de programar os estados D0-D3 no dispositivo PCI. O padrão é false (0).
pci_permissive=BOOLEAN - Muda o valor padrão para todos os dispositivos PCI.
pci_msitranslate=BOOLEAN - Muda o valor padrão para todos os dispositivos PCI.
pci_seize=BOOLEAN - Muda o valor padrão para todos os dispositivos PCI.
pci_power_mgnt=BOOLEAN - Esse parâmetro somente pode ser utilizado por máquinas HVM. Muda o valor padrão para todos os dispositivos PCI.
gfx_passthru=BOOLEAN - Define se o dispositivo gráfico pode atravessar (passthrough). Essa opção faz com que o cartão gráfico se torne o cartão gráfico da VM. A emulação QEMU é desativada e o console VNC para a VM não terá qualquer saída gráfica. Todas as saídas gráficas, incluindo as mensagens em tempo de boot de QEMU originadas na VM, irão para a saída física (monitor) passando pelo cartão gráfico.
Isso ativa uma espécie de modo legado VGA, com coisas como BIOS VGA, modo texto, VBE, etc. A maioria dos adaptadores gráficos requerem truques do fabricante para funcionar. A página a seguir pode indicar algumas dessas dicas:
ioports=["IOPORT_RANGE", "IOPORT_RANGE", ... ] - Permite ao visitante especificar o I/O das portas legadas. Cada cadeia é dada em um número hexadecimal, dado pela faixa completa (2f8-2ff) ou simplesmente pelo endereço base de I/O (2f8). Somente VMs de administradores confiáveis devem usar esse parâmetro.
iomem=["IOMEM_START,NUM_PAGES[@GFN]" ... ] - Permite a auto-tradução acessar páginas de memória de um hardware específico. O valor em iomem_start é o número de uma página física. O valor de num_pages é o número de páginas permitidas. O valor opcional de GFN define o número de quadros onde o mapeamento inicia no espaço de endereço do domU. Se não for definido o mapeamento usa iomem_start para inicializar o espaço de endereçamento, usando uma relação de 1:1 como padrão. Todos esses valores são expressos em hexa.
irqs=[NUMBER, NUMBER, ... ] - Permita ao visitante acessar a IRQ física. Somente em VMs confiáveis.
max_event_channels=N - Limita o visitante a usar N canais de eventos (interrupções PV). Os visitantes utilizam os recursos do hypervisor para cada canal que utilizam. O padrão é 1023 é suficiente para quase totalidade de visitantes. O valor máximo depende do suporte do próprio visitante. Visitantes que suportam eventos baseados em FIFO com suporte ABI podem ter até 131.071 canais de eventos. Visitantes baseados em X86_64 e ARM são limitados em 4.095 canais, enquanto X86_32 é limitado em 1.023
Continua na Parte II.
Grato,
Kyetoy.