LINUX.ORG.RU

механизмы /proc/sys/vm и cached


1

1

Добрый день.

Запускаю много-много вм ) Вываливаюсь в своп не смотря на то что cached мог бы и подвинуться. sync && echo 1 > /proc/sys/vm/drop_caches помогает и после этого запускаю еще одну виртуалку, без вываливания в своп. своп кстати выставлен в ноли vm.swappiness=0 но судя по vmstat в своп пишет все равно. Можно записать в крон дропать кеши, но это какой то педальный способ.

Почитал всякое о параметрах /proc/sys/vm

Думал-думал, сложилась следующая картина

в условиях нехватки свободной памяти происходит сканирование памяти на предмет dirty страничек частота сканирования задается через параметр dirty_writeback_centisecs после нахождения dirty pages ядро сравнивает их «возраст» с параметром dirty_expire_centisecs если возраст страницы больше или равно - записать их на диск

размер dirty страниц максимальный размер страничек порожденных одним процессом (лимит, после которого они в обязательном порядке будут записаны) устанавливается через dirty_ratio в процентах от общего размера памяти

dirty_background_ratio Минимальное число памяти (в процентах), где позволено хранить гразные данные вместо записи на диск. Этот параметр должен быть намного меньше чем dirty_ratio что бы позволить записывать куски грязных данных за один проход. по идее оно должно быть равно размеру (или четным) блока файловой системы во избежание фрагментации

по идее необходимо увеличить частоту сканирования (увеличится энергопотребление) и нагрузка на винт понизить dirty_expire_centisecs (больше страниц попадает под запись)

понизить dirty_ratio понизить dirty_background_ratio (но не меньше dirty_ratio) и не меньше чем размер блока на фс

покрутил параметры и так и этак - стали активно чистится buffers

не понимаю что такое cached и как управлять какое колво памяти выделять под них.

swapoff -a в своп больше не пишет ) стало легче.

но хотелось бы быть уверенным, что я правильно понял и осознать про cached ...

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

понедельник начинается в субботу. а с cached задолбался уже. или это «тот самый известный баг с sata винтами про который все говорят, но что за баг сказать не могут»? (с) не помню кто

cirill ()

> swapoff -a в своп больше не пишет ) стало легче.

А у меня пишет даже если поддержку в ядре отключаю... Т.е., не пишет, конечно, но kswap периодически появляется в iotop'e с приличной нагрузкой, а по графику в gkrellm видно, как насилуется системный винт... И при этом идет торможение интерфейса.

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

rain@mws64:~$ grep -i swap /boot/config-`uname -r`
# CONFIG_SWAP is not set
rain@mws64:~$ ps aux | grep swap
root 356 0.0 0.0 0 0 ? S 18:58 0:00 [kswapd0]

rain@mws64:~$ cat /proc/swaps
cat: /proc/swaps: Нет такого файла или каталога

rain@mws64:~$ free -m
total used free shared buffers cached
Mem: 2009 1020 988 0 89 593
-/+ buffers/cache: 337 1671
Swap: 0 0 0

Причем, судя по графику в gkrellm, большей частью идет чтение.

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

http://rain.homelinux.org/fileupload/torrents/kswapd.torrent

Я, правда, не понял, почему съемка была с такой низкой частотой кадров, но что происходило понять можно - запустил перечитывание хэша в rtorrent, видно, как оно читалось с массива (4 отдельных диска, не связанных с 1-м, системным), как при этом что-то периодически читалось-писалось на системный диск (пики по 10 Мб/сек или около того) и как периодически висел в iotop'e kswapd. При его «активности» мышь начинала перемещаться рывками. В top после этого:

356 root 20 0 0 0 0 S 0.0 0.0 0:04.21 [kswapd0]

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

да, прям-прям 99 процентов скушивает. при этом по показаниям iotop - kswapd0 ничего не делат, просто грузит диски )

может inode как то задействованы? какая файловая система кстати?

PS 206 на чтение! raid 10?

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

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

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

> какая файловая система кстати?
rain@mws64:~$ df -hT
Ф. система Тип Разм Исп Дост Исп% смонтирована на
/dev/sda5 reiserfs 2,0G 1,2G 843M 58% /
tmpfs tmpfs 1005M 4,0K 1005M 1% /lib/init/rw
varrun tmpfs 1005M 164K 1005M 1% /var/run
varlock tmpfs 1005M 0 1005M 0% /var/lock
udev tmpfs 10M 208K 9,8M 3% /dev
tmpfs tmpfs 1005M 0 1005M 0% /dev/shm
/dev/sda7 reiserfs 9,8G 6,8G 3,1G 69% /usr
/dev/sda1 ext2 122M 18M 98M 16% /boot
/dev/sda9 reiserfs 9,8G 3,1G 6,8G 31% /home
/dev/sda10 xfs 432G 408G 24G 95% /home/share
/dev/md0 xfs 895G 842G 53G 95% /media/storage
/dev/sdf1 xfs 932G 863G 69G 93% /media/movies

rtorrent при работе задействовал только md0.

PS 206 на чтение! raid 10?


Нет, 5-й RAID на 4-х древних Seagate'ах, еще 10-й модели. Сейчас у меня только системный WDC Blue обеспечивает половину от максимальной скорости массива :) :

rain@mws64:~$ hdparm --direct -tT /dev/sda

/dev/sda:
Timing O_DIRECT cached reads: 498 MB in 2.00 seconds = 248.74 MB/sec
Timing O_DIRECT disk reads: 402 MB in 3.01 seconds = 133.37 MB/sec

низкая частота - скорее всего предел насыщения шины по пропускной способности


Так нет же, я пробовал и на совершенно незагруженной системе и с разными параметрами - запись идет с частотой один кадр в пару секунд, раньше все работало прекрасно... Сломали recordmydesktop в Squeeze?

не увидел как часто-часто писалось на системный диск. как его идентефицировать в gkrellm?


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

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

У меня честно говоря только одна мысль - про inode ) глупость спрошу, но вы xfs не оптимизировали каким либо образом? вынесением журнала на системный раздел к примеру. ... есть еще параметр управляющий поведением inode может с /proc/sys/vm/vfs_cache_pressure поиграться?

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

а что системный диск выдает на линейное чтение много больше чем старые винты это не удивительно. зато ипопсов при множественном одновременном чтении raid в любом случае будет выдавать много больше. пошел смотреть видео еще раз )

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

не фига не понять из видео.

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

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

> xfs не оптимизировали каким либо образом

Да нет, разве что обычный xfs_fsr иногда запускал... Но каким боком он к системному диску?

вынесением журнала на системный раздел к примеру


Нет, все разделы полностью самостоятельные.

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

> а что системный диск выдает на линейное чтение много больше чем старые винты это не удивительно.

Я просто о том, что 200 Мбайт/сек - не насколько уж и большая скорость по современным меркам :)

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

> имхо стоит поставить логирование чтения-записи по разделам и сливать в файлик, потом его разгребать и смотреть.

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

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

> HDD Tune Pro 3.10 (Read) Средняя скорость чтения

rain@acnote:~$ apt-cache search HDD Tune
gdesklets-data - Applets for gdesklets
rain@acnote:~$

Что это и почему я должен ему доверять больше, чем реальным данным, считывающимся с не менее реального винта в моем десктопе?

root@mws64:/usr/src# echo 1 > /proc/sys/vm/drop_caches
root@mws64:/usr/src# echo 2 > /proc/sys/vm/drop_caches
root@mws64:/usr/src# free -m
total used free shared buffers cached
Mem: 2009 387 1622 0 16 79
-/+ buffers/cache: 291 1718
Swap: 0 0 0
root@mws64:/usr/src# sync ; dd if=file of=/dev/null
6144000+0 записей считано
6144000+0 записей написано
скопировано 3145728000 байт (3,1 GB), 26,3009 c, 120 MB/c

Далеко не начало диска. И да, Reiser, большие файлы и все такое.

Начало винта:

root@mws64:/usr/src# echo 1 > /proc/sys/vm/drop_caches
root@mws64:/usr/src# echo 2 > /proc/sys/vm/drop_caches
root@mws64:/usr/src# sync ; dd if=/dev/sda of=/dev/null bs=1M count=10000
10000+0 записей считано
10000+0 записей написано
скопировано 10485760000 байт (10 GB), 78,0874 c, 134 MB/c


Или задела именно цифра 200? Так я и не говорил, что это может быть с одного десктопного винта, просто цифра уже не является заоблачной. Пара таких винтов, как выше вполне ее покрывает при общей стоимости чуть больше 100$.

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

про 206 мб я упомянул по той причине, что редко вижу пользовательское ПО столько потребляющее. обычно всетаки поменьше )

повнимательнее посмотрел за своей системой (недобук) при больших дисковых нагрузках - если в момент старта виртуалок(своп выключен, cached сожрано все, free памяти - 15 мб) запустить загрузку firefox c кучей закладок, в iotop вижу kswapd0 - не читает, не пишет, но процент загрузки демонстрирует. vmstat ранее и в эти моменты не показывает какой либо активности по чтению-записи в своп.

нужен инструмент по наблюдению за дисковой. я не знаю ничего кроме vmstat ( и iotop, может кто подскажет?

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

потестил. запускаю сколько угодно процессов жрущих память и генерящих дисковую нагрузку до тех пор пока free memory 15 мб kswapd0 не проявляет никакой активности. как только 14-13 мб - kswapd0 начинает отъедать время дисковых операций. в этот момент vmstat -a показывает что колво memory inact уменьшается, а activ соотсветсно увеличивается. cached не уменьшается и не увеличивается (ибо все уже сожрано) ... что же такое эти cached и как ими управлять?

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

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

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

>нужен инструмент по наблюдению за дисковой.

iostat, но он показывает активность на уровне всего диска, а не отдельных разделов.

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

как зачем? чтобы срочна срочна загрузить туда чего либо ) к примеру загрузка виртуальной машины после sync и сброса кешей проходит быстрее и в этот момент система более отзывчива чем еслиб было свободно 15мб памяти, а все остальное свободное пространство занято кешами. в производстве - посчитать какойнить отчет немерянный.

вместо того, чтобы просто мапгуть память и загрузить приложение, получаем ... памяти свободной нет, давате выбросим пару старых страничек, попробуем дальше грузить ... ах опять нет памяти, давайте повторим! и проц грузит дополнительно, если есть своп, так он еще и в своп скинет (дисковые ио) ... а даже если свопа нет, то все равно kswapd0 даст прикурить диску.

я вообщем то не против cashed - против того, что жрет все доступное пространство, аля виста. отдать ему 10 процентов и высказать убедительное мнение, что ежели чего - срочна все бросай и беги, а не по одной страничке выделяй.

кстати, readahead на контроллерах имеет смысл только при множественном случайном доступе, в большинстве случаев лучше больше на write отдать (тобиш buffers увеличить, что вообщем то легко сделать через dirty_ratio) на десктопе профита имхо еще поменьше будет )

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