Il 15/11/2024 12:26, Francesco Potortì ha scritto:
...
Per evitare ritardi lo script di visualizzazione non va a ricalcolare il
dato, ma questo viene fatto da un processo che ogni 5 secondi legge i dati
e se ci sono variazioni rispetto alla lettura precedente ricalcola il
risultato e va a scriverlo su un file.
attualmente scrive su un log, ma andare a leggersi l'ultimo campo
dell´ultima riga fa consumare altrettanto tempo quando il log è lungo
QUesto è vero solo se leggi il file sequenzialmente dall'inizio. Se il formato
ha record di lungheza fissa, puoi accedere direttamente all'ultimo record, se
invece la lunghezza è variabile ma conosci la lunghezza massima, puoi accedere
alla stringa finale da cui estrarre l'ultimo record. Solo se non conosci la
lunghezza massima di un record devi leggere dall'inizio.
Hummm... il comando tail può leggere l'ultima riga di un file di testo e
, con il parametro -f, emette le righe aggiunte via via che il file
cresce. Se uno lo usa in un pipe ....
la soluzione potrebbe essere di metterlo in un file che contiene solo
questo e che viene incluso con un include.
Farlo con un file reale rischia a lungo termine di fare un "buco" sul
settore che viene riscritto nel caso peggiore ogni pochi secondi, nel caso
migliore ogni minuto o due
Se così fosse i dischi si bucherebbero continuamente, anche solo per
l'aggiornamento del journal. Nella pratica, quelli che il VFS nel SO vede come
settori sono in realtà virtualizzati dal firmware del disco, che in linea di
principio se li può rigirare come gli pare, e per di più ha una sua cache (i
vecchi WD 4TB per esempio hanno una cache di 256MB).
Inoltre, le scritture su disco viste dal processo sono in realtà virtualizzate
dal VFS, che a sua volta usa abbondanti cache, e non le scrive così di
frequente. Per esempio sul mio vedo:
# sysctl vm.dirty_expire_centisecs vm.dirty_writeback_centisecs
vm.dirty_expire_centisecs = 3000
vm.dirty_writeback_centisecs = 500
Il che significa che ogni 5s il processo di writeback va a guardare la cache e
se ci sono dati non ancora scritti sul disco da più di 30s lancia una scrittura
fisica. Il che in pratica significa fra una scrittura fisica e l'altra di quel
dato sul disco passano almeno 30s.
In pratica, ormai da una decina d'anni se non più, che io sappia il problema
che ti stai ponendo non esiste, se non mi sfugge qualcosa.
--
Questa email è stata esaminata alla ricerca di virus dal software antivirus
Avast.
www.avast.com