Рейтинг:0

очищать кеш записи только в том случае, если нет активности чтения

флаг in

Обычно ядро ​​​​Linux очищает кеш записи, если превышено указанное ограничение по времени или кеш заполнен. Это приводит к зависанию жестких дисков, поскольку процесс записи значительно замедляет процесс чтения.

Вот почему я хочу избежать сброса кеша записи, если есть только небольшая активность чтения. Поскольку у меня 40 ГБ ОЗУ, это не должно быть проблемой. Мои мысли по этому поводу заключаются в том, чтобы установить ограничение по времени на пять минут, настроить размер кеша записи в соответствии с вашими потребностями и написать скрипт, который очищает кеш ТОЛЬКО, если нет активности чтения. Я не знаю, как это сделать, будет ли команда оболочки синхронизировать предложить достаточно хорошую производительность?

Моя цель - иметь кеш записи размером 1,2 ГБ. Промывание этого заняло бы много времени. Есть ли что-то, что можно остановить, как только снова появится активность чтения или более высокий PSI диска (будет ли это реагировать достаточно быстро??)

У меня есть два диска Seagate (не smr?): ST1000DM010-2EP102 - но я думаю, что эта информация не нужна.

С грязное_отношение В настоящее время я установил динамический размер кеша.

эхо 360000 > /proc/sys/vm/dirty_expire_centisecs
эхо 360000 > /proc/sys/vm/dirty_writeback_centisecs

Это установит максимальное время для начала сброса кеша записи на 1 час.

Справка: https://unix.stackexchange.com/questions/30286/can-i-configure-my-linux-system-for-more-aggressive-file-system-caching

Полезные команды:

С помощью следующей команды вы можете увидеть, сколько находится в кеше записи:

кошка /proc/meminfo | grep Грязный

Вывод:

Грязный: 104 КБ

Но это не очень важно..

Где я застрял?

Я хочу иметь возможность почти мгновенно отменить команду синхронизации (возможно ли это вообще), и я хочу знать, есть ли чтение процесса. Это все, что мне нужно для написания сценария.

Я нашел старый скрипт, который может отслеживать активность чтения: awk '{print $1}' /sys/block/sdb/stat

Как это использовать?

если [ $old-value -lt $new-value ];то КОМАНДА;fi
france1 avatar
флаг in
Что лучше: постоянный размер кеша записи или процент?
флаг jp
Отвечает ли это на ваш вопрос? [Ограничение фонового сброса Linux (грязные страницы)](https://serverfault.com/questions/126413/limit-linux-background-flush-dirty-pages)
france1 avatar
флаг in
Нет. Я видел этот пост, но они хотят установить как можно меньше кеша записи, это не то, что улучшает производительность на жестких дисках.
france1 avatar
флаг in
https://www.kernel.org/doc/html/latest/block/stat.html — использовать для /sys/block/sdb/stat
Рейтинг:0
флаг in

Использованные источники: https://askubuntu.com/questions/184204/how-do-i-fetch-only-numbers-in-grep https://www.kernel.org/doc/html/latest/block/stat.html https://askubuntu.com/questions/184204/how-do-i-fetch-only-numbers-in-grep

скрипт, который я закодировал:

#!/бин/баш                                                                                                                                                                                                

старые чтения=0
убит = Истина
пока (правда)
делать
    reads=`awk '{print $1}' /sys/block/sdb/stat`
    если [ "$oldreads" == "$reads" ]
    тогда
        если [ $(grep -o '[[:digit:]]*'<<<$(cat /proc/meminfo | grep Dirty)) -gt 10240 ]
        тогда
            эхо "синхронизировать"
            синхронизировать&
            syncPid="$!"
            oldreads="$ читает"
            убит = Ложь
        еще
            echo "В буфере записи не более 10 МБ, не синхронизируется."
        фи
    Элиф [$killed == False]
    тогда
         эхо "убить"
         убить "$ syncPid"
         убит = Истина
    еще
        echo "$oldreads => $reads"
        oldreads="$ читает"
    фи
    спать 1
сделано
france1 avatar
флаг in
Я не уверен, действительно ли команда синхронизации останавливается с помощью SIGINT :(
флаг in
Это ваше решение или что-то, что вы пробовали, но все равно не работает?
флаг jp
убийство `sync` ничего не даст.
france1 avatar
флаг in
Это работает, но, как сказал @AlexD, синхронизация уничтожения не работает. Могу ли я использовать что-то еще, что реагирует на сигнал 15?

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.