2 Strumenti di misura

Le misurazioni sono state effettuate tramite il programma netperf (versione 2.2 alpha). Netperf permette di effettuare vari test sulle prestazioni di rete, relativamente a vari protocolli; si utilizza facendo partire su una macchina un demone (netserver) che rimane in ascolto in attesa di connessioni, e su un'altra il client (netperf), fornendo a quest'ultimo i parametri relativi al test da condurre. Qui si sono utilizzati i test ``TCP stream'' e ``UDP stream'', che funzionano in maniera analoga rispettivamente su TCP e UDP. Questi test trasmettono un flusso di dati tra le due macchine tale da saturare il sistema, continuando per un tempo dato58. Ciò che viene trasmesso è un blocco di dati che rimane in memoria, per evitare che i risultati siano influenzati dalle prestazioni dei dischi fissi. Netperf permette anche di specificare dei parametri di confidenza, e in base ad essi uno stesso test viene automaticamente ripetuto più volte (in numero compreso tra un valore minimo e un valore massimo che si forniscono al programma) fino a che i risultati non li soddisfano59. Con netperf si è specificata una confidenza del 99% con un ampiezza dell'intervallo pari al 2%, tuttavia in alcuni casi (in particolare in alcuni dei test sulla frammentazione) l'ampiezza dell'intervallo è risultata maggiore. Ogni test ha la durata di un minuto, ed è stato iterato da un minimo di cinque volte ad un massimo di trenta.

I parametri presi in considerazione sono il throughput (di seguito indicato con $X$), l'utilizzo del processore ($U_{CPU}$) e la domanda di servizio del processore ($D_{CPU}$), ovvero il tempo di CPU richiesto per l'elaborazione di un'unità di dati. Il throughput viene calcolato da netperf semplicemente dividendo il numero di byte trasferiti per la durata del test. L'utilizzo del processore viene determinato misurando l'occupazione di un processo nullo a bassa priorità che occupa tutto il tempo in cui la CPU rimane inattiva, e facendone poi il complementare. Non è possibile misurare direttamente l'occupazione della CPU da parte del processo che interessa, perché IPsec è implementato all'interno del kernel del sistema operativo e non è dunque un normale processo; per avere la massima affidabilità sui dati relativi all'utilizzo del processore i test sono stati condotti con le macchine in single user mode60. La domanda di servizio del processore è calcolata da netperf come \(D_{CPU} = U_{CPU} / X\).

I test su IPsec non presentano problemi per via della trasparenza di IPsec alle applicazioni, per cui è suffciente instaurare manualmente la connessione IPsec tra le due macchine e poi effettuare i normali test ``TCP stream'' e ``UDP stream''. Per poter effettuare dei test su TLS è stato invece necessario modificare netperf, introducendo nel programma un test ``TLS stream'', che è sostanzialmente il test ``TCP stream'' modificato in modo da utilizzare TLS. Si è quindi modificata la funzione del programma61 che effettua il test di flusso TCP, introducendovi le opportune chiamate di libreria ad OpenSSL per effettuare un handshake TLS all'inizio del test, e sostituendo tutte le normali chiamate in lettura/scrittura sui socket con quelle di OpenSSL.



Footnotes

... dato58
Per il test su TCP è anche possibile specificare una dimensione totale del trasferimento anziché un tempo.
... soddisfano59
Il programma effettua il test di Student. Se non si raggiunge la confidenza desiderata con il massimo numero di iterazioni, il programma fornisce comunque i risultati specificando la confidenza raggiunta.
... mode60
Nella modalità ``a utente singolo'' in Linux vengono eliminati pressoché tutti i servizi e i processi di sistema, ad eccezione di quelli fondamentali.
... programma61
Netperf è scritto in linguaggio C.
©2001 Davide Cerri