Linux cache size limit

Содержание
  1. Arch Linux
  2. #1 2011-10-10 19:43:37
  3. How to reduce max buffer/cache size?
  4. #2 2011-10-10 21:58:33
  5. Re: How to reduce max buffer/cache size?
  6. #3 2011-10-11 16:04:48
  7. Re: How to reduce max buffer/cache size?
  8. #4 2011-10-11 20:18:50
  9. Re: How to reduce max buffer/cache size?
  10. #5 2011-10-17 20:59:36
  11. Re: How to reduce max buffer/cache size?
  12. Возможность ограничения размера файлового кеша в Linux?
  13. Re: Возможность ограничения размера файлового кеша в Linux?
  14. Re: Возможность ограничения размера файлового кеша в Linux?
  15. Re: Возможность ограничения размера файлового кеша в Linux?
  16. Re: Возможность ограничения размера файлового кеша в Linux?
  17. Re: Возможность ограничения размера файлового кеша в Linux?
  18. Re: Возможность ограничения размера файлового кеша в Linux?
  19. Re: Возможность ограничения размера файлового кеша в Linux?
  20. Re: Возможность ограничения размера файлового кеша в Linux?
  21. Re: Возможность ограничения размера файлового кеша в Linux?
  22. Re: Возможность ограничения размера файлового кеша в Linux?
  23. Re: Возможность ограничения размера файлового кеша в Linux?
  24. Re: Возможность ограничения размера файлового кеша в Linux?
  25. Настройка ядра Linux для повышения производительности памяти
  26. Контекст
  27. Объяснение

Arch Linux

You are not logged in.

#1 2011-10-10 19:43:37

How to reduce max buffer/cache size?

every time I copy a file which is bigger or similiar in size to my total RAM (4gb) I notice very low responsibility from firefox (which is totally unresponsive, can’t switch tabs or scroll for 30-60s). Of course my free memory is very low (something like 50-100mb) and I notice some swap usage. AFAIK linux caches everthing that is being copied, but in case of such big files it seems unnecessary.

Is there a way to reduce max buffer size?

I know that buffering is good in general, but I get a feeling that firefox is giving up ram and he has to read everything again from disk which slows him down. I always have many tabs open, so often it has around 30% of memory.

I searched many times on how to reduce buffer sizes, but I’ve always found only articles with «buffering is always good and never an issue» attitude.

I would be very happy to hear any suggestrions,

#2 2011-10-10 21:58:33

Re: How to reduce max buffer/cache size?

You can launch the copy operation (better yet, the shell or you filemanager) in a cgroup and limit the ram it is allowed to use.

More Documentation to be found in: /Documentation/cgroups/memory.txt

I’m sorry that i can’t provide you with more information, since this is just an idea that i had floating in my head for some time now. Having 4GB of ram didn’t make it necessary for me to implement it.

#3 2011-10-11 16:04:48

Re: How to reduce max buffer/cache size?

With 4 GB RAM you could probably disable swap altogether. If not, you might want to set swappiness to a low value (I like 0) and/or read that article: http://rudd-o.com/en/linux-and-free-sof … o-fix-that

Last edited by stqn (2011-10-11 16:05:52)

#4 2011-10-11 20:18:50

Re: How to reduce max buffer/cache size?

This seems a popular problem, going back years. The default Linux setup is bad for responsiveness, it seems.

Here’s the summary of what I do:

Firstly, install a BFS-patched kernel, for a better kernel scheduler, and also so that the ionice and schedtool commands will work. Bonus points for switching to BFQ while you’re at it — or stick with CFQ, which also supports ionice.

In /etc/fstab, use commit=60 rather than default of 5 seconds, and also noatime, e.g.:

/.bashrc — see post, e.g.:

In /etc/security/limits.d/ — see post. Read CK’s excellent blog article, for info.

Читайте также:  Postgresql linux add user

In your cp command, add the word verynice to the start, to stop the large batch copy from having the same priority as your UI.

Compile sqlite without fsync, to make e.g. firefox smoother.

Potentially use threadirqs to prioritize the interrupt-handling.

Edit: Updated vm.swappiness from 0 to 10, from CK’s blog.
Edit2: Also see patch and e.g. nr_requests in thread.
Edit3: Using nice instead of schedtool — not sure whether schedtool can hog the CPU.
Edit4: Added threadirqs.
Edit5: Tweaked sysctl.conf settings.
Edit6: Added nobarrier option to mount, and sqlite’s fsync.
Edit7: Removed swap comment — I do use a swapfile, these days, mainly because firefox needs so much virtual RAM to compile.

Last edited by brebs (2014-03-10 09:51:34)

#5 2011-10-17 20:59:36

Re: How to reduce max buffer/cache size?

Thank you all for the answers!

I’m sorry for replying so late, but I didn’t subscribe to this topic (didn’t know it does not happen automatically).
In the mean time I’ve came up with installing bfs-patched kernel myself and it almost got rid of the problem. I’ll try to apply your ideas in close future, as they look interesting.

@brebs:
While I was searching for solution to this problem I’ve found some opinions that disabling swap will not lead to any performace gains and can make system unresponsive at all. Did you have any problems? I was thinking about reducing swapinness as much as possible, but leaving swap there just in case.

Источник

Возможность ограничения размера файлового кеша в Linux?

ОС RHEL4 на ней крутится сервер БД (FireBird) физической памяти 14GB, но в моменты пиковой нагрузки ее периодически не хватает и тогда начинает активно использоваться файл-подкачки (swap увеличивается ненамного — до 1-2GB, но при этом очень много IOPs-ов), хотя при этом до 10GB памяти занято под кеш ОС(!), который мне совершенно не нужен (согласно показаниям NMON Cached=10000MB, примерно) Есть ли возможность заставить Linux не использовать под кеш более чем . % или МБ ОЗУ? Или хотя бы активнее освобождать кеш, когда приложения запрашивают память? пытался реализовать последнее, изменяя через sysctl, такие переменные как vm.swappiness vm.dirty_expire_centisecs эффект — нулевой.

Re: Возможность ограничения размера файлового кеша в Linux?

pagecache полностью вытесняемый, нет смысла его ограничивать. Если линух свопится значит из-за фрагментации или по другим причинам он не может использовать «реальную» память.

В какое значение ставил vm.swappiness, что говорит top, vmstat -s, vmstat -m?

Re: Возможность ограничения размера файлового кеша в Linux?

Re: Возможность ограничения размера файлового кеша в Linux?

Re: Возможность ограничения размера файлового кеша в Linux?

Cache Num Total Size Pages journal_handle 69 135 28 135 journal_head 5346 5346 48 81 revoke_table 6 290 12 290 revoke_record 0 0 16 226 mppaq 8 9 408 9 mpppq 36 40 476 8 scsi_cmd_cache 170 170 384 10 msi_cache 6 6 3840 1 sgpool-128 67 72 2560 3 sgpool-64 41 42 1280 3 sgpool-32 74 84 640 6 sgpool-16 48 48 320 12 sgpool-8 320 320 192 20 unix_sock 236 259 512 7 ip_mrt_cache 0 0 128 31 tcp_tw_bucket 0 0 128 31 tcp_bind_bucket 20 226 16 226 tcp_open_request 0 0 128 31 inet_peer_cache 2 61 64 61 secpath_cache 0 0 128 31 xfrm_dst_cache 0 0 256 15

Re: Возможность ограничения размера файлового кеша в Linux?

Re: Возможность ограничения размера файлового кеша в Linux?

параметры pages swapped in и pages swapped out быстро меняются? Это показатель активности свопа(скока страниц туда попало страниц и скока оттуда было возвращено).

Если нет то забей, значит в своп попала всякая ненужная фигня. Смена на лету vm.swappines не значит что он вытащит из свопа данные, они там будут лежать пока они не потребуются.

Читайте также:  Linux mint все версии

Re: Возможность ограничения размера файлового кеша в Linux?

> почему такое большое значение cached?

а почему бы и нет? Вся память что не используется идёт под кэш. Это не значит что линух урезал память программам в пользу кэша.

Re: Возможность ограничения размера файлового кеша в Linux?

вообще, эти все цифры надо смотреть когда система в своп пошла а не когда всё в порядке.

Re: Возможность ограничения размера файлового кеша в Linux?

Re: Возможность ограничения размера файлового кеша в Linux?

>но я так и не понял чтобы снизить интенсивность использования файлового кеша

Вот и я не понял, что значит «интенсивность использования»? Вы вроде хотите снизить использование swap’а, за счет «выкидывания» дискового кеша. Надо ставить в ноль, хотя, наверное лучше в 10. И ещё был патч (а может и не один), который автоматически регулирует этот параметр (соответственно система перестает использовать значение, задаваемое пользователем). Хотя вроде в дистрибутивы (кроме gentoo) их не включали.

Re: Возможность ограничения размера файлового кеша в Linux?

Ставь vm.swappiness в 0.

Пики, скорее всего, вызваны каким-нить заданием типа бэкапов, кроном, vacuum какой-нить(не знаком с firebird) итп.

mky, попытка подбора таких параметров на лету часто ошибочна ибо никто кроме тебя не знает что ты запустишь в следующий момент и как надо под это настроить систему. Это очень старый и больной вопрос(на ряду с другими какой io-шедулер выбрать, какой cpu-шедулер выбрать, делать ли cpu affinity для процессов и обработчиков прерываний, какой выбрать vmsplit, размеры буферов итп). Короче, пока автонастраивалки sysctl редко помогают :).

Re: Возможность ограничения размера файлового кеша в Linux?

>Короче, пока автонастраивалки sysctl редко помогают :).

Источник

Настройка ядра Linux для повышения производительности памяти

Контекст

Linux старается оптимизировать использование памяти, занимая свободное место кэшем. Если память никак не используется, то это память, потраченная впустую.

Кэш заполняется данными по мере работы системы и когда приложениям требуется память, ядро ищет среди страниц кэша блок подходящего размера, освобождает его и выделяет приложению.

В некоторых случаях этот процесс может влиять на производительность, поскольку освобождение кэша занимает больше времени, чем просто доступ к неиспользуемой оперативной памяти. Поэтому иногда можно наблюдать снижение производительности.

Причина этого исключительно в том, что оперативная память используется на полную мощность, и других симптомов, кроме случайного эпизодического увеличения задержек, может и не быть. Такая же картина может наблюдаться, если жесткий диск не справляется с чтением и записью. Влияние может быть и на такие компоненты операционной системы как сетевая карта / iptables / ebtables / iproute2 — вместо реальной причины вы видите проблемы в сетевой задержке. В этой статье обсудим это подробнее и посмотрим, как минимизировать воздействие на систему.

Объяснение

В Linux есть несколько видов кэшей:

dirty cache — блоки данных, которые еще не записаны на диск (в файловых системах, поддерживающих кэширование, например, ext4). Этот кэш можно очистить командой sync. Очистка этого кэша может привести к снижению производительности. При обычном режиме работы не стоит этого делать, если только вам не нужно сбросить данные на жесткий диск, например, при аварии.

clean cache — блоки данных, которые для ускорения доступа находятся и на жестком диске и в памяти. Очистка clean cache может привести к снижению производительности, поскольку все данные будут считываться с диска.

inode cache — кэш информации о местоположении inode. Его можно очистить аналогично clean cache, но также с последующим снижением производительности.

slab cache — хранит объекты, выделенные приложениям с помощью malloc, таким образом, что в будущем они могут быть повторно выделены с уже заполненными данными объекта, что ускоряет выделение памяти.

Читайте также:  Asus 550 ti драйвер windows 10

С dirty cache мало что можно сделать, но другие типы кэшей можно очистить. Их очистка может привести к двум результатам. В приложениях, потребляющих много памяти, таких как Aerospike, задержки уменьшатся. Но с другой стороны, замедлится скорость ввода-вывода, так как все данные придется считывать с диска.

Очистка slab cache может привести к временному кратковременному снижению скорости. По этой причине очищать кэш не рекомендуется. Вместо этого, лучше сообщить системе, что определенный объем памяти всегда должен быть свободен и его нельзя занимать кэшем.

При необходимости очистку кэша можно выполнить следующим образом:

Большую часть памяти занимает page cache, поэтому если очищаете кэш, то рекомендуется очищать его (echo 1).

Для исправления проблемы можно установить минимальное количество свободной памяти. Рассмотрим следующий пример:

В этом примере свободно 10 ГБ памяти, ограниченной с использованием параметра minimum free . В случае, если потребуется выделить 5 ГБ памяти, то сделать это можно мгновенно. Для обеспечения 10 ГБ свободной памяти освобождается часть кэша. Выделение памяти будет происходить быстро, а кэш динамически уменьшаться, чтобы 10 ГБ всегда оставались свободными. Распределение памяти будет выглядеть следующим образом:

Точная настройка этих параметров зависит от вашей нагрузки. Для Aerospike, если это позволяет доступный объем памяти, должно быть не менее 1,1 ГБ свободной памяти в min_free_kbytes . Тогда кэш будет в достаточном объеме, оставляя место для размещения приложений.

Настройка выполняется следующим образом:

NUMBER — количество килобайт, которые должны быть свободны в системе.

Чтобы на компьютере со 100 ГБ оставить 3% памяти незанятыми, выполните следующую команду:

Aerospike рекомендует оставлять не менее 1,1 ГБ в min_free_kbytes , т.е. 1153434.

В системе с общим объемом памяти более 37 ГБ следует оставлять не более 3% свободной памяти min_free_kbytes , чтобы ядро не тратило слишком много времени на ненужное восстановление памяти. В таких системах это будет составлять от 1,1 ГБ до 3% от общего объема оперативной памяти.

При установке этого параметра следует проявлять осторожность: слишком маленькое или слишком большое значение может отрицательно сказаться на производительности системы. Слишком низкое значение min_free_kbytes не позволит системе освободить память. Что может привести к зависанию системы или уничтожению процессов через OOM.

Слишком большое значение (5-10% от общей памяти) приведет к тому, что в системе быстро закончится память. Linux для кэширования данных файловой системы использует всю доступную оперативную память. Установка высокого значения min_free_kbytes может привести к тому, что система будет тратить слишком много времени на восстановление памяти.

RedHat рекомендует поддерживать min_free_kbytes на уровне 1-3% от объема памяти в системе. При этом Aerospike рекомендует оставлять не менее 1,1 ГБ, даже если это выше официально рекомендуемого значения.

Также рекомендуется либо уменьшать параметр swappiness до нуля, либо не использовать своп. В любом случае для операций с низкой задержкой использование свопа резко снизит производительность.

Установите значение swappiness в 0 , чтобы уменьшить потенциальную задержку:

Примечания

ВАЖНО: Все изменения, указанные выше, НЕ сохраняются. Они действуют только во время работы машины. Чтобы изменения были постоянными, необходимо внести их в /etc/sysctl.conf .

Добавьте следующие строки:

Как всегда, будьте внимательны при редактировании подобных параметров. Проверьте их на тестовых серверах перед внесением изменений в продакшн-окружение.

Еще один параметр, аналогичный вышеуказанному, — zone_reclaim . К сожалению, этот параметр вызывает агрессивное восстановление и сканирование. Поэтому лучше его отключить. Во всех новых ядрах и дистрибутивах этот параметр по умолчанию выключен.

Для проверки, что zone_reclaim отключен используйте следующую команду:

Если вам интересно узнать о курсе подробнее, приглашаем на день открытых дверей онлайн, где преподаватель расскажет о формате обучения и программе.

Источник

Оцените статью