Difference between revisions of "Appunti lezioni 2019"
Mattiabiondi (talk | contribs) |
Mattiabiondi (talk | contribs) |
||
Line 68: | Line 68: | ||
== 1 Marzo 2019 == | == 1 Marzo 2019 == | ||
+ | <ul> | ||
+ | <li> Bug Squashing dei progetti esistenti | ||
+ | <li> [https://github.com/gufoe/vuos-tutorial Tutorial] su come installare <tt>vuos</tt> | ||
+ | <li> Possibilità di aggiungere system call personalizzate che Linux non ha tramite <tt>UMView</tt> | ||
+ | </ul> | ||
+ | ---- | ||
+ | === VDE (Virtual Distributed Ethernet) === | ||
+ | Ethernet è lo standard per la rete locale, la guerra agli standard non esiste più. Ethernet ha una platea di utilizzatori enormi, da qui l’idea di creare una Ethernet virtuale.<br> | ||
+ | Occorre virtualizzare in modo che sia '''compatibile''' con le '''applicazioni''' e con gli '''umani'''.<br> | ||
+ | La prima idea è stata quella di creare una scatola logica chiamata '''VDE switch''', facendo in modo che le macchine virtuali avessero porte capaci di interfacciarsi con questo switch. Dopodichè serviva la possibilità di collegare più switch insieme.<br> | ||
+ | <br> | ||
+ | <tt>vde_switch</tt> ⇒ comando per creare uno switch ⇒ es. <tt>vde_switch -s /tmp/my_switch</tt><br> | ||
+ | <br> | ||
+ | <ul> | ||
+ | <li> avviata macchina virtuale dando come parametro per il socket lo switch appena creato | ||
+ | <li> ora abbiamo una macchina virtuale collegata ad uno switch virtuale ⇒ ''“è un po’ autistica, parla con se stessa”'' cit. Davoli | ||
+ | <li> lanciata seconda macchina virtuale cambiando il MAC address (qemu avvia tutte le macchine virtuali con lo stesso MAC di default) | ||
+ | <li> settato indirizzo IP delle due macchine virtuali | ||
+ | <li> pingate le macchine a vicenda e funziona ⇒ ''“miracolo”'' | ||
+ | <li> dal terminale con cui abbiamo avviato lo switch, premendo <tt>enter</tt> possiamo dare comandi, tipo <tt>port/print</tt> per avere info sui dispositivi collegati, oppure <tt>hash/print</tt> per la forwarding table | ||
+ | </ul> | ||
+ | ==== Come collegare assieme due switch ==== | ||
+ | Per ora abbiamo solo '''V''' ed '''E''' di ''VED'', manca '''distributed'''.<br> | ||
+ | L’idea iniziale era di virtualizzare l’intero cavo di rete, ma si è scelto di virtualizzare solamente le spine per poter utilizzare come canale di comunicazione anche strumenti già esistenti.<br> | ||
+ | <br> | ||
+ | <tt>vde_plug /tmp/my_switch</tt> ⇒ collegata la spina allo switch esistente<br> | ||
+ | <br> | ||
+ | '''vde_plug''' utilizza i primi due byte per identificare il pacchetto trasmesso, e poi accoda il pacchetto.<br> | ||
+ | Ora <tt>port/print</tt> vede anche la terza porta collegata al plug.<br> | ||
+ | <br> | ||
+ | <tt>dpipe</tt> ⇒ tool di uso generale per collegare assieme due entità.<br> | ||
+ | <tt>dpipe vde_plug /tmp/myswitch = ssh vde.v2.cs.unibo vde_plug</tt><br> | ||
+ | <br> | ||
+ | <ul> | ||
+ | <li> collegato il secondo switch virtuale ad internet, ora pingandola raggiungiamo la macchina virtuale di Davoli | ||
+ | <li> da qualche parte c’è il passaggio tra virtuale e reale: il kernel Linux permette la creazione di interfacce '''TUN TAP'''. Creano interfacce ethernet (TAP livello 2, TUN livello 3). Quando si deve inviare un pacchetto all’interfaccia TAP, lo si invia al programma che ha creato la TAP, nel nostro caso a vde_plug | ||
+ | <li> creata interfacce TAP assegnata a utente 1000, poi collegata la macchina virtuale alla macchina fisica e pingata. | ||
+ | </ul> | ||
+ | ---- | ||
+ | === Come si è evoluto il progetto === | ||
+ | [http://www.cs.unibo.it/~renzo/vsd/nfvvde.pdf Lucidi del Prof del FOSDEM 2018] | ||
== 5 Marzo 2019 == | == 5 Marzo 2019 == |
Revision as of 08:51, 21 March 2019
26 Febbraio 2019
Precondizioni: manualità con command line, sistemi operativi, C e programmazione.
Cos’è la virtualità
L’informatica dal nostro punto di vista è “a strati”: linguaggi che permettono di astrarre il livello attuale e fornire qualcosa al livello superiore.
A noi informatici non interessa l’implementazione hardware di un sistema di elaborazione.
Qualcosa che si adatta perfettamente a sostituire un X lo chiameremo X Virtuale.
Una macchina virtuale è capace di parlare il linguaggio di una macchina reale:
- il linguaggio della sua instruction set ⇒ processore
- serve un sistema di emulazione della memoria con cui il processore dialoga.
- occorre ricreare la parte del linguaggio che rappresenta i bus di comunicazione tra periferiche.
Se siamo in grado di ricreare correttamente la macchina, la macchina non si accorgerà di essere virtuale.
Per noi la memoria è qualcosa che risponde a due comandi fondamentali: READ e STORE.
Possiamo ricreare queste operazioni e unire insieme memoria fisica con operazioni virtuali, ricreando la memoria virtuale.
Ci saranno sistemi virtuali, reti virtuali, ecc…
Efficacemente?
Un emulatore è un programma che emula il comportamento di qualcosa, un programma capace di apparire esattamente come qualcos’altro.
Come la macchina virtuale? No, emula e fa le cose dell'oggetto che emula, ma manca la parola efficacemente.
Il simulatore non fa le cose che fa l’oggetto simulato, appare solo che faccia le sue operazioni.
Con un simulatore di volo non si va in vacanza.
Icaro aveva ricreato un emulatore di volo.
Un emulatore è una macchina virtuale? Dipende dallo scopo.
Se la virtualità non si crea per emulazione, come si crea? Si crea trovando il modo di inserire nel sistemi dei supporti che ci aiutino a creare la virtualità senza simulazione.
La RAM simulata non è altro che memoria secondaria. ⇒ no virtualità.
MMU ci aiuta a simulare la memoria virtuale.
Nei sistemi Intel è presente VTX, ovvero supporti per creare sistemi virtuali. Per le operazioni di processore e memoria il sistema lavora come se non fosse in una macchina virtuale. Quando questi due non bastano, si delegano le operazioni alla macchina reale.
L’utente vuole da questa entità virtuale un servizio. La nostra macchina virtuale è efficace se il servizio non ha differenze dal quello fornito da una macchina reale.
Virtual Square
Cos’è? Davoli dice “non lo so”.
Nasce per dare un marchio ad una serie di progetti, oggi è un contenitore di progetti o laboratorio internazionale che porta avandi idee di progetti.
Internazionale perchè nel corso degli anni le persone che hanno partecipato al progetto hanno aggiunto codice e idee che li ha portati a lavorare in giro per il mondo, ma restando collegati a Virtual Square.
I progetti portati avanti sono tanti, le idee non vengono da sole.
I capisaldi sono la virtualizzazione di sistemi e di reti.
Tutti i progetti del 2014 sono nelle repo Debian ufficiali.
Quest’anno vorrebbe fare il salto e portare la realtà dei progetti attuali ad essere fruibile al mondo.
Questo è un corso ma non è un esame. Il voto si baserà su un progetto (come riporta il nome del corso).
Modalità di lavoro
Lezione, editor condiviso, il wiki, gruppo telegram e bot telegram.
Come esercizio aggiuntivo potremmo provare a diventare Debian maintainer.
VDE: Virtual Distributed Ethernet
Uno dei cavalli di battaglia di Virtual Square, rete ethernet virtuale.
L’ethernet è la rete più comune nell’ambito locale, ha tantissime implementazioni (fili di rame, fibra ottica, diverse velocità). Il comune denominatore di tutto questo (ciò che fa di una ethernet una ethernet) è il livello 2, ovvero il formato del pacchetto, i primi 14 byte. Se riusciamo a ricreare una rete virtuale possiamo interamente sostituire una rete fisica.
ifconfig è il vecchissimo metodo utilizzato per configurare l’IP di un sistema.
Macchine virtuali parziali
A differenza di una macchina virtuale totale si può virtualizzare solamente una parte del sistema (ad esempio solamente la rete, ignorando l’implementazione del file system). Non richiede l’intero boot. Questo è possibile tramite le systemcall.
Esperimento in classe: Emulato un file system e fatto un mount all’interno. Dall’esterno non è visibile.
Qemu è una macchina virtuale che funziona tramite compilazione dinamica. Ha sistema di caching che ricorda le istruzioni recentemente eseguite. Tutti i sistemi di sviluppo per mobile utilizzano Qemu. Permette di utilizzare diverse implementazioni dell’architettura rispetto alla macchina ospitante.
Conclusioni
Molte implementazioni di virtualizzazione.
Proseguimento del corso: mostrare tutti gli esperimenti sulla virtualizzazione, prima come si usano e poi come sono stati implementati.
1 Marzo 2019
- Bug Squashing dei progetti esistenti
- Tutorial su come installare vuos
- Possibilità di aggiungere system call personalizzate che Linux non ha tramite UMView
VDE (Virtual Distributed Ethernet)
Ethernet è lo standard per la rete locale, la guerra agli standard non esiste più. Ethernet ha una platea di utilizzatori enormi, da qui l’idea di creare una Ethernet virtuale.
Occorre virtualizzare in modo che sia compatibile con le applicazioni e con gli umani.
La prima idea è stata quella di creare una scatola logica chiamata VDE switch, facendo in modo che le macchine virtuali avessero porte capaci di interfacciarsi con questo switch. Dopodichè serviva la possibilità di collegare più switch insieme.
vde_switch ⇒ comando per creare uno switch ⇒ es. vde_switch -s /tmp/my_switch
- avviata macchina virtuale dando come parametro per il socket lo switch appena creato
- ora abbiamo una macchina virtuale collegata ad uno switch virtuale ⇒ “è un po’ autistica, parla con se stessa” cit. Davoli
- lanciata seconda macchina virtuale cambiando il MAC address (qemu avvia tutte le macchine virtuali con lo stesso MAC di default)
- settato indirizzo IP delle due macchine virtuali
- pingate le macchine a vicenda e funziona ⇒ “miracolo”
- dal terminale con cui abbiamo avviato lo switch, premendo enter possiamo dare comandi, tipo port/print per avere info sui dispositivi collegati, oppure hash/print per la forwarding table
Come collegare assieme due switch
Per ora abbiamo solo V ed E di VED, manca distributed.
L’idea iniziale era di virtualizzare l’intero cavo di rete, ma si è scelto di virtualizzare solamente le spine per poter utilizzare come canale di comunicazione anche strumenti già esistenti.
vde_plug /tmp/my_switch ⇒ collegata la spina allo switch esistente
vde_plug utilizza i primi due byte per identificare il pacchetto trasmesso, e poi accoda il pacchetto.
Ora port/print vede anche la terza porta collegata al plug.
dpipe ⇒ tool di uso generale per collegare assieme due entità.
dpipe vde_plug /tmp/myswitch = ssh vde.v2.cs.unibo vde_plug
- collegato il secondo switch virtuale ad internet, ora pingandola raggiungiamo la macchina virtuale di Davoli
- da qualche parte c’è il passaggio tra virtuale e reale: il kernel Linux permette la creazione di interfacce TUN TAP. Creano interfacce ethernet (TAP livello 2, TUN livello 3). Quando si deve inviare un pacchetto all’interfaccia TAP, lo si invia al programma che ha creato la TAP, nel nostro caso a vde_plug
- creata interfacce TAP assegnata a utente 1000, poi collegata la macchina virtuale alla macchina fisica e pingata.
Come si è evoluto il progetto
Lucidi del Prof del FOSDEM 2018