Discussione:
Definire Transfer Size
(troppo vecchio per rispondere)
arkkimede
2017-08-02 00:23:34 UTC
Permalink
Ho da poco acquistato una memoria usb della Lexar in cui erano dichiarate velocità di scrittura elevatissime.
Non fidanomi ho anche usato un programma test sotto windows (ATTO) in grado di testare le velocità di scrittura.
Il risultato di questo test è stato che se riesco a definire un "Transfer Size" di almeno 64k potrei arrivare a velocità di 30MB/sec.

La domanda allora è la seguente: come posso definire in un programma c sotto linux il transfer size?
Premetto che cercando su internet sono giunto all'istruzione setvbuf ma devo averla usata male perché non sono riuscito a giungere alla velocità di scrittura sperata.
In particolare (mantenendo l'essenziale):

char *buff = (char *)malloc(sizeof(char)*65536);
FILE *fp = fopen("nomeFile.bin","wb");
setvbuf(fp, buff, _IOFBF, (size_t)65536);

fwrite( );
fwrite( );
fwrite( ); etc.

Grazie per qualsiasi suggerimento
f***@gmail.com
2017-08-02 02:33:16 UTC
Permalink
<snip>
Grazie per qualsiasi suggerimento
Questa è roba che solitamente gestisce il kernel. Scrivi come se non sapessi
nulla. Ti potrai forse preoccupare solo dopo che avrai fatto profiling e avrai
capito che il problema è lì.

Ciao!
arkkimede
2017-08-02 06:04:59 UTC
Permalink
Post by f***@gmail.com
Questa è roba che solitamente gestisce il kernel. Scrivi come se non sapessi
nulla. Ti potrai forse preoccupare solo dopo che avrai fatto profiling e avrai
capito che il problema è lì.
Ciao!
Io in effetti scrivo come se non sapessi nulla solo che ho una scheda che genera un flusso di 15,36MB/s e il processo va in overun.
Posso fare allora qualcosa a livello di kernel?
In altre parole come fa l'applicativo ATTO a testare questi flussi?
Essendo Microsoft e' differente?
Grazie.
f***@gmail.com
2017-08-02 13:30:10 UTC
Permalink
Post by arkkimede
Post by f***@gmail.com
Questa è roba che solitamente gestisce il kernel. Scrivi come se non sapessi
nulla. Ti potrai forse preoccupare solo dopo che avrai fatto profiling e
avrai capito che il problema è lì.
Io in effetti scrivo come se non sapessi nulla solo che ho una scheda
che genera un flusso di 15,36MB/s e il processo va in overun.
Se scrivi più veloce di quanto puoi leggere il problema ce l'avrai sempre.
Post by arkkimede
Posso fare allora qualcosa a livello di kernel?
Non ho capito benissimo che cosa hai in mente o quale sia il tuo *vero*
problema. Comunque sotto /sys/block/xxx ci sono i parametri di ogni
periferica.
Post by arkkimede
In altre parole come fa l'applicativo ATTO a testare questi flussi?
Essendo Microsoft e' differente?
Per queste due domande non ho certezze ma solo una vaga idea, quindi passo.


Ciao!
Andrea Rimicci
2018-01-05 14:42:43 UTC
Permalink
Post by arkkimede
Grazie per qualsiasi suggerimento
Tempo fa avevo fatto un qualcosa di simile giusto perché non sapevo
come passare il tempo, magari può esserti utile.
Link: http://myunfinished.work/cmdline/index.php?page=4&media=pc
--
andrea - ri mi cci, name
dacav
2018-01-06 14:36:14 UTC
Permalink
Post by arkkimede
La domanda allora è la seguente: come posso definire in un
programma c sotto linux il transfer size?
In fin dei conti si tratta della dimensione del buffer? Se si,
sotto Linux hai il comando `dd` che accetta come parametro la
dimensione dei blocchi (esempio: `bs=512`) e il numero di blocchi
da trasferire (esempio: `count=1024`).

…se poi vuoi scrivere il tuo programmino perché ti diverte,
allora è un'altra storia :)

Loading...