SALVE FORUM…Un problema legato all’utilizzo intensivo dello swap…
ho riscontrato una sensibile differenza tra lo swap di Linux e la Virtual-Memory di Windows…in dual-boot Windows 7 e Fedora 23.su un PC fisso con processore Athlon X2 e 8 GB di RAM .facendo girare sui due sistemi operativi uno stesso programma C che legge da un file un numero molto grande 5 Miliardi di interi per separarli in intervalli , e quindi ristamparli su un secondo file…è necessario un uso intensivo (circa 12.5 GB) dello swap su LINUX e della Memoria Virtuale su Windows.
Ho questo strano problema…quando il programma ha gia’ separato tutti e 5 i miliardi negli intervalli prefissati inizia la stampa sequenziale su file del vettore di circa 1000000 di interi che contiene l’intervallo da stampare, e che si ripete 5000 volte, perche’ ho 5000 intervalli da stampare. per rendermi conto da subito della velocità con cui procede la stampa ogni 50 vettori stampati mando su schermo un messaggio di notifica …allora:
SU WINDOWS 7 : OGNI 10 secondi sono stampati 50 vettori - in 1000 secondi il programma termina
SU LINUX :in 3minuti e 30 secondi sono stampati 50 vettori ->INACCETTABILE…TROPPA DIFFERENZA NELLA VELOCITA’ DI STAMPA!
da tenere presente che il problema è intrinsecamente legato all’uso intensivo dello swap…perche se faccio stampare prima che la RAM si riempie e si procede sullo swap-Linux o Memoria Virtuale-WINDOWS i tempi di stampa sono gli stessi!..il codice dove Linux rallenta è un banale ciclo for che riporto di seguito
for(k=0;k<5000;k++){fwrite(V[k], sizeof(int), N[k], ind_file);free(V[k]);}
i V[k] sono indirizzi di vettori di tipo int…allocati dinamicamente e successivamente riempiti con gli interi (5 Miliardi) letti da un file di input…dopo il caricamento dei primi 2.5 Miliardi sui suddetti vettori, la RAM è piena e inizia a crescere lo swap utilizzato …precisamente 8.5 GB di swap…quando inizia quel ciclo for di stampa e rilascio della memoria su V[k]…la differenza tra Windows e Linux mi pare importante…al punto da sensibilizzare i progettisti del Kernel Linux sul problema…se trovate anche voi del FORUM lo stesso risultato sui vostri PC…
P.S Ho postato lo stesso problema anche sul forum di UBUNTU…un tizio mi ha risposto che potrebbe dipendere dal fatto che le API di Windows sono velocissime…mentre lo swap Linux è lento perche’ usa la segmentazione …non potrebbe essere qualche parametro nella directory /proc/sys/vm…che non è impostato correttamente per stampare dati che sono contenuti nella partizione di swap?