In arrivo un hypervisor per OpenBSD/amd64
Oggi Mike Larkin ha pubblicato un teaser sul progetto al quale ha lavorato per un po’ di tempo: un hypervisor nativo per OpenBSD.
I progressi fatti giustificano l’annuncio ufficiale e lo stato del progetto consente adesso l’inserimento di altri sviluppatori a supporto dell’iniziativa.
I motivi per cui è stato preferito sviluppare un progetto da zero piuttosto che portare uno degli hypervisor esistenti sono diversi, uno dei principali è quello che le altre implementazioni non supportano alcuni aspetti che sono particolarmente importanti per OpenBSD, come ad esempio il supporto per i386, lo shadow paging, la nested virtualization, il supporto per le periferiche legacy, ecc. Tentare di inserire tali features in un hypervisor già esistente avrebbe probablmente richiesto uno sforzo pari a quello necessario per scriverne uno nuovo.
Alcune domande e risposte sul tema:
D. Quali OS possono essere eseguiti?
R. Inizialmente, gli OS che supportano le periferiche virtio-based. In seguito, si cercherà di esporre qualcosa a cui Qemu possa agganciarsi (probabilmente simulando KVM) per eseguire OS legacy ed OS che richiedono il supporto al boot BIOS/UEFI.
D. Quando sarà pronto?
R. Difficile a dirsi. Si spera per la fine di Ottobre 2015, ma non è una promessa. Molto dipenderà anche dalla quantità di aiuto che verrà dato nello scrivere i backend virtio.
D. Quali saranno i requisiti di CPU?
R. Qualsiasi CPU AMD o Intel che supporta la virtualizzazione hardware (SVM per AMD, VMX per Intel). Per le CPU che non supportano RVI o EPT, si utilizzerà lo shadow paging.
D. Ma dai, i386?!
R. Sì. E’ utile per trovare i bug. E Mike invita a guardare la sua ultima dozzina di commit relativi a i386 per individuare un’altra ragione.
Infine, la domanda più importante:
D. Come posso aiutare?
R. L’autore non avrebbe avuto praticamente tempo di lavorare a questo progetto negli ultimi mesi se non grazie alla generosa sponsorizzazione della OpenBSD Foundation. Le donazioni lo hanno reso possibile, e ciò è valido anche per altri progetti. Per cui è possibile aiutare effettuando donazioni. Se ritenete che un hypervisor in OpenBSD sia qualcosa che vi può essere utile, partecipate alle donazioni.
Ecco infine un esempio di boot:
Attivazione vmm mode:
# vmmctl -e cpu0: entered VMM mode
Avvio di una VM:
# vmmctl -S -c openbsd_amd64.vmrc /dev/ttyp0
Aggancio alla VM console:
# cu -l /dev/ttyp0 exit save va/pa 0xfffff000bcff000 0xbcff000 exit load va/pa 0xfffff000bd1e000 0xbd1e000 entry load va/pa 0xffffff000bd2c000 0xbd2c000 vmd: new vm with id 1 created loading 64 bit kernel warning: bcopy during ELF kernel load not supported warning: bcopy during ELF kernel load not supported mark[start] = 0x1000000 mark[entry] = 0x1000160 mark[nsym] = 0x1 mark[sym] = 0x1939000 mark[end] = 0x1a1de00 mark[random] = 0x18a4000 mark[erandom] = 0x18a6408 vmd: all vcpu run threads for vm 3 launched vcpu_run_vmx: yielding the cpu vmd: waiting on thread 0 vcpu_run_vmx: yielding the cpu vcpu_run_vmx: yielding the cpu loading 0x1a44000-0x4000000 (0x1a44-0x4000) loading 0x100000-0x1000000 avail_start = 0x26000 avail_end = 0x4000000 First_avail = 0x1a44000 [ bsd ELF symbol table not valid: bad magic ] [ no symbol table formats found ] Copyright (c) 1982, 1986, 1989, 1991, 1993 The Regents of the University of California. All rights reserved. Copyright (c) 1995-2015 OpenBSD. All rights reserved. http://www.OpenBSD.org OpenBSD 5.8-current (GENERIC) #204: Mon Aug 31 01:13:40 PDT 2015 mlarkin@miskatonic.azathoth.net:/export/bin/src/OpenBSD/vmm/src/sys/arch/amd64/compile/GENERIC vmd: i8253 PIT: 16 bit counter I/O not supported RTC BIOS diagnostic error ff real mem = 50331648 (48MB) avail mem = 45101056 (43MB) mpath0 at root scsibus0 at mpath0: 256 targets mainbus0 at root bios0 at mainbus0 acpi at bios0 not configured cpu0 at mainbus0: (uniprocessor) cpu0: Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz cpu0: FPU,VME,DE,PSE,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH ,DS,MMX,FXSR,SSE,SSE2,SS,HTT,PBE,SSE3,PCLMUL,DTES64,DS-CPL,SSSE3,CX16,xTPR,PCID, SSE4.1,SSE4.2,x2APIC,POPCNT,DEADLINE,AES,AVX,F16C,RDRAND,HV,ITSC,FSGSBASE,SMEP,E RMS pvbus0 at mainbus0: OpenBSD vmx_handle_cpuid: unsupported rax=0x40000100 pci0 at mainbus0 bus 0 isa0 at mainbus0 isadma0 at isa0 com0 at isa0 port 0x3f8/8 irq 4: ns8250, no fifo com0: console vmm at mainbus0 not configured vmx_handle_cr: mov to cr8 @ ffffffff8131854a nvram: invalid checksum vscsi0 at root scsibus1 at vscsi0: 256 targets softraid0 at root scsibus2 at softraid0: 256 targets root device:
Ciò significa che OpenBSD/amd64 è sulla strada per diventare un sistema operativo host di virtualizzazione con un suo proprio hypervisor nativo, unendosi al club esclusivo che fino ad adesso annoverava solo OpenBSD/sparc64 con il suo supporto ai logical domain (LDOMs).