Aquivo por setembro 1st,2010

  • libvirt e nested paging

    Data:2010.09.01 | Categoriaservidores, virtualização | Resposta:1

    Embora o qemu-kvm já tenha suporte à páginas aninhadas (nested pages), a última versão do libvirt-0.8.3 ainda não suporta.

    Apenas para esclarecer, Nested Paging é um recurso disponível apenas para processadores AMD da linha Phenom ou superior. Maiores detalhes, consulte este documento.

    Pesquisei por referências de como habilitar a opção ‘-enable-nesting’ do qemu-kvm no libvirt, mas não encontrei. Depois de pelo menos 2 dezenas de cliques, eis que encontro na lista de e-mails dos desenvolvedores do libvirt referências já antigas (novembro de 2009), de como usar o nesting. Pois bem, meu trabalho se resumiu em ler certinho as mensagens e montar um patch. Mesmo que a versão que estou usando (0.8.3) seja muito mais nova que esse post, testei as alterações, e que maravilha, funcionou!!!

    Depois de compilado e instalado, só precisei acrescentar na definição do domínio dentro da tag <features> uma tag <nesting/>. Depois disso é só iniciar a VM e ver que na linha de comando da sua máquina virtual tem o -enable-nesting.

    Agradeço demais a equipe de desenvolvimento de qemu-kvm e libvirt!

    Abaixo segue o meu patch para libvirt-0.8.3:

    diff -Naur ../libvirt-0.8.3//docs/schemas/domain.rng ./docs/schemas/domain.rng
    --- ../libvirt-0.8.3//docs/schemas/domain.rng   2010-07-29 06:48:30.000000000 -0300
    +++ ./docs/schemas/domain.rng   2010-09-01 16:51:57.710851479 -0300
    @@ -1595,6 +1595,11 @@
                   <empty/>
                 </element>
               </optional>
    +          <optional>
    +           <element name="nesting">
    +             <empty/>
    +           </element>
    +         </optional>
             </interleave>
           </element>
         </optional>
    diff -Naur ../libvirt-0.8.3//src/conf/domain_conf.c ./src/conf/domain_conf.c
    --- ../libvirt-0.8.3//src/conf/domain_conf.c    2010-08-02 16:16:42.000000000 -0300
    +++ ./src/conf/domain_conf.c    2010-09-01 16:51:57.710851479 -0300
    @@ -75,7 +75,8 @@
     VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST,
                   "acpi",
                   "apic",
    -              "pae")
    +              "pae",
    +             "nesting")
    
     VIR_ENUM_IMPL(virDomainLifecycle, VIR_DOMAIN_LIFECYCLE_LAST,
                   "destroy",
    diff -Naur ../libvirt-0.8.3//src/conf/domain_conf.h ./src/conf/domain_conf.h
    --- ../libvirt-0.8.3//src/conf/domain_conf.h    2010-07-29 06:48:30.000000000 -0300
    +++ ./src/conf/domain_conf.h    2010-09-01 16:51:57.710851479 -0300
    @@ -649,6 +649,7 @@
         VIR_DOMAIN_FEATURE_ACPI,
         VIR_DOMAIN_FEATURE_APIC,
         VIR_DOMAIN_FEATURE_PAE,
    +    VIR_DOMAIN_FEATURE_NESTING,
    
         VIR_DOMAIN_FEATURE_LAST
     };
    diff -Naur ../libvirt-0.8.3//src/qemu/qemu_conf.c ./src/qemu/qemu_conf.c
    --- ../libvirt-0.8.3//src/qemu/qemu_conf.c      2010-08-04 09:21:27.000000000 -0300
    +++ ./src/qemu/qemu_conf.c      2010-09-01 16:57:47.485469640 -0300
    @@ -1190,6 +1190,8 @@
             flags |= QEMUD_CMD_FLAG_MEM_PATH;
         if (strstr(help, "-chardev"))
             flags |= QEMUD_CMD_FLAG_CHARDEV;
    +    if (strstr(help, "-enable-nesting"))
    +        flags |= QEMUD_CMD_FLAG_NESTING;
         if (strstr(help, "-balloon"))
             flags |= QEMUD_CMD_FLAG_BALLOON;
         if (strstr(help, "-device"))
    @@ -3907,6 +3909,9 @@
                 goto error;
             }
         }
    +    if ((qemuCmdFlags & QEMUD_CMD_FLAG_NESTING) &&
    +        (def->features & (1 << VIR_DOMAIN_FEATURE_NESTING)))
    +        ADD_ARG_LIT("-enable-nesting");
    
         /*
          * NB, -nographic *MUST* come before any serial, or monitor
    @@ -6265,6 +6270,8 @@
                 fullscreen = 1;
             } else if (STREQ(arg, "-localtime")) {
                 def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME;
    +        } else if (STREQ(arg, "-enable-nesting")) {
    +            def->features |= (1 << VIR_DOMAIN_FEATURE_NESTING);
             } else if (STREQ(arg, "-kernel")) {
                 WANT_VALUE();
                 if (!(def->os.kernel = strdup(val)))
    diff -Naur ../libvirt-0.8.3//src/qemu/qemu_conf.h ./src/qemu/qemu_conf.h
    --- ../libvirt-0.8.3//src/qemu/qemu_conf.h      2010-07-28 11:18:15.000000000 -0300
    +++ ./src/qemu/qemu_conf.h      2010-09-01 16:58:29.900876561 -0300
    @@ -92,6 +92,7 @@
         QEMUD_CMD_FLAG_PCI_CONFIGFD  = (1LL << 36), /* pci-assign.configfd */
         QEMUD_CMD_FLAG_NODEFCONFIG   = (1LL << 37), /* -nodefconfig */
         QEMUD_CMD_FLAG_BOOT_MENU     = (1LL << 38), /* -boot menu=on support */
    +    QEMUD_CMD_FLAG_NESTING       = (1LL << 39), /* Is the -enable-nesting flag available */
     };
    
     /* Main driver state */
    
  • Grandeza invisível

    Data:2010.09.01 | Categoria"viagens", filosofias | Resposta:0

    Na física, aprendemos que existem duas grandezas para medir, as escalares e as vetoriais. Explicações a parte, as escalares são aquelas na qual o valor sempre é em módulo, enquanto que as vetoriais consideram o sinal para definição do sentido. No caso, eu estou falando de uma grandeza que está presente em todos os momentos da nossa vida e dificilmente percebemos, ou melhor, damos atenção à ela, a grandeza vetorial do tempo.

    Noutro dia, enquanto dirigia pra casa, fiquei pensando sobre o tempo e a importância dele para nós. Sem perceber usamos a referência do tic-tac. Ao observar minha namorada dançar em uma aula de ginástica, percebi como é impressionante a sincronia entre os bailarinos. Na aula, o professor colocava uma música, na maioria um axé, e ia dando instruções de passos. O que me impressionou foi a rapidez com que as meninas (sim, eram todas meninas) encontravam o pulso da música e entravam em sincronia.

    A mesma coisa acontece com músicos de uma sinfonia. Dezenas de músicos com cada grupo responsável por um timbre, por momentos de notas e silêncios, trabalhando em consonância na reprodução de uma música em compassos certos.

    Na engenharia este respeito pelo relógio está presente, e um exemplo são os motores, que têm seus pistões e válvulas rigorosamente alinhados e postos para agir em sincronia com outros. No trânsito nas ruas e avenidas também vemos todos os dias um maestro, que alternando suas luzes vermelha, amarela e verde, coordena em função do tempo, o fluxo dos automóveis.

    Isso sem olhar par a necessidade de dividir esta linha, que dizem ser infinita, em períodos cíclicos, como dias, semanas, meses, anos…

    Seguindo essa linha, percebo que Albert Einstein estava certíssimo ao relacionar intimamente o espaço e o tempo. Além de estarmos conectados ao Universo através das distâncias escalares, nossa participação na existência não pode ser posteriormente negada nem por Deus, pois está gravada de maneira única num período em que nunca mais voltará.