Собственно, интересует как работает дисковый кеш на онтопике в деталях, а именно:
1) До какого предела можно заполнить дисковый кеш? Имеется ввиду сколько максимум свободной памяти он может занять?
2) Как часто или по каким критериям dirty pages синхронизируются с диском?
3) Происходит ли кеширование при операциях, не связанных с непосредственным вводом-выводом? Имеются ввиду не read()/write(), а open(), access(), stat().
4) Остаются ли данные в кеше после того, как выполнен write(), и данные УЖЕ записаны на физический диск?
Как известно, вызов write() на файловом дескрипторе, который открыт без опции O_SYNC приводит в первую очередь к копированию буффера в пространство ядра (в кеш) дабы вернуть управление софту так быстро как это возможно (тут мы не рассматриваем случаи когда происходит активная запись, кеш заполнен, и потому положительный эффект от такого механизма нивелируется). Вопрос в том, остаются ли данные в кеше после того, как они фактически сброшены на диск?
5) Аналогичный вопрос, происходит ли кеширование при O_SYNC? А при O_DIRECT? А при O_SYNC | O_DIRECT ?
6) Как вытеснить имеющийся кеш без применения всяких там «echo 3 > /proc/sys/vm/drop_caches». Слышал истории о том, мол, что кеш в современных ОС сделан умно, и потому чтение раз в пару часов к маленькому файлу не приводит к тому, что этот файл попадает в кеш. Собственно, интересует как вытесняется кеш чтением и записью в теории и на практике.
Через гугл инфы достаточно получить не удалось, мб. я не так искал?