Il linguaggio di programmazione C;
Il Sistema Operativo Linux installato, con relativo utilizzo della
shell bash attraverso i principali comandi standard UNIX;
Il protocollo NFS (Network File System);
Sviluppo di programmi in C per la scrittura e la lettura di file da
512 MB su un hard disk remoto;
Test di velocità di NFS riguardo la creazione e la lettura di
file in un hard disk remoto.
Testing dell’efficienza di una rete composta da 5 macchine collegate tra
loro, analizzando la velocità di trasferimento dei dati tramite operazioni di
lettura e scrittura.
lxmaster01
Gigabit Ethernet
switch cisco
catalyst 6000
Fast Ethernet fullduplex
lxmaster02
lxmaster03
lxmaster04
lxmaster05
Il linguaggio C è il linguaggio che abbiamo utilizzato per creare
programmi mirati al raggiungimento dell’Obiettivo preposto.
Venne progettato da Brian W.Kernighan e da Dennis M.Ritchie nei Bell
Laboratories intorno al 1972 e divenne inizialmente famoso come
linguaggio di sviluppo di UNIX. E’ proprio grazie alla sua flessibilità che tali
programmatori lo utilizzarono per la scrittura della maggior parte delle
funzioni che compongono il kernel del SO stesso, anche se ultimamente
in cooperazione con la sua “evoluzione” detta C++ per i SO di ultima
generazione.
Si può definire come un linguaggio di medio livello, potente quasi come un
linguaggio macchina(es. assembly)però molto meno complesso e più
accessibile al programmatore.
Per la progettazione di programmi in C, inoltre, si possono utilizzare editor
testuali semplici come vi (già implementato in UNIX) oppure grafici come
Kate o un semplice note-pad in qualsiasi SO.
Per eventuali errori di tipo sintattico infine si può ricorrere ad un semplice
compilatore C.
Il tipo di distribuzione Linux installata è la versione “SUSE Enterprise
Server 9”.
PRINCIPALI PROCEDURE DI INSTALLAZIONE:
•
Partizionamento del disco di ognuna delle 5 macchine in un’area
di 5GB dedicata al sistema operativo utilizzando un File System
di tipo ext3 e in un’area relativamente piccola (256MB) dedicata
allo swapping, che tra l’altro Linux utilizza raramente;
•
Settaggio delle impostazioni varie,quali Keyboard Language,
Time Zone, System Language, Boot loader (di tipo GRUB o
LILO);
•
Impostazioni relative alla registrazione degli accounts root e user
con le relative passwords;
•
Scelta delle home directory dei vari utenti.
La shell è uno dei livelli che compongono i sistemi operativi UNIX.
Esegue la read (o lettura) di una linea di comando dallo standard input e
la interpreta secondo uno schema di regole prefissato. In pratica rende
comprensibili alla macchina i comandi che le vengono inviati.
PRINCIPALI COMANDI DELLA SHELL:
ls: visualizza il contenuto di una directory;
cd: cambia la directory di lavoro;
mkdir: crea una nuova directory;
touch: crea un nuovo file;
rm: cancellazione di un file;
chmod: cambia i diritti di lettura,scrittura ed eseguibilità di un file;
more: visualizza il contenuto di un file;
su: cambia utenza;
cd .. : sale al livello precedente nella struttura gerarchica del file system;
ps: visualizza i nomi dei processi in esecuzione in una data shell;
reboot: riavvio del sistema;
ssh: prende il controllo di una macchina remota collegata in rete;
find: ricerca di un file nel sistema.
Il Network File System è un protocollo sviluppato inizialmente da Sun
Microsystems nel 1984. L'NFS è un file system che consente ai computer
di utilizzare la rete per accedere ai dischi remoti come fossero dischi locali.
NFS è spesso associato a sistemi Unix, sebbene spesso sia utilizzato
anche da macchine utilizzanti i sistemi operativi Macintosh e Microsoft
Windows.
NFS permette ad n calcolatori che compongono un sistema distribuito di
condividere file, directory od un intero file system utilizzando il protocollo
client-server. Un calcolatore (client) deve richiedere esplicitamente ad un
altro calcolatore (server) del sistema distribuito di condividere una
directory o un file, dichiarando un punto di montaggio. Una volta effettuato
un montaggio un utente sul calcolatore client accede alla directory montata
in modo assolutamente trasparente, ossia accede alla directory remota
credendo di accedere ad una directory locale.
NFS si può pensare inoltre come uno strato superiore del famoso
protocollo TCP/IP.
#include <stdio.h>
#include <string.h>
#include <curses.h>
int main (int argc, char *argv[])
{
FILE *wp;
int blank=0;
int car=0;
char a=' ';
int words=0;
int cont=0;
if(argc!=2)
{
printf("\nSintax error! - Correct sintax: counter filename \n\n");
exit(-1);
}
wp=(fopen(argv[1], "w"));
while(a)
{
if(a==EOF)
{
if((car==0)&&(blank==0)&&(words==0))
printf("\n\nEmpty file...\n\n");
printf("\n\n#Characters are: %d \n\n",car);
printf("\n\n# Blanks are: %d \n\n",blank);
printf("\n\n#Words are: %d \n\n",words);
exit(-1);
}
fputc(a=getchar(),wp);
if((a!=' ')&&(a!=EOF)&&(a!='\n'))
{ car++;
cont++;
}
if(a==' ')
blank++;
if(((a==' ')||(a=='\n')||(a==EOF))&&(cont!=0))
{ cont=0;
words++;
}
}
}
Questo
programma è
stato per così
dire
l’introduzione al
linguaggio C e al
suo utilizzo. Una
semplice
funzione che
calcola il numero
di parole,di blank
e di caratteri
presenti in un
testo scritto in un
file creato al
momento
dell’esecuzione.
#include <stdio.h>
#include <string.h>
#include <curses.h>
#define SIZE 512024576
#define SIZE1 65536
int main(int argc, char *argv[])
{
if((argc!=3)||(atoi(argv[2])>SIZE1))
{
if(argc!=3)
printf("\n\nWrong Sintax ! Correct Sintax: fcreate OutputFile BlockSize\n\n");
if(atoi(argv[2])>SIZE1)
printf("\n\nBlockSize too long. It must be <= %d\n\n",SIZE1);
exit(-1);
}
FILE *wp;
char buffer[SIZE1];
char *bp;
bp=&buffer[0];
int conv=atoi(argv[2]);
int i=0,count,j=0;
for(i=0; i<SIZE1; i++)
buffer[i]='#';
int cicle=(SIZE/conv);
wp=fopen(argv[1], "w");
for(i=0;i<cicle;i++)
fwrite(bp,1,conv,wp);
printf("\n\nWriting completed\n\n");
close(wp);
}
#include <stdio.h>
#include <string.h>
#include <curses.h>
#define SIZE1 65536
#define SIZE 512024576
int main(int argc, char *argv[])
{
int n=10,i=0;
char car='#';
if((argc!=3)||(atoi(argv[2])>SIZE1))
{
if(argc!=3)
printf("\n\nWrong Sintax ! Correct Sintax: fread InputFile BlockSize\n\n");
if(atoi(argv[2])>SIZE1)
printf("\n\nBlockSize too long. It must be <= %d\n\n",SIZE1);
exit(-1);
}
FILE *wp;
char buffer[SIZE1];
char *bp;
bp=&buffer[0];
int bdim=atoi(argv[2]);
wp=fopen(argv[1], "r");
while(n>0)
{
n=fread(bp,1,bdim,wp);
i++;
}
printf("\n\n %d Reading completed...\n\n",i);
close (wp);
}
Test di velocità in scrittura su disco remoto con variazione di Block
Size e n° di macchine.
1 client
BLOCK SIZE
(byte)
TIME
(sec.)
VELOCITA'
(MB/sec)
2 clients
64
25,877
19,790
128
26,830
19,080
256
26,438
19,370
512
26,736
1024
BLOCK SIZE
(byte)
TIME 1
(sec)
TIME 2
(sec)
VELOCITA' MEDIA
(MB/sec)
19,150
64
247,904
249,814
2,06
26,121
19,600
128
187,69
192,015
2,70
2048
26,853
19,070
256
212,825
209,525
2,42
4096
27,260
18,780
16348
249,727
253,2
2,04
8192
26,475
19,340
32768
182,938
178,75
2,83
16348
26,468
19,350
65536
274,343
274,439
1,87
32768
26,089
19,630
65536
25,916
19,760
3 clients
BLOCK SIZE
(byte)
TIME 1
(sec)
TIME 2
(sec)
TIME 3
(sec)
VELOCITA' MEDIA
(MB/sec)
64
1116,91
1115,733
1116,442
0,46
128
1120,672
1120,277
1119,762
0,46
256
1132,208
1131,52
1130,556
0,45
16348
1140,314
1139,697
1139,195
0,45
32768
1131,114
1130,78
1130,311
0,45
65536
1127,831
1127,264
1126,627
0,45
BLOCK SIZE
(byte)
TIME 1
(sec)
TIME 2
(sec)
TIME 3
(sec)
TIME 4
(sec)
VELOCITA' MEDIA
(MB/sec)
64
1131,356
1131,069
1129,438
1130,131
0,45
128
1163,415
1162,886
1162,29
1161,771
0,44
256
1138,117
1137,728
1136,66
1136,259
0,45
4 clients
Velocità in scrittura con variazione del Block Size e del numero di clients
20
18
14
12
10
8
6
Velocità (MB/sec)
16
4
2
65536,0
32768,0
16348,0
8192,00
4096,00
2048,00
1024,00
512,000
256,000
128,000
64,000
0
4 clients
3 clients
Block Size (byte)
2 clients
1 client
Come si è notato dalle tabelle e dai grafici relativi
alle misurazioni effettuate, il Network File System
v3 presenta un miglioramento rispetto alle
versioni precedenti, per quanto riguarda la
velocità di trasferimento in scrittura, che risulta
essere costante anche al variare della dimensione del pacchetto di dati
inviato (Block Size). Se da un lato però la situazione risulta essere
migliore sotto questo punto di vista, dall’altro c’è da dire che aumentando
i client in rete si verifica un crollo delle prestazioni con un abbassamento
drastico della velocità.
Test di velocità in scrittura e in lettura su disco remoto con valore di
Block Size fisso (65536 byte) e variazione del n° di threads e n° di
macchine.
Ciclo di scrittura …
Threads
4
6
8
12
16
20
24
Macchine
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
1
20,05
19,53
19,71
18,78
19,18
18,52
19,74
2
0,33
0,35
0,51
0,63
0,62
2,99
4,30
3
*
*
*
0,44
*
2,61
2,50
4
*
*
*
*
*
0,56
0,46
Ciclo di lettura …
Threads
4
6
8
12
16
20
24
Macchine
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
VELOCITA'
(MB/sec)
1
12,09
12,90
12,78
13,48
13,92
14,39
13,58
2
7,88
9,26
7,45
7,53
8,26
5,39
5,45
3
8,68
8,58
5,87
8,26
8,27
8,19
8,39
4
6,56
6,32
6,76
6,70
6,15
6,50
6,34
Velocità di scrittura con variazione del numero di Threads e clients, e Block
Size costante (65536 byte)
25
15
10
Velocità (MB/sec)
20
5
0
24
20
16
12
8
6
4
Threads
4 client
3 client
2 client
1 client
Velocità di lettura con variazione del numero di Threads e clients, e Block
Size costante (65536 byte)
16
12
10
8
6
4
Velocità (MB/sec)
14
2
0
4
6
8
Threads
12
16
20
24
4 client
3 client
2 client
1 client
Lasciando invariato, invece, il Block Size ad
un valore definito (nel nostro caso 65536
byte) e modificando il numero di threads, si
ottengono due risultati diversi per quanto
riguarda la scrittura e la lettura. Mentre nel
primo caso all’aumentare dei threads, la velocità aumenta
visibilmente ad eccezione della rete con un solo client, nel
secondo,la velocità di trasferimento si mantiene pressoché costante.
Scarica

Informatica