У виводі вгорі є два поля, позначені "buff / cache" та "avam Mem" в пам'яті та рядках використання swap:
Що означають ці два поля?
Я спробував їх погуглити, але результати лише відображають загальні статті, і вони не пояснюють, що означають ці поля.
У виводі вгорі є два поля, позначені "buff / cache" та "avam Mem" в пам'яті та рядках використання swap:
Що означають ці два поля?
Я спробував їх погуглити, але результати лише відображають загальні статті, і вони не пояснюють, що означають ці поля.
Відповіді:
top«S НЕ сторінка керівництва описує поля, але free» s робить:
буфери
Пам'ять, яка використовується буферами ядра (
Buffersв/proc/meminfo)кеш
Пам'ять, яка використовується кешем сторінки та плитами (
CachedіSReclaimableв/proc/meminfo)баф / кеш
Сума буферів та кешу
в наявності
Оцінка того, скільки пам'яті доступно для запуску нових програм, не змінюючи місцями. В відміну від даних , що надаються в кеші або вільних полів, це поле займає в кеш облікового запису сторінки , а також , що не всі плити пам'яті відшкодування буде утилізовано з - за предмети , що знаходяться в експлуатації (
MemAvailableв/proc/meminfo, доступні на ядрах 3.14, емулювати на ядрах 2.6.27+ , інакше те саме, що безкоштовно)
По суті, "buff / cache" рахує пам'ять, що використовується для даних, що перебувають на диску або повинні закінчитися там незабаром, і в результаті потенційно може бути використана (відповідна пам'ять може бути доступна негайно, у випадку кешу, або дано достатньо часу, у випадку буферів - останні в будь-якому випадку повинні залишатися невеликими); «Доступні» вимірює кількість пам'яті , яка може бути виділена і використовуватися , не викликаючи більш замін (див Як я можу отримати кількість доступної пам'яті переносяться за відділами? Для набагато більш докладно про це).
Щоб трохи уточнити, буфери посилаються на дані, які записуються, - що пам'ять не може бути відновлена до завершення запису.
Кеш посилається на дані, які були прочитані - вони зберігаються навколо, якщо їх потрібно прочитати ще раз, але їх можна негайно відновити, оскільки їх завжди можна перечитати з диска.
/proc/meminfoмає поле для Writebackконкретно. Існує окреме поле Buffers, і саме це відображається як buffersв free -w. Тут поширена причина Buffersвикористання пам’яті: « 30% оперативної пам’яті - це буфери. Що це? »
Buffersє (зараз) частиною кеш-сторінки сторінки; вона не зараховується Cached, але вона зараховується як частина Active(file) + Inactive(file). Дивіться коментарі до відповіді Стівена Кітта. Dirtyце частина кеш-сторінки сторінки, на яку було написано, і тому в кінцевому підсумку потрібно записати назад на диск. Writebackне включаєDirty . Тому Writebackне є частиною значення Buffers.
Buffersнасправді означає кеш сторінок, пов’язаний із пристроєм блокування. Деякі файлові системи використовують це внутрішньо; інші його взагалі не використовують. / йде на виправлення моєї відповіді на питання "30% моєї оперативної пам’яті буфери".
Канонічним джерелом цієї інформації є /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