Що означають поля "buff / cache" та "avail mem" у верхній частині?


28

У виводі вгорі є два поля, позначені "buff / cache" та "avam Mem" в пам'яті та рядках використання swap:

введіть тут опис зображення

Що означають ці два поля?

Я спробував їх погуглити, але результати лише відображають загальні статті, і вони не пояснюють, що означають ці поля.

Відповіді:


31

top«S НЕ сторінка керівництва описує поля, але free» s робить:

буфери

Пам'ять, яка використовується буферами ядра ( Buffersв /proc/meminfo)

кеш

Пам'ять, яка використовується кешем сторінки та плитами ( Cachedі SReclaimableв /proc/meminfo)

баф / кеш

Сума буферів та кешу

в наявності

Оцінка того, скільки пам'яті доступно для запуску нових програм, не змінюючи місцями. В відміну від даних , що надаються в кеші або вільних полів, це поле займає в кеш облікового запису сторінки , а також , що не всі плити пам'яті відшкодування буде утилізовано з - за предмети , що знаходяться в експлуатації ( MemAvailableв /proc/meminfo, доступні на ядрах 3.14, емулювати на ядрах 2.6.27+ , інакше те саме, що безкоштовно)

По суті, "buff / cache" рахує пам'ять, що використовується для даних, що перебувають на диску або повинні закінчитися там незабаром, і в результаті потенційно може бути використана (відповідна пам'ять може бути доступна негайно, у випадку кешу, або дано достатньо часу, у випадку буферів - останні в будь-якому випадку повинні залишатися невеликими); «Доступні» вимірює кількість пам'яті , яка може бути виділена і використовуватися , не викликаючи більш замін (див Як я можу отримати кількість доступної пам'яті переносяться за відділами? Для набагато більш докладно про це).


1
Буфери / кеш-пам’яті не доступні за достатнього часу ; це сегменти пам'яті, які є негайно доступними, якщо будь-яка програма потребує виділення певної пам'яті. Дивіться також linuxatemyram.com
DopeGhoti

4

Щоб трохи уточнити, буфери посилаються на дані, які записуються, - що пам'ять не може бути відновлена ​​до завершення запису.

Кеш посилається на дані, які були прочитані - вони зберігаються навколо, якщо їх потрібно прочитати ще раз, але їх можна негайно відновити, оскільки їх завжди можна перечитати з диска.


Це насправді це не означає. /proc/meminfoмає поле для Writebackконкретно. Існує окреме поле Buffers, і саме це відображається як buffersв free -w. Тут поширена причина Buffersвикористання пам’яті: « 30% оперативної пам’яті - це буфери. Що це? »
sourcejedi

З цього ( access.redhat.com/solutions/406773 ) я вважаю, що Writeback є тією частиною буферів, яка ще не записана на диск. Або ви говорите щось інше?
WallStProg

Цей опис був би оманливим. Buffersє (зараз) частиною кеш-сторінки сторінки; вона не зараховується Cached, але вона зараховується як частина Active(file) + Inactive(file). Дивіться коментарі до відповіді Стівена Кітта. Dirtyце частина кеш-сторінки сторінки, на яку було написано, і тому в кінцевому підсумку потрібно записати назад на диск. Writebackне включаєDirty . Тому Writebackне є частиною значення Buffers.
sourcejedi

Що Buffersнасправді означає кеш сторінок, пов’язаний із пристроєм блокування. Деякі файлові системи використовують це внутрішньо; інші його взагалі не використовують. / йде на виправлення моєї відповіді на питання "30% моєї оперативної пам’яті буфери".
sourcejedi

2

Канонічним джерелом цієї інформації є /usr/src/linux/Documentation/filesystems/proc.txt

Буфери : Відносно тимчасове сховище для необроблених блоків дисків не повинно бути надзвичайно великим (20 Мб або близько) Кешоване : кеш пам'яті для файлів, зчитуваних з диска (кеш сторінки). Не включає SwapCched.

Ви також можете знайти кілька деталей тут .

Кеш сторінок Linux (" Кешировано :" від meminfo) - найбільший споживач оперативної пам'яті в більшості систем. Щоразу, коли ви читаєте () з файлу на диску, ці дані зчитуються в пам'ять і переходять у кеш сторінки (1.).
Буферний кеш (" Buffers :" in meminfo) є близьким щодо кеш-пам'яті зубів / inode.

Або аналіз вихідного коду , як це .

Сума buffers- це повернене значення функціїnr_blockdev_pages(void)

long nr_blockdev_pages(void)
{
        struct block_device *bdev;
        long ret = 0;
        spin_lock(&bdev_lock);
        list_for_each_entry(bdev, &all_bdevs, bd_list) {
                ret += bdev->bd_inode->i_mapping->nrpages;
        }
        spin_unlock(&bdev_lock);
        return ret;
}

Сума cached:

global_page_state(NR_FILE_PAGES) – total_swapcache_pages – i.bufferram
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.