Autore Topic: creazione e lettura file su disco o ram, differenza prestazioni?  (Letto 397 volte)

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
In alcune situazioni, mi serve di leggere e scrivere file di testo (e non solo) che vengono creati all'inizio del processo e cancellati alla fine del processo.
Mi chiedevo se ci potrebbero essere differenze sostanziali nell'accedere a file su disco o in ram.

potrei all'inizio del processo creare una cartella in ram con:
mount -t tmpfs -o size=500m tmpfs /mountpoint

scrivere e leggere i file creati nel mountpoint e poi smontarlo con:

umount /mountpoint

ma non so quanto il gioco valga la candela ....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:creazione e lettura file su disco o ram, differenza prestazioni?
« Risposta #1 il: 19 Ottobre 2016, 16:27:06 »
potrei all'inizio del processo creare una cartella in ram con:
mount -t tmpfs -o size=500m tmpfs /mountpoint

scrivere e leggere i file creati nel mountpoint e poi smontarlo con:

umount /mountpoint

...ma..... perché vuoi utilizzare quella riga con quei comandi per creare una cartella ? 
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:creazione e lettura file su disco o ram, differenza prestazioni?
« Risposta #2 il: 20 Ottobre 2016, 11:07:15 »
l'idea e' di far scrivere un file di testo a ffmpeg (nel caso specifico il file delle statistiche di compressione che ffmpeg riempie man mano che codifica) e leggerlo da un altro thread (il programma principale in gambas).

Mi chiedevo se ha senso fare il tutto in ram o non cambia molto scrivere su disco fisico.

In alcune situazioni particolari, in cui ho controllo sul PC (device embedded che realizzo con raspberry), mi creo un piccolo ramdisc in fase d'installazione (per minimizzare le RW su memory card), ma in casi generici posso realizzare il tutto a run-time .....
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:creazione e lettura file su disco o ram, differenza prestazioni?
« Risposta #3 il: 20 Ottobre 2016, 14:34:31 »
Scusa la mia totale impreparazione, ma ti domandavo perché non hai inteso usare le risorse di Gambas Mkdir( ) o Temp...
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:creazione e lettura file su disco o ram, differenza prestazioni?
« Risposta #4 il: 22 Ottobre 2016, 07:43:35 »
Scusa tu.  Nin sapevo di temp.  Ma dove la crea sta path?  Su disco o ram?  Dalla documentazione non si capisce.
se corri, morirai stanco (motto degli sniper)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.683
  • Ne mors quidem nos iunget
    • Mostra profilo
Re:creazione e lettura file su disco o ram, differenza prestazioni?
« Risposta #5 il: 22 Ottobre 2016, 15:24:07 »
La funzione Temp restituisce semplicemente un percorso per i file temporanei.

http://www.gambas-it.org/wiki/index.php?title=Temp
https://lwn.net/Articles/499410/


In alcune situazioni, mi serve di leggere e scrivere file di testo (e non solo) che vengono creati all'inizio del processo e cancellati alla fine del processo.
Be'... a mio modesto avviso, se vuoi restare a livello di RAM:
- potresti usare una variabile globale di tipo String;
- se poi vuoi lavorarci come un array di valori di tipo carattere (Byte), puoi utilizzare i vettori di tipo Byte[ ], caricandoti i dati stringa con il metodo .FromString( );
- se vuoi lavorare i dati della stringa come con una variabile di tipo File, allora puoi utilizzare i Puntatori, le variabili Stream e le funzioni di Gambas di dereferenziazione per leggere i dati, nonché la funzione Memory Stream per scrivere nell'area puntata dal Puntatore.
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline allegfede

  • Gran Maestro dei Gamberi
  • *****
  • Post: 738
    • Mostra profilo
Re:creazione e lettura file su disco o ram, differenza prestazioni?
« Risposta #6 il: 03 Novembre 2016, 11:49:02 »
tu hai ragione vuott.
Ma il file in questione e' FUORI del mio controllo. Lo crea e gestisce FFMPEG, ed io gli posso dire solo DOVE farlo (la path).

Quindi se farlo in memoria o meno dipende dalla partizione montata nel file system in ram o disco (o rete etc.)

Certo, accedendo alle API di ffmpeg potrei bypassare il problema, ma per ora mi accontento di come sta evolvendo il progetto dell'encoder batch.
se corri, morirai stanco (motto degli sniper)