LINUX.ORG.RU
решено ФорумTalks

[cache][tweaker] настройка кэша

 


0

0

такая тема уже была...но может есть какие-то движения?..
короче просто пример:
десктоп с торрентами - если оставить торренты на день, то придя вечером, обнаруживаешь лютые тормоза первые 1-2 минуты - софт откликается очень неохотно
всё дело в кэше, забитом торрентами, а не данными нужных приложений
дык вот - есть ли возможность, например, для торрентов ограничить кэш в 50% доступной для кэша рамы?
дегенераты, не понявшие вопрос и кричащие о идеальности механизма кэширования, могут сходу пройти до чресел - они тупо не нужны
да - гуглил - куча вопросов, например, про nfs - при куче клиентов она засирает кэш своим мусором, вместо того, что нужно тому, кто сидит за сией железякой и/или других сервисов, предоставляемых серваком

★★★★

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

это не годится - ибо потрёт весь кэш, а не только «мусор»

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

Ну, это все те же контрольные группы, которые использовались в «патче в 200 строк», только помимо управления процессором, оно еще поддерживает управление I\O и памятью.

А вообще, присоеденяюсь к вопросу, ибо тормозной десктоп, от забитых кешей делюгой - не айс.

Lindows
()
Ответ на: комментарий от megabaks
# mkdir /dev/cgroup
# mount -t cgroup none /dev/cgroup
# mkdir /dev/cgroup/1
# echo `pidof torrent-downloader` > /dev/cgroup/1/tasks
# echo 4M > /dev/cgroup/1/memory.limit_in_bytes

В ядре должны быть включены.

CONFIG_CGROUPS
CONFIG_RESOURCE_COUNTERS
CONFIG_CGROUP_MEM_RES_CTLR
CONFIG_CGROUP_MEM_RES_CTLR_SWAP (to use swap extension)

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

это даст лимит по доступной памяти или всё же заставит ограничить доступный кэш для торрента?
прозреваю первое

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

Не попробуешь - не узнаешь. Мне лениво ядро пересобирать, чтобы проверять.

i-rinat ★★★★★
()
Ответ на: комментарий от Lumi

А как это избавит от замусоривания кэша, если у контейнеров общий файловый кэш?

И да, у меня вот rtorrent как-то неадекватно себя ведет в контейнере... iotop в CT0 показывает, что диск постоянно читается со скоростью порядка 20-30 Мбайт/сек при раздаче со скоростью около 2 Мбайт/сек

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

неа - для техраздела не годно
тут видимо надо было запилить тэги [вещества][loroogle][хочу странного]

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

почитал - не то оно может ограничить память доступную софтине, но кэш то остаётся общим

config CGROUP_MEM_RES_CTLR
	bool "Memory Resource Controller for Control Groups"
	depends on RESOURCE_COUNTERS
	select MM_OWNER
	help
	  Provides a memory resource controller that manages both anonymous
	  memory and page cache. (See Documentation/cgroups/memory.txt)

А в Kconfig написано, что page cache тоже.

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

почитай описание по линку


a. Isolate an application or a group of applications Memory hungry applications can be isolated and limited to a smaller amount of memory.
b. Create a cgroup with limited amount of memory, this can be used as a good alternative to booting with mem=XXXX.

megabaks ★★★★
() автор топика
Ответ на: комментарий от i-rinat

хотя да - что-то есть
*ушёл курить доки*

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

Kbuild:

Provides a memory resource controller that manages both anonymous memory and page cache

http://en.wikipedia.org/wiki/Page_cache:

In computing, page cache, sometimes ambiguously called disk cache, is a «transparent» buffer of disk-backed pages kept in main memory (RAM) by the operating system for quicker access.

Получается, что дисковый кеш тоже ограничивается.

i-rinat ★★★★★
()

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

Ivan_qrt ★★★★★
()

Насколько помню один из ораторов с таким же запросом в техразделе таки добился решения. Правда не помню каким извратом.

И да, покупай уже ссд, совсем не тормозит, да!

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

Товарищ, пройдите в направлении означенном ТС с такими запросами. Память изнашивается сильно?

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

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

# echo $((2*1024*1024)) > /proc/sys/vm/dirty_bytes
# echo $((2*1024*1024)) > /proc/sys/vm/dirty_background_bytes
i-rinat ★★★★★
()
Ответ на: комментарий от Ivan_qrt

> Ну интересует, в первую очередь чтение,если я всё правильно понимаю, но и на этом спасибо.

Скорее всего, неверно. Интересует вас кеш на запись, а точнее размер кэша грязных страниц. Поясню на примере.

1. Гиг памяти и половина занята чем-то очень важным, а половина — копии данных с диска, оставшихся с прошлых чтений («чистые» страницы). И вдруг понадобилась память для новой программы. В этот момент чистые страницы просто помечаются свободными, освободившаяся память предоставляется приложению.

2. Та же конфигурация, но теперь вторая половина занята грязными страницами — измененные данные, которые ждут записи на диск. Когда новой программе понадобится память, её можно будет получить, только записав грязные страницы на диск, иначе никак. Вот здесь и будут те самые «тормоза».

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

i-rinat ★★★★★
()
Ответ на: комментарий от vsemprivet

Вроде вспомнил, товарищу сбацали обертку либси для вызовов чтения и там ограничивали кэш, либо просто одирект добавляли, чтобы торрент не забивал кэш вообще. И, соответственно, любому не статически слинкованому бинарнику прелоадом подсовываешь обертку - получаешь профит.

vsemprivet
()
Ответ на: комментарий от i-rinat

По документации выглядит многообещающе, но ее до конца дочитывать надо:

# mount -t cgroup none /dev/cgroup -o memory

И не забывать ограничивать мем+своп, а то будет смешно, когда зарезанный апп полезет в своп при общей свободной памяти.

Еще бы кто проверил рабочее ли оно.

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

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

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

ну просто читать прямо...ну не совсем айс

megabaks ★★★★
() автор топика
Ответ на: комментарий от vsemprivet
[ root@desktop ] megabaks # mkdir /dev/cgroup
[ root@desktop ] megabaks # mount -t cgroup none /dev/cgroup -o memory
[ root@desktop ] megabaks # mkdir /dev/cgroup/1
[ root@desktop ] megabaks # echo `pidof cat` > /dev/cgroup/1/tasks
[ root@desktop ] megabaks # echo 40M > /dev/cgroup/1/memory.limit_in_bytes
[ root@desktop ] megabaks #
[ megabaks@desktop ] ~ $ free -m
             total       used       free     shared    buffers     cached
Mem:          4027        794       3233          0         42        326
-/+ buffers/cache:        425       3602
Swap:            0          0          0
[ megabaks@desktop ] ~ $ cat /usr/portage/distfiles/* /var/ftp/stuff/* &>/dev/null
[ megabaks@desktop ] ~ $ free -m
             total       used       free     shared    buffers     cached
Mem:          4027       3896        130          0         13       3456
-/+ buffers/cache:        426       3600
Swap:            0          0          0
[ megabaks@desktop ] ~ $
megabaks ★★★★
() автор топика
Ответ на: комментарий от megabaks

лол - зато из-за этого говна емерж синкаться перестал - тупо убивается при создании кэша :3

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

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

259	a. Enable CONFIG_CGROUPS
260	b. Enable CONFIG_RESOURCE_COUNTERS
261	c. Enable CONFIG_CGROUP_MEM_RES_CTLR
262	d. Enable CONFIG_CGROUP_MEM_RES_CTLR_SWAP (to use swap extension)

265	# mkdir -p /cgroups
266	# mount -t cgroup none /cgroups -o memory

268	2. Создай новую сигруппу и добавь в нее баш
269	# mkdir /cgroups/0
270	# echo $$ > /cgroups/0/tasks

272	Так как теперь мы в группе 0 то можем изменять лимит памяти:
273	# echo 4M > /cgroups/0/memory.limit_in_bytes


281	# cat /cgroups/0/memory.limit_in_bytes
282	4194304

284	Можно проверить использование:
285	# cat /cgroups/0/memory.usage_in_bytes
286	1216512

288	Успешная запись в файл не гарантирует установки лимита равному
289	значению записанному в файл. Такое может случиться
290	из-за множества факторов, как округление до страницы или
291	доступности системной памяти. Юзер должен считать из файла
292	после записи чтобы узнать значение принятое ядром.

294	# echo 1 > memory.limit_in_bytes
295	# cat memory.limit_in_bytes
296	4096

298	Значение из memory.failcnt показывает сколько раз лимит
299	был превышен.

301	Из memory.stat можно получить учетную информацию. Такую как
302	объем кэшей, RSS и активных/неактивных страниц.
vsemprivet
()
Ответ на: комментарий от megabaks

а на каком этапе ему поплохело? Сразу после пересборки ядра с нужными параметрами или где-то в процессе создания групп?

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

а вообще я выпилил группы эти дерьмовые

Всё работает отлично.

Собрал ядро с memory accounting, добавил новую группу и ограничил память:

rinat@acerone2:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          1498        280       1217          0          0        115
-/+ buffers/cache:        165       1332
Swap:            0          0          0
rinat@acerone2:~$ mkdir -m 0700 /dev/cgroup/user/$$
rinat@acerone2:~$ echo $$ > /dev/cgroup/user/$$/tasks
rinat@acerone2:~$ echo $((8*1024*1024)) > /dev/cgroup/user/$$/memory.limit_in_bytes
rinat@acerone2:~$ find ~/Видео/ -type f | xargs -i cat '{}' > /dev/null
rinat@acerone2:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          1498        310       1188          0          0        140
-/+ buffers/cache:        169       1328
Swap:            0          0          0

На 25 метров кеш увеличился. Это я в меню ткнул и запустил mousepad. С учетом сброса кешей перед замерами, нормально.

И в соседней вкладке, без ограничений:


rinat@acerone2:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          1498        312       1185          0          0        142
-/+ buffers/cache:        170       1327
Swap:            0          0          0
rinat@acerone2:~$ find ~/Видео/ -type f | xargs -i cat '{}' > /dev/null
rinat@acerone2:~$ free -m
             total       used       free     shared    buffers     cached
Mem:          1498       1459         38          0          0       1284
-/+ buffers/cache:        174       1323
Swap:            0          0          0
rinat@acerone2:~$

i-rinat ★★★★★
()
Ответ на: комментарий от megabaks

> ты попробуй не на баше

Объясни мне популярно, причем тут вообще баш? Память жрёт /bin/cat, как он связан с башем?

i-rinat ★★★★★
()
Ответ на: комментарий от megabaks

> посмотри внимательно что я написал

Прочитал всё ещё раз. Увидел, что ты запихнул pid cat'а в группу, а потом запустил новый cat, в дефолтной группе, без ограничений.

А про баш я так и не понял. Могу предположить, что под башем ты подразумевал $$. Ну так это и есть правильное использование, ибо группы наследуются. Ограничиваем себя, и все потомки наследуют ограничение.

Укажи ссылку на пост, если не хочешь повторяться, что ли; я ж помочь пытаюсь.

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

при запуске нового кошака пид там меняется

megabaks ★★★★
() автор топика
Ответ на: комментарий от i-rinat

и да - меня не интересует наследование - мне нужен конкретный процесс

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