Розбирався з page-cache у Linux - Alexander Bulimov - production engineer s notes
Звичайно, мені захотілося з освітньою метою написати таку утиліту для себе, щоб можна було погратися з кешем і бачити зміни.
Вибрав я для реалізації свій улюблений Python у зв'язці з Qt(PySide).
Актуальна версія візуалізатора лежить у моєму репозиторії.
Попередньо треба створити пару великих файлів, для 8Gb оперативної пам'яті нам потрібні 1Gb і 8Gb файли. Створити їх можна з /dev/urandom приблизно так:
А ще треба зібрати vmtouch:
Для початку, скинемо кеші:
У нас є два великі файли - large і large2:
Прочитаємо large, щоб він потрапив у inactive cache:
Прочитаємо його ще раз, щоб він потрапив до active cache:
Тепер можна нацькувати на нього vmtouch:
Видавимо його з кешу:
Знову прочитаємо large, щоб він потрапив у inactive cache:
Тепер прочитаємо large2
і бачимо, що він витісняє великі з inactive cache.
А тепер скинемо знову кеші, і запхнемо large в active cache:
І спробуємо прочитати large2:
А ще видно, як коливається кількість вільної пам'яті через періодичний характер роботи kswapd.
Якщо подивитися за допомогою vmtouch, яка частина large2 потрапила до inactive cache, то ми побачимо, що він при читанні витісняв сам себе.
Тепер можна видалити large, і побачити, як звільнився active cache, а потім видалити large2 і побачити, як звільнився inactive cache.
Ось такий досвід дозволяє побачити деякі проблеми в роботі з кешами в актуальних ядрах Linux. Цікаво буде повторити експеримент на свіжих ядрах після поліпшень в області Memory Management.