|
@@ -0,0 +1,98 @@
|
|
|
|
+# Piattaforme Software per la Rete - lesson 2
|
|
|
|
+#### Giacomo Verticale
|
|
|
|
+###### 11 March 2016
|
|
|
|
+## Modulo 1 - Endnodes
|
|
|
|
+
|
|
|
|
+__collo di bottiglia__ della velocità può essere
|
|
|
|
+- velocità del collegamento in uscita: serve link più veloce
|
|
|
|
+- in una delle funzioni dei nodi: si possono migliorare le prestazioni
|
|
|
|
+Le __astrazioni__ sono il primo nemico delle prestazioni
|
|
|
|
+Le comunicazioni ad esempio email non sono implementate direttamente sul cavo
|
|
|
|
+ ma ci sono multipli strati di astrazione, ognuno dei quali nasconde gli strati sottostanti.
|
|
|
|
+La stessa __interfaccia__ (ad es socket) deve andare bene per applicazioni multiple
|
|
|
|
+ad esempio trasferimento di file (possibilmente lento) o pagine web (poss. veloce)
|
|
|
|
+
|
|
|
|
+Il nostro obiettivo è ottenere una velocità __wirespeed__
|
|
|
|
+
|
|
|
|
+## Endnodes
|
|
|
|
+__Struttura__:
|
|
|
|
+- architettura a strati per *semplificare lo sviluppo*
|
|
|
|
+- sistemi di protezione
|
|
|
|
+- implementazione più generale possibile: ad es. scelgo algoritmi in base
|
|
|
|
+al funzionamento generale e non al funzionamento in un caso specifico.
|
|
|
|
+__Scala__:
|
|
|
|
+La tabella di un pc desktop viene gestita da un algoritmo molto più semplice e meno sofisticato
|
|
|
|
+della tabella di un core router tra autonomous systems (~6 entries vs ~100'000 entries)
|
|
|
|
+
|
|
|
|
+### Architettura hardware BSD
|
|
|
|
+- Net Interface (scheda di rete che implementa lo strato ethernet)
|
|
|
|
+- I/O BUS
|
|
|
|
+- Bus Adaptor
|
|
|
|
+- System Bus
|
|
|
|
+- Memory
|
|
|
|
+- MMU + Cache
|
|
|
|
+- CPU
|
|
|
|
+La prestazione degli endnodes dipende molto dalla velocità della cache,
|
|
|
|
+quindi si cerca di massimizzare l'utilizzo della cache.
|
|
|
|
+Le cache in genere sono efficaci quando si ha una *località temporale* e *spaziale* tra le informazioni richieste.
|
|
|
|
+Il caching non è sfruttabile facilmente nei sistemi di rete, ad esempio se si guarda un film in streaming,
|
|
|
|
+non è utile mettere i pacchetti ricevuti in una cache, perchè i dati vicini non sono ancora arrivati, e
|
|
|
|
+quelli appena visti non serve mantenerli in cache.
|
|
|
|
+Ad esempio se una macchina apre tante (~1000) connessioni TCP, non serve avere tutti i socket pronti in cache,
|
|
|
|
+ma potrebbe essere utile copiare il descrittore del socket in cache nel momento in cui viene ricevuto un pacchetto.
|
|
|
|
+Gli algoritmi BSD degli anni '80 non sono più adatti alle velocità (~300Mb/s) perchè sono adatti solo a velocità di (10-30Mbit/s).
|
|
|
|
+
|
|
|
|
+### Architettura software BSD
|
|
|
|
+- Processi p1,p2,p3...
|
|
|
|
+- Kernel (coda IP)
|
|
|
|
+- Net Interface
|
|
|
|
+- Trama ethernet
|
|
|
|
+Quando la scheda di rete riceve una trama, questa viene copiata in un buffer,
|
|
|
|
+poi viene controllato il checksum, se non torna butto la trama, dopo
|
|
|
|
+viene controllato il MAC addr. se non è il mio butto la trama.
|
|
|
|
+La scheda di rete per interagire col S.O. alza un interrupt hardware
|
|
|
|
+La routine di gestione degli interrupt comunica alla scheda di mettere le trame sul buffer
|
|
|
|
+Può avvenire
|
|
|
|
+- Senza DMA: la CPU copia 1 byte per volta in RAM
|
|
|
|
+- Con DMA: la scheda di rete copia la trama direttamente in RAM
|
|
|
|
+A questo punto il pacchetto viene messo in una coda IP (nella memoria centrale)
|
|
|
|
+Del pacchetto guardo:
|
|
|
|
+- Indiritto IP destinazione, se non è il mio scarto o forwardo
|
|
|
|
+- Guardo campo protocollo (TCP o UDP)
|
|
|
|
+- Identifico socket tramite numero di porta sorg-dest (TCP) o dest (UDP)
|
|
|
|
+- Metto il pacchetto nella coda ad (es. UDP) del processo
|
|
|
|
+- Se il processo era in attesa bloccante, il processo viene cambiato a pronto
|
|
|
|
+- Quando verrà schedulato il processo va in esecuzione e legge dal socket.
|
|
|
|
+Per un pacchetto TCP la questione è simile a parte la gestione della finestra,
|
|
|
|
+ad esempio se il pacchetto non è arrivato in ordine, non può essere consegnato
|
|
|
|
+finchè non arrivano i pacchetti mancanti.
|
|
|
|
+
|
|
|
|
+### Problemi
|
|
|
|
+__Livelock__
|
|
|
|
+Se il sistema è configurato male:
|
|
|
|
+- la scheda di rete riceve spesso pacchetti
|
|
|
|
+- il sistema operativo è troppo impegnato dagli interrupt della scheda di rete
|
|
|
|
+- il sistema non riesce a dividere i pacchetti nelle code
|
|
|
|
+- il sistema non riesce ad eseguire i processi che smaltiranno i pacchetti
|
|
|
|
+
|
|
|
|
+### Invio di un pacchetto
|
|
|
|
+Se consideriamo l'architettura hardware BSD con l'aggiunta di un disco sul bus I/O
|
|
|
|
+Ad un server può essere richiesta una pagina web tramite una richiesta HTTP GET
|
|
|
|
+- Il S.O. chiede al disco la pagina web richiesta e viene caricata in RAM (cache disco)
|
|
|
|
+- L'applicazione webserver legge dalla cache il file e lo copia nel proprio spazio utente
|
|
|
|
+- L'applicazione invoca la SEND sul socket buffer della connessione.
|
|
|
|
+- Il pacchetto viene copiato dal socket buffer alla scheda di rete
|
|
|
|
+Abbiamo 4 operazioni per ogni pacchetto, quindi la banda richiesta per ogni pacchetto viene
|
|
|
|
+amplificata di 4 volte.
|
|
|
|
+All'avvicinarsi della velocità del bus alla velocità del link aumenta
|
|
|
|
+la latenza della trasmissione, e quindi il throughput della connessione non è determinato
|
|
|
|
+dal link ma dalla macchina che non riesce a gestire le connessioni.
|
|
|
|
+Ad esempio nei sistemi solaris l'applicazione invia i dati direttamente alla scheda di rete,
|
|
|
|
+senza passare dalla memoria, il checksum lo calcola la scheda di rete
|
|
|
|
+Anche la ricezione può essere ottimizzata facendo calcolare il checksum delle trame IP
|
|
|
|
+in hardware alla scheda di rete.
|
|
|
|
+Ad esempio in un datacente di Amazon vengono usate macchine virtuali che scambiano pacchetti tramite
|
|
|
|
+l'hypervisor facendo calcolare i checksum alla scheda di rete, a cui però i pacchetti non arrivano
|
|
|
|
+Quindi in questo modo si aveva un tasso di errore sui pacchetti molto alto.
|
|
|
|
+
|
|
|
|
+
|