Ъъъ ами всъщност нещата не стоят точно така.
Ядрото кешира ужасно много неща, но най-голям процент от тях е pagecache-a. В днешната (2.6) дефиниция за това попадат:
* блокове изчетени или за writeback-ване от/върху блокови устройства, напр. /dev/sda1. Затва например копирането на по-големи файлове става по-бързо когато имаш повече РАМ
'>
* всякакви mmap()-нати файлове. В това число влизат и shared библиотеки и exec-нати binaries например и затова използването на едни и същи библиотеки става по-бързо и повторното стартиране на една програма - тоже.
Тези неща съставят това, което free показва като "cached". Самото разделение 'buffers/cached' е малко глупаво и смислово не е много вярно за момента. Всичко вътре е кеширана информация някаква.
Останалите неща, които се кешират и влизат в графата "buffers" са VFS информация (inode кеш, съдържания на директории - затова вторият път като пуснеш find срещу голяма директория, минава по-бързо). Но има и още много други неща де (cat /proc/slabinfo).
Съответно има механизми, които изчистват всичката кеширана информация, която може (за малка част от нея е невъзможно). Има механизми за тунинговане на нещата. Най-вече понеже паметта е ограничена и не може да се кешира абсолютно всичко, чрез procfs може да се контролира дали да се набляга на кеширането на VFS cache или на pagecache. Параметри, които контролират при заявяване на нова памет дали да се изхвърлят кешове от паметта или да се влиза в суоп-а и в какво съотношение (swappiness).
По дефолт (макар че не е гаранция), когато един процес заяви памет и няма свободна, се изхвърлят най-отдавна използваните кешове от паметта, за да може програмата да се вмести в РАМ-та. В този случай, цялото това buffers+cache може да се приема дефакто като свободна памет.
Това е добра стратегия в много случаи, но в никакъв случай не е оптимална. Това означава, че ако пуснеш една ядяща памет като свиня програма и я държиш на заден фон да мързелува, дефакто губиш производителност, защото нямаш достатъчно памет за кешове. Тогава е добре swappiness да ти е повече от 0.
Обаче ако раздутата програма влезе в суоп-а, тогава кликването вървху нея ще трябва да изкара мегабайти от суопа, а това става бавно, т.е системата като цяло е по-малко responsive.
Кешираната информация НИКОГА не влиза в суопа - това е безсмислено разхищение на суоп памет, на дисково I/O и на процесорно време. Еб*л съм ти кеша дето за да го достъпиш трябва да го чакаш да се изкара от суопа и това да стане по-бавно ако въобще не се минаваше през кеширането. Просто се губи смисъла.
Гррр трябва да се науча да си преглеждам кво пиша преди да го постна, а не да го редактирам след тва
'>