Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Se avete dubbi o domande sulla programmazione in generale, fatele qui
Rispondi
Frank_C
Newbie
Messaggi: 13
Iscritto il: 20 febbraio 2016, 18:34
Architettura: x86_64 (64bit)

Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da Frank_C » 16 marzo 2016, 11:23

Mi dispiace confermare un secondo problema ancora legato all'utilizzo intensivo dello swap...ma ho la sensazione che questo sia piu' difficile da risolvere...
ho riscontrato un'altra sensibile differenza tra lo swap di Linux e la Virtual-Memory di Windows...in dual-boot Windows 8.1 e Linux..sul mio notebooK ASUS .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 8.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 8.1 : OGNI 5 secondi sono stampati 50 vettori - in 500 secondi il programma termina
SU LINUX :in 1minuto 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

Codice: Seleziona tutto

    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....

Avatar utente
TheSaint
Robin Hood
Messaggi: 7915
Iscritto il: 8 settembre 2007, 7:43
Architettura: x86_64 (64bit)
Località: davanti al computer

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da TheSaint » 17 marzo 2016, 16:41

Lo stesso programma, compilato con lo stesso compilatore ?
F the saint 13 anni da questo forum ;)
Gli uomini consumano il pianeta, almeno due di queste cose si possono ridurre.

Frank_C
Newbie
Messaggi: 13
Iscritto il: 20 febbraio 2016, 18:34
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da Frank_C » 17 marzo 2016, 21:16

lo stesso programma....ma il compilatore di Windows è incluso in cigwin.....che contiene una serie di pacchetti software tra cui GNU-gcc....invece su Linux il pacchetto gcc è quello di default quindi sempre Gnu-gcc

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da 4javier » 18 marzo 2016, 2:30

Hai verificato che il tempo impiegato effettivamente dal programma per completare le sue operazioni sia davvero così differente? Non vorrei che il tuo sistema di notifica fosse tratto in inganno da qualche sistema di caching o qualcosa di simile. Per evitare di aspettare troppo tempo solo per una prova, potresti ridurre il numero di interi a 3 miliardi, così da saturare la RAM ma ridurre il tempo di utilizzo del disco fisso. Con uno scarto così ampio tra i due sistemi, la differenza di tempo totale di esecuzione del tuo programma dovrebbe comunque essere evidente.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Frank_C
Newbie
Messaggi: 13
Iscritto il: 20 febbraio 2016, 18:34
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da Frank_C » 18 marzo 2016, 10:28

ho rifatto la prova anche su un vecchio PC fisso (13 anni ) con processore Athlon X2 e 8 GB di RAM...dove ho in dual-boot Windows 7 e Linux ultimo kernel
sia per 5 Miliardi che 3 Miliardi.
Windows 7 (caso 5 Miliardi) 10 secondi stampa 50 vettori
su LInux c'è un (naturale) miglioramento se diminuisco a 3 Miliardi...ma la differenza è sempre molto importante
-caso 5 Miliardi- ci vogliono 3 minuti e 30 secondi per stampare 50 vettori
-caso 3 Miliardi- ci vogliono 2 minuti e 30 secondi per stampare 50 vettori

ho paura che si dovra' modificare qualcosa nel Kernel di Linux per avvicinarsi alle prestazioni di Windows su questo problema..io non sono un Informatico ..ho imparato da solo a Programmare in C-C++....ma mi sembra un problema da non trascurare ...molte aziende nel mondo si stanno attrezzando per il trattamento di volumi sempre piu' grandi di dati...i famosi BIG DATA...forse sarebbe il caso di contattare direttamente gli sviluppatori del Kernel per informarli...

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?

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da 4javier » 18 marzo 2016, 11:20

Non hai risposto alla mia domanda. Hai provato a portare a termine il programma ed a vedere qual è il tempo totale reale di esecuzione? Ovviamente quando propongo di ridurre a 3 miliardi, intendo sia su win che su Linux.

P.S.
Cosa vorrà mai dire poi "le api sono più veloci..."
Ed anche quella sulla segmentazione andrebbe contestualizzata.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Frank_C
Newbie
Messaggi: 13
Iscritto il: 20 febbraio 2016, 18:34
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da Frank_C » 18 marzo 2016, 15:21

hai ragione... scusami 4javier...avevo fretta quando ho letto il tuo post...e non sono stato preciso nel rispondere..comunque come ho scritto nel post di apertura di questa discussione...il programma consiste essenzialmente di due funzioni:
-Funzione 1...legge 5 miliardi di dati casuali da un file di input (formato binario) e li distribuisce su 5000 intervalli di interi (implementati per mezzo di altrettanti vettori allocati dinamicamente); ciascun intervallo ha un'ampiezza costante di 2 Milioni di dati;quindi l'intervallo 0 contiene tutti i dati letti dal file di input di valore compreso tra [1-2000000],
l'intervallo 1 tutti i dati i cui valori sono compresi tra [2000001-4000000] e cosi via...

-Funzione 2- stampa sequenzialmente su file i 5000 vettori contenenti i suddetti intervalli ed è implementata dal ciclo for riportato nel primo post, dove ho omesso solo un messaggio di notitfica su schermo che appare ogni 50 vettori stampati essendo inessenziale per la soluzione del problema posto da questa discussione.
Terminata la stampa dei vettori con la Funzione 2 il programma chiude regolarmente...
I tempi di esecuzione per la Funzione 1 (caso 5 Miliardi-su un PC molto vecchio) sono circa 12 minuti su Linux...mentre Windows è un po' piu' lenta circa 4 minuti..
Sulla Funzione 2 come ho gia' scritto i tempi tra i due S:O. non sono piu' confrontabili......e vorrei tanto capire da cosa possa dipendere.....
Su Windows è questione di una decina di minuti sul notebook--- 20 minuti sul PC vecchio---su Linux anche col notebook ci vogliono 2 ore e30 minuti

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da 4javier » 19 marzo 2016, 14:00

Immagino la risposta sia "reali", ma per sicurezza chiedo nuovamente: le due ore e 30 minuti sono reali o stimate? Lo ha lasciato lavorare per almeno 40-50 minuti ed ancora non aveva finito?
Comunque ti consiglierei di porre il tuo quesito su StackOverflow, dove sicuramente otterresti un supporto più qualificato.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Frank_C
Newbie
Messaggi: 13
Iscritto il: 20 febbraio 2016, 18:34
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da Frank_C » 20 marzo 2016, 8:07

ho capito cosa intendi dire ....sono arrivato fino a mille vettori stampati..senza notare variazioni significative nel tempo medio di stampa per 50 vettori.e dopo ho chiuso..una accelerazione finale ci potrebbe essere considerato che nel ciclo di stampa è inclusa anche l'istruzione free per liberare la memoria allocata.. . rifaccio un test completo .ma non mi aspetto nulla di rilevante perchè le prime volte che ho fatto girare il programma su Linux --'se non mi ricordo male sono andato fino in fondo'
comunque è passato molto tempo...ed è meglio rifare il test completo..

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da 4javier » 20 marzo 2016, 12:51

In fondo se su win ci mette 10 minuti, dagli un quarto d'ora di tempo anche su linux. Un 50% di efficienza in meno sicuramente sarebbe un grosso punto a sfavore, ma non così grave come appare dalle tue stime.
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Frank_C
Newbie
Messaggi: 13
Iscritto il: 20 febbraio 2016, 18:34
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da Frank_C » 21 marzo 2016, 10:25

....mi dispiace non sono le mie stime...ho rifatto il test...il fatto che mi lascia piu' sconcertato..è che in conseguenza dell'istruzione free che ho incluso nel ciclo for dopo i primi 1500 verrori stampati (in tutto da stampare sono 5000) si ottiene un notevole incremento di RAM libera (la RAM disponibile aumenta durante l'esecuzione del ciclo for e si puo' vederlo direttamente aprendo Monitor di sistema) ...in altre parole ho la meta' della RAM libera e disponibile....ma il tempo per stampare i 50 vettori rimane lo stesso come per i primi 50 vettori stampati con la RAM del tutto piena...secondo me' è questa la chiave del mistero...perche' mentre Windows includendo nel ciclo for di stampa l'istruzione free accelera impetuosamente...LINUX non ne trova alcun giovamento ...quando deve usare lo swap perchè la RAM è piena....la stampa rallenta vistosamente (tanto di piu' quanto piu' è la dimensione dello swap utilizzato)...dopodiche' anche rilasciando la memoria allocata..non cambia piu' niente......

Avatar utente
4javier
Moderatore
Messaggi: 9541
Iscritto il: 5 ottobre 2008, 17:19
Architettura: x86_64 (64bit)

Re: Swap-Linux e Memoria Virtuale-Windows PARTE 2:LA STAMPA SU FILE

Messaggio da 4javier » 21 marzo 2016, 11:50

Ma dopo la free(), usa la ram ma in maniera molto lenta, o continua ad usare la swap?
Offertissima: Mi Vendo!!! Cercasi lavoro o corso di formazione finanziato in tutta italia da Roma in su, oppure in provincia di Catanzaro.
In particolare sono interessato ad opportunità su Roma.

Rispondi