Stage di Informatica Studenti: Karen Jomayra Montes Rua Gabriele Scolastri Tutor: Giuseppe Fabio Fortugno Stage di Informatica •Introduzione sistema operativo Unix (nascita, sviluppo, utilizzo)… •Funzionamento dei file system, compact disc, disco rigido. •Il sistema operativo, fase di bootstrap, ram... •Network, LAN, connessione ethernet (fase analogica e digitale), protocolli tcp/ip… •Linguaggio C, programmazione… •Misura della velocita’ di NFS v3… Linguaggio C E’ un linguaggio di programmazione di medio livello. Ciò significa che il linguaggio C è articolato e potente quasi come il linguaggio della macchina (assembler), ma meno complesso. Può essere scritto con programmi di scrittura come vi, Emacs e Pico, per poi essere compilato da Unix attraverso il compilatore. La sua potenza permette sia di modificare parti del sistema operativo che di crearne uno ex novo!! Test di Velocita’ di NFS L’obbiettivo è calcolare la velocità con cui uno o più client riescono a lavorare in contemporanea su un server & quale sia il blocksize (pacchetto di dati) migliore per ottenere maggiori velocità. • 5 blocksize: 512, 1024, 2048, 4096, 8192 byte • max 4 Client • Tipo connessione: NFS su TCP/IP Elenco componenti usati nel test di velocita’ HARDWARE: 1 Switch Cisco 4500 con porte Gigabit Ethernet 1 IBM xSeries 340 Processore Intel Xeon a 2 GHz 1024 Mbyte Ram Due dischi SCSI FW da 36 Gbyte Gigabit Ethernet Card in fibra ottica 4 IBM xSeries 330 Processore Intel Xeon 2 Ghz 512 Mbyte RAM Un disco SCSI da 9 Gbyte Gigabit Ethernet Card in rame SOFTWARE: Server Linux Suse Enterprise Server 9.2 Kernel ver. 2.6.5 NFS Server V3 Client Linux Suse Enterprise Server 9.2 Kernel ver. 2.6.5 NFS Client V3 Gnu C Compiler ver.3.3.3 Struttura del cluster linux su cui sono state fatte le prove di scrittura e lettura lxmaster01 NFS server Switch Cisco 4500 lxmaster02 lxmaster05 lxmaster03 Gigabit-Ethernet SCSI Fast Wide 160MB/s lxmaster04 Struttura logica del cluster lxmaster01 /work / work NFS server stage cl01 cl02 cl03 cl04 NFS Client NFS Client lxmaster02 lxmaster05 NFS Client NFS Client lxmaster03 lxmaster04 Gigabit-Ethernet SCSI Fast Wide 160MB/s Programma C di scrittura #include<stdio.h> #include<stdlib.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<time.h> #include<bits/time.h> k=atoi(argv[1]); switch(k) { case 1: n=512; case 2: n=1024; case 3: n=2048; case 4: n=4096; case 5: n=8192; default: n=512; } break; break; break; break; break; fd=creat(fn,type) main(int argc,char *argv[]) { int n, v[8192], i, k, m=512000000, rc=0; time_t t1,t2,t3; double t; int fd; int *pn; i=0; do{ v[i]=random(); i++; }while(i<n); fd=creat("misura", S_IRUSR|S_IWUSR|S_IRGRP); pn=&v[0]; printf("\n Inizio scrittura del file \n"); t1=time(NULL); if(argc==1) { printf("\n Inserisci una delle seguenti opzioni: \n"); printf("\n 1 -> 512 Byte Block "); printf("\n 2 -> 1024 Byte Block "); printf("\n 3 -> 2048 Byte Block "); printf("\n 4 -> 4096 Byte Block "); printf("\n 5 -> 8192 Byte Block \n\n "); exit(1); } for(k=0; k<(m/n); k++){ rc=write(fd, pn, n); } t2=time(NULL); t=difftime(t2,t1); printf("\n Fine scrittura del file \n"); printf("\n Il tempo che il computer ha “); printf(“ impiegato per scrivere il file e` %7.3f s\n",t); close(fd); } Programma C di lettura #include<stdio.h> #include<stdlib.h> #include<fcntl.h> #include<sys/types.h> #include<sys/stat.h> #include<time.h> #include<bits/time.h> k=atoi(argv[1]); switch(k) { case 1: n=512; case 2: n=1024; case 3: n=2048; case 4: n=4096; case 5: n=8192; default: n=512; } break; break; break; break; break; main(int argc,char *argv[]) { int n, v[8192], i, k, m=512000000, rc=0; time_t t1,t2,t3; double t; int fd; int *pn; i=0; do{ v[i]=random(); i++; }while(i<n); fd=open("misura", O_RDONLY); pn=&v[0]; printf("\n Inizio lettura del file \n"); t1=time(NULL); if(argc==1) { printf("\n Inserisci una delle seguenti opzioni: \n"); printf("\n 1 -> 512 Byte Block "); printf("\n 2 -> 1024 Byte Block "); printf("\n 3 -> 2048 Byte Block "); printf("\n 4 -> 4096 Byte Block "); printf("\n 5 -> 8192 Byte Block \n\n "); exit(1); } for(k=0; k<(m/n); k++){ rc=read(fd, pn, n); } fd=open(fn,type) t2=time(NULL); t=difftime(t2,t1); printf("\n Fine lettura del file \n"); printf("\n Il tempo che il computer ha “); printf(“ impiegato per leggere il file e` %7.3f s\n",t); close(fd); } Misure effettuate sul cluster linux Scrittura Velocita’ con 1 client (Mbyte/s) Velocita’ con 2 client (Mbyte/s) Velocita’ con 3 client (Mbyte/s) Velocita’ con 4 client (Mbyte/s) 512 13,84 5,38 4,10 5,20 1024 13,80 8,25 5,41 5,30 2048 12,80 7,10 4,10 3,60 4096 9,25 3,90 3,60 3,60 8192 8,80 3,70 3,56 3,40 Blocksize (Byte) Lettura Velocita’ con 1 client (Mbyte/s) Velocita’ con 2 client (Mbyte/s) Velocita’ con 3 client (Mbyte/s) Velocita’ con 4 client (Mbyte/s) 512 9,07 4,91 3,26 2,58 1024 10,01 5,63 3,85 2,93 2048 9,61 5,69 3,76 2,92 4096 9,65 5,62 3,76 3,12 8192 9,54 5,61 3,77 2,90 Blocksize (Byte) NFS V3 Client Speed Dal punto di vista del Client questo e’ il valore migliore da impostare in scrittura 14,00 10,00 8,00 6,00 4,00 2,00 0,00 512 1024 2048 NFS V3 Server Throughput Client = 1 Clinet = 2 Client = 3 Client = 4 4096 Blocksize (bytes) 8192 25 Throughput (Mbyte/s) Speed (Mbyte/s) 12,00 Dal punto di vista del Server questo e’ il valore che massimizza le scritture 20 15 10 Client = 4 5 Client = 3 Clinet = 2 0 512 1024 Client = 1 2048 Blocksize (Bytes) 4096 8192 NFS V3 Client Speed 12,00 Dal punto di vista del Client questo e’ il valore migliore da impostare in lettura 8,00 6,00 4,00 NFS V3 Server Throughput 2,00 Client = 1 Clinet = 2 Client = 3 14 Client = 4 0,00 512 1024 Blocksize (Byte) 2048 4096 8192 12 Throughput (MByte/s) Speed (MBytes/s) 10,00 10 8 6 4 2 Dal punto di vista del Server questo e’ il valore che massimizza le letture Client = 4 Client = 3 Clinet = 2 Client = 1 0 512 1024 Blocksize (Bytes) 2048 4096 8192 Conclusioni: I. Se un filesystem NFS esporta dati in lettura/scrittura tra piu’ di un client sara’ meglio usare un blcksize pari a 1024 II. Se invece il filesystem servira’ per dati readonly avremo il massimo throughput con un blocksize pari a 4096 Byte. Blocksize del filesystem SCSI vs NFS 120,00 NFS Client SCSI locale Speed (MByte/s) 100,00 80,00 60,00 40,00 20,00 0,00 512 1024 2048 Blocksize (byte) 4096 8192 Avendo piu’ tempo… client Client NFS Tcp/ip buffer Client NFS Tcp/ip buffer Client NFS Tcp/ip buffer Client NFS Tcp/ip buffer server Tcp/ip buffer Server NFS e… S.O. buffers NFS task Tcp/ip buffer NFS task Server NFS NFS task NFS task SCSI Buffer Stage di Informatica Grazie per l’attenzione!