În mod normal, kernelul Linux șterge memoria cache de scriere dacă este depășită o limită de timp specificată sau memoria cache este plină. Acest lucru duce la blocarea HDD-urilor, deoarece procesul de scriere face procesele de citire mult mai lente.
De aceea vreau să evit o golire a memoriei cache de scriere dacă există doar o mică activitate de citire.
Din moment ce am 40 GB de RAM, aceasta nu ar trebui să fie o problemă. Gândurile mele despre asta ar fi să setez limita de timp la cinci minute, să reglez dimensiunea memoriei cache de scriere în funcție de nevoile tale și să scriu un script care șterge memoria cache DOAR dacă există 0 activitate de citire. Nu știu cum să fac asta, ar fi comanda shell sincronizare
oferă performanțe suficient de bune?
Scopul meu este să am un cache de scriere cu o dimensiune de 1, 2 GB. Spălarea acestuia ar dura mult timp. Există ceva care poate fi oprit de îndată ce va fi din nou activitate de citire sau un disc PSI mai mare (ar reacționa suficient de repede?)
Am două unități Seagate (non-smr?): ST1000DM010-2EP102 - dar cred că aceste informații nu sunt necesare.
Cu dirty_raport
Momentan am setat o dimensiune dinamică a memoriei cache.
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
Aceasta ar seta timpul maxim pentru a începe golirea memoriei cache de scriere la 1 oră.
Referinţă: https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching
Comenzi utile:
Cu următoarea comandă puteți vedea cât este în memoria cache de scriere:
cat /proc/meminfo | grep Dirty
Ieșire:
Murdar: 104 kB
Dar asta nu este foarte important..
Unde sunt blocat?
Vreau să pot anula aproape instantaneu comanda de sincronizare (este chiar posibil) și vreau să știu dacă există o citire a procesului. De asta am nevoie pentru a scrie scenariul.
Am găsit un script vechi care poate monitoriza activitatea de citire: awk '{print $1}' /sys/block/sdb/stat
Cum să folosești asta?
if [ $veche-valoare -lt $noua-valoare];atunci COMANDA;fi