150 likes | 250 Views
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.
E N D
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 lxmaster04 Gigabit-Ethernet SCSI Fast Wide 160MB/s
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
fd=creat(fn,type) k=atoi(argv[1]); switch(k) { case 1: n=512; break; case 2: n=1024; break; case 3: n=2048; break; case 4: n=4096; break; case 5: n=8192; break; default: n=512; } 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); 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 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> 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; 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); }
fd=open(fn,type) k=atoi(argv[1]); switch(k) { case 1: n=512; break; case 2: n=1024; break; case 3: n=2048; break; case 4: n=4096; break; case 5: n=8192; break; default: n=512; } 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); for(k=0; k<(m/n); k++){ rc=read(fd, pn, n); } 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); } 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> 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; 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); }
Misure effettuate sul cluster linux Scrittura Lettura
Dal punto di vista del Client questo e’ il valore migliore da impostare in scrittura Dal punto di vista del Server questo e’ il valore che massimizza le scritture Scrittura
Dal punto di vista del Client questo e’ il valore migliore da impostare in lettura Dal punto di vista del Server questo e’ il valore che massimizza le letture Lettura
Blocksize del filesystem • Conclusioni: • Se un filesystem NFS esporta dati in lettura/scrittura tra piu’ di un client sara’ meglio usare un blcksize pari a 1024 • Se invece il filesystem servira’ per dati readonly avremo il massimo throughput con un blocksize pari a 4096 Byte.
S.O. buffers NFS task NFS task Server NFS Tcp/ip buffer NFS task SCSI Buffer NFS task Avendo piu’ tempo… client server Client NFS Tcp/ip buffer Client NFS Tcp/ip buffer Tcp/ip buffer Server NFS Client NFS Tcp/ip buffer Client NFS Tcp/ip buffer e…
Stage di Informatica Grazie per l’attenzione!