LINUX.ORG.RU

zram, swap и все, все, все

 , ,


1

2

Имею следующее:

vm.swappiness = 97
vm.vfs_cache_pressure = 97
а на деле
 $ cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/zram0                              partition       7340028 0       666
 $ free -h
              total        used        free      shared  buff/cache   available
Mem:          7,8Gi       3,2Gi       2,0Gi       1,9Gi       2,6Gi       3,0Gi
Swap:         7,0Gi          0B       7,0Gi
Хочу, что своп использовался по полной. Как сделать?

Deleted

Поставь 512 метров памяти и используй своп.

devl547 ★★★★★
()

1. Swappiness в 100 никто не отменял

2. watermark_scale_factor в 1000 никто не отменял

3. vfs_cache_pressure действует только на соотношение выгрузки из оперативки файлового кеша и inode'ов и не действует на вероятность свопа

4. В выводек free я вижу 2 гига полностью свободной оперативки, там даже кеша файлового нет, она вообще не заполнена. Что при этом система должна свопить? Хотя вот, кстати watermark_scale_factor может поправить и это по идее, в некоторых пределах.

chaos_dremel ★★
()

Передай ядру mem=128M.

aidaho ★★★★★
()

watermark_scale_factor

anonymous
()

Кстати, в зависимости от того, для чего надо держать оперативку свободной могут быть разные подходы. Можно, например ограничить RAM для одного или нескольких приложений через cgroups

https://wiki.archlinux.org/index.php/cgroups

chaos_dremel ★★
()
Ответ на: комментарий от chaos_dremel

1. Swappiness в 100 никто не отменял

не помогает в этом никак

2. watermark_scale_factor в 1000 никто не отменял

что это даёт?

4. В выводек free я вижу 2 гига полностью свободной оперативки, там даже кеша файлового нет, она вообще не заполнена. Что при этом система должна свопить?

не должна, но хочется

Deleted
()
Ответ на: комментарий от Deleted

что это даёт?

watermark_scale_factor:

This factor controls the aggressiveness of kswapd. It defines the
amount of memory left in a node/system before kswapd is woken up and
how much memory needs to be free before kswapd goes back to sleep.

The unit is in fractions of 10,000. The default value of 10 means the
distances between watermarks are 0.1% of the available memory in the
node/system. The maximum value is 1000, or 10% of memory.

A high rate of threads entering direct reclaim (allocstall) or kswapd
going to sleep prematurely (kswapd_low_wmark_hit_quickly) can indicate
that the number of free pages kswapd maintains for latency reasons is
too small for the allocation bursts occurring in the system. This knob
can then be used to tune kswapd aggressiveness accordingly.


kswapd начнёт чаще срабатывать.

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

devl547 ★★★★★
()
Последнее исправление: devl547 (всего исправлений: 1)
Ответ на: комментарий от devl547

это как в одном скетче: буквы знаю, слова понимаю, предложения, из них составленные, тоже. а вот, что это всё значит не понимаю.

Deleted
()
Ответ на: комментарий от devl547

kswapd начнёт чаще срабатывать.

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

1. Тут вроде бы не я хотел свопить при свободной оперативке

2. При 1000 по идее оно будет свопить реже, но больший объём данных за раз, что как раз даст возможность не запускать kswapd при каждом увеличении занятой памяти на 2 метра

3. Ограничение оперативки на группу процессов, имхо, всё ещё, выглядит рациональным подходом

chaos_dremel ★★
()

Хочу, что своп использовался по полной. Как сделать?

Память забей. У тебя два гига свободной оперативки, даже не под буферами. Компилировать openwrt поставь в 8 потоков.

Dark_SavanT ★★★★★
()
Ответ на: комментарий от Deleted

Ну вот потому и валится. Ты zram-ом отнимаешь больше памяти, чем добавляешь. Zram так работает - набившись говном до упора не может его вытеснить в пользу новых данных.

anonymous
()
Ответ на: комментарий от bodqhrohro_promo

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

darkenshvein ★★★★★
()
Ответ на: комментарий от Deleted

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

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от Deleted

компилю gcc, он ругается на нехватку памяти, а swap всё равно почти пустой

Ну, есть вероятность, что данные кидаемые в swap плохо сжимаются и поэтому при нехватке памяти туда записывается какое-то количество данных и всё. Оперативки больше нет, а то, что туда кидается просто не сжимается нормально. Соответственно, своп отказался принимать данные, оперативки кончилась совсем и на этом у системы больше данные девать некуда. Такая ситуация вполне реальна для алгоритма сжатия lz4, например. Он очень быстр, но как только становится понятно, что данные плохо сжимаются, он скипает сжатие и идёт дальше.

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

Если диск очень медленный, а проц очень быстрый, то, конечно можно заморочится с каким-то алгоритмом сжатия эффективным. Типа zstd.

Или совсем заморочится с zswap (lz4) + zram (zstd) + указать раздел для записи несжимаемых страниц памяти у zram. Всё зависит от того, что хочется получить в результате.

chaos_dremel ★★
()
Ответ на: комментарий от tailgunner

zswap без файла подкачки не работает, т.к. это кэш для свопа. на эту тему на ЛОРе уже обсуждали.

Zswap is a lightweight compressed cache for swap pages. It takes pages that are in the process of being swapped out and attempts to compress them into a dynamically allocated RAM-based memory pool.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.