Posts tagged ‘dicas’

  • hugepages

    Data:2010.09.27 | CategoriaDicas, linux, virtualização | Resposta:3

    Estudando o sistema de gerenciamento de memória do Linux, encontrei um recurso interessante para uso mais eficiente de memória.

    Para ficar claro, explicarei brevemente como funciona o gerenciamento de memória do Linux.

    Paginação

    O Linux, na sua inicialização, verifica a quantidade de memória disponível e mapeia o endereçamento. Isto é feito pela MMU (Memory Management Unit) que atribui endereços virtuais para melhor gerenciamento. Assim é possível uso de swaping e transparência para os processos. Mais detalhes serão abordados em outro post.

    Quando um processo faz uma requisição de memória ao Linux, este aloca o espaço solicitado em forma de páginas. As páginas, numa rápida analogia, é o mesmo que os blocos nas partições. Eles tem um cabeçalho e a área de dados propriamente dita. As páginas, em arquitetura x86, têm o tamanho de 4KB. Isto indica que quando precisamos de 12KB, o sistema aloca 3 páginas e entrega ao processo.

    Hugepages

    Este é um método bacana de estender as páginas para um tamanho maior. Como vimos, o Linux entrega páginas de tamanho fixo, e isso pode gerar um certo desperdício. Vejo isso em dois aspectos: overhead e uso real não múltiplo de 4.

    Caso eu queira 10KB de memória, o sistema me entregará o maior múltiplo imediato para mim, ou seja, 12KB. Ou então, mesmo que eu use exatamente um múltiplo de 4, ao requisitar 120MB, terei 30720 páginas. Isso significa 30720 cabeçalhos, que mesmo que pequenos, representam uma perda.

    Hugepages permite uso de páginas de 4MB em sistemas x86 de 32 bit e 2MB de 64bit. Assim, há um uso mais eficiente da memória quando é necessário um grande volume de memória. Outra característica também é que esse tipo de páginas não pode ser movida para a área swap.

    Ativação e uso

    Para tirar proveito desse tipo de paginação, é preciso que o kernel esteja preparado antes. Para isso, certifique que seu kernel tenha as seguintes opções ativadas:

    CONFIG_HUGETLBFS=y
    CONFIG_HUGETLB_PAGE=y
    

    Através do ‘make menuconfig’ vá em File Systems -> Pseudo filesystems -> HugeTLB file system support.

    Depois de compilado e instalado o kernel, verifique se foi devidamente ativado:

    grep -i huge /proc/meminfo
    HugePages_Total:     0
    HugePages_Free:      0
    HugePages_Rsvd:      0
    HugePages_Surp:      0
    Hugepagesize:       2048 kB
    

    Se apareceu algo parecido com isso, agora só falta alocar as páginas. Para isto, é necessário que haja espaço contíguo disponível para a quantidade que será alocada. Desta forma, é mais interessante alocar logo na inicialização do sistema. Para isto, acrescente a seguinte linha no arquivo /etc/sysctl.conf:

    vm.nr_hugepages=256
    

    Isto dirá ao kernel na inicialização alocar 256 páginas de tamanho 2048KB (no meu sistema 64 bit), Assim totalizando 512MB (256 * 2048KB = 512MB). Para tomar efeito, será preciso reinicializar o sistema.

    Depois de reinicializado, certifique que tudo correu bem:

    grep -i huge /proc/meminfo
    HugePages_Total: 256
    HugePages_Free: 256
    HugePages_Rsvd: 0
    HugePages_Surp: 0
    Hugepagesize: 2048 kB
    

    Veja que nenhuma página foi usada. Um processo que queira fazer isto, deverá requisitar explicitamente por hugepages. Para criar uma interface de acesso, é preciso montar uma pseudo partição hugetlb. Acrescente no seu fstab:

    hugetlbfs        /dev/hugepages   hugetlbfs   defaults         0   0

    Como o diretório /dev/hugepages não existe, é preciso criá-lo também antes de montar.

    Uma boa aplicação para isto são máquinas virtuais baseadas em KVM, como descreverá o próximo post.

  • Converter discos virtuais

    Data:2010.09.22 | CategoriaDicas, linux, virtualização | Resposta:0

    Há uma diversidade de hypervisiors no mercado, e com isso, há também uma diversidade de formatos de discos virtuais (vdi, vmdk, qcow, raw…) e muitas precisamos portar uma para a outra.

    Uma forma prática e fácil de converter imagens é usando o qemu-img. Este utilitário acompanha o pacote qemu-kvm, que pode ser baixado e usado livremente. Veja alguns exemplos para converter discos:

    vdi -> qcow

    qemu-img convert -f vdi -O qcow origem.img destino.img

    vmdk -> qcow

    qemu-img convert -f vmdk -O qcow origem.img destino.img

    vmdk -> vdi

    qemu-img convert -f vmdk -O vdi origem.img destino.img

    qcow -> raw

    qemu-img convert -f qcow -O raw origem.img destino.img

    raw -> qcow2

    qemu-img convert -f raw -O qcow2 origem.img destino.img

    qcow2 -> volume lógico (já citado em “Convertendo arquivos de imagens em volumes lógicos“)

    qemu-img convert -f qcow2 -O host_device origem.img /dev/logical/destino

    No final de contas, essa brincadeira pode ser feita entre todos estes formatos: cow qcow vdi vmdk cloop dmg bochs vpc vvfat qcow2 parallels nbd host_cdrom host_floppy host_device raw tftp ftps ftp https http

    Mais informações sempre podem ser encontradas no manual.

    man qemu-img
  • VirtualBox e usb

    Data:2010.08.12 | CategoriaDicas, linux, utilidades, virtualização | Resposta:0

    O VirtualBox tem um recurso de acesso à dispositivos USB da máquina host, mas nem sempre é fácil usá-lo. No meu caso, o host é um Slackware 13.1 Linux. O problema é de permissão e simples de se resolver. No início, quando o sistema de arquivos USB (usbfs) é montado, ele normalmente coloca tudo para apenas o root ter controle. A mágica está em alterar isto, usando o grupo plugdev, que no Slackware é usado para dispositivos removíveis.
    Primeiramente seu usuário deve estar no grupo. Adicione o usuário que vai usar o VirtualBox no grupo com o seguinte comando, no meu caso, usuário eduardo:

    usermod -a -G plugdev eduardo

    Agora basta uma alteração no fstab. Acrescente a seguinte linha:

    usbfs            /proc/bus/usb    usbfs       devgid=83,devmode=660 0 0

    Isso fará com que o sistema no início monte o usbfs sendo do grupo do plugdev também, e dando permissão de leitura e escrita para seus membros.

    Para resolver isso rapidamente sem reinicializar o sistema, use o seguinte:

    mount -o remount,devgid=83,devmode=660 /proc/bus/usb