Come può la velocità di uscita essere superiore alla velocità di scrittura del disco rigido?Perl: scrivi mistero della velocità?
Update 1: ho cambiato il seguente:
antivirus spento. Nessun cambiamento.
Inserito nuovo disco fisico e utilizzato la prima partizione per il test. (Il disco per il test iniziale si trovava sull'ultima partizione , separata dalla partizione di sistema, ma sullo stesso disco fisico.). Risultato: esiste lo stesso modello ciclico , ma il sistema è non più non risponde durante il test. La velocità di scrittura è un po 'più alta (potrebbe essere dovuta all'utilizzo della prima partizione e/o non interferire più con la partizione del sistema ). Conclusione preliminare: c'era del tipo di interferenza dalla partizione di sistema.
Installato 64 bit Perl. I cicli sono finiti e tutto è stabile su una scala temporale di 2 secondi: CPU al 55% su single core, velocità di scrittura di circa 65 MB/s.
Provato sull'unità originale con 64 bit Perl. Risultato: da qualche parte nel mezzo. Cicli di 8 secondi, CPU 20-50%, 35 - 65 MB/sec (invece di cicli profondi di 0-100%, 0 - 120 MB/sec). Il sistema è solo moderatamente insensibile. La velocità di scrittura è di 50 MB/sec. Questo supporta la teoria dell'interferenza.
Flusso nello script Perl. Non ancora provato
OK, mi ha passato il first hurdle. Ho scritto un Perl script che può generare un file di testo molto grande (ad esempio 20 GB) e è essenzialmente solo un certo numero di:
print NUMBERS_OUTFILE $line;
dove $ linea è una lunga stringa con un "\ n" a fine.
Quando lo script Perl inizia la velocità di scrittura è di circa 120 MB/s (coerenza tra ciò che viene calcolata dallo script, Process Explorer e "IO Byte scritti/sec" per il processo di Perl in Performance Monitor.) E 100 % CPU sul single core su cui è in esecuzione . Questo tasso è, credo, superiore alla velocità di scrittura del disco rigido .
Quindi dopo un po 'di tempo (ad esempio 20 secondi e 2,7 GB scritti) l'intero sistema diventa molto poco reattivo e la CPU scende a 0%. Questo ultimo per es. 30 secondi. La velocità media di scrittura su queste due fasi è coerente con la velocità di scrittura del disco rigido . I tempi e le dimensioni menzionati in questo paragrafo variano molto da corsa a corsa. La gamma 1 GB a 4,3 GB per la prima fase è stata finora osservata. Questo è un transcript for the run with 4.3 GB.
Ci sono parecchi di questi cicli di GB di file di testo 9.2 generato nel test:
Che cosa sta succedendo?
completa Perl script e BAT driver script (HTML formattato con il tag pre). Se sono configurate le due variabili di ambiente MBSIZE e OUTFILE, lo script Perl dovrebbe essere in grado di eseguire invariato su altre piattaforme rispetto a Windows.
Piattaforma: Perl 5.10.0 da ActiveState; (inizialmente a 32 bit, successivamente a 64 bit); build 1004. Windows XP x64 SP2, nessun file di paging, 8 GB di RAM, CPU quad core AMD, dischi rigidi da 500 GB Green Caviar (velocità di scrittura 85 MB/s?).
Grazie. Ora ho provato 64 bit Perl (vedi domanda aggiornata), ma il prossimo passo sarà provare ad attivare autoflush. –
Ricorda, potresti anche aver bisogno di modificare il tuo filesystem se mantiene i buffer in giro. –
autoflush effettuerà una chiamata di sistema dopo ogni elemento di stampa. Nel tuo esempio le prestazioni saranno buone perché è 1 MB alla volta. Ma se si stampa 'a', 'b', 'c', 'd' sarà molto brutto perché si tratta di quattro chiamate di sistema di un carattere ogni ... attenzione per quello. –