OpenVZ Forum


Home » International » Russian » Как ограничить размер Свопа ?  () 1 Vote
Как ограничить размер Свопа ? [message #6515] Tue, 19 September 2006 17:04 Go to next message
xakmak is currently offline  xakmak
Messages: 14
Registered: June 2006
Junior Member
Всем привет! Тут у меня юзеры некоторые просят увеличить им количество свопа, я так понимаю своп вообще VE не дается ? если дается то как указать его размер ?
Re: Как ограничить размер Свопа ? [message #6516 is a reply to message #6515] Tue, 19 September 2006 17:44 Go to previous messageGo to next message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
Своего свопа у VE нет, но часть памяти используемой VE запросто может переместиться в системный своп.
Просьба ваших клиентов увеличить своп не вполне понятна, поэтому хотелось бы понять почему у них возникло такое пожелание.
Если клиентам не хватает выделенных для VE ресурсов памяти -- можно попробовать увеличить размер swap на ноде и распределить новые ресурсы по VE. Злоупотреблять однако не стоит -- если ноде действительно не хватает памяти, то большой своп конечно позволит продолжать работу, но нода из-за постоянной работы со свопом будет сильно тормозить: даже самый быстрый диск все-таки существенно медленнее RAM...
Re: Как ограничить размер Свопа ? [message #6517 is a reply to message #6516] Tue, 19 September 2006 19:23 Go to previous messageGo to next message
xakmak is currently offline  xakmak
Messages: 14
Registered: June 2006
Junior Member
получается что ту оперативку которую я выделяю через privvmpages ето оперативка уже со Свопом ? система сама будет определять отправлять в свап или нет ? (если да то ето плохо т.к. хотелось бы на ноде иметь допустим 256 Мб именно РАм а не свопа чтобы он не забивался VE, а сделать ето видно не получится)
Re: Как ограничить размер Свопа ? [message #6532 is a reply to message #6517] Wed, 20 September 2006 05:45 Go to previous messageGo to next message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
privvmpages -- это вовсе не оперативка. Cогласно документации privvmpages: memory allocation limit. Замечу -- именно allocation, а не потребления, потому что существенную часть запрошенной памяти приложения не используют. Наши измерения показывали что apache не использут 20-30% памяти запрошенной при запуске. В случае multithred application доля неиспользуемой памяти существенно возрастает, иногда они рельнот используют всего лишь 10% запрошенной памяти.

Поэтому в принципе privvmpages можно сопостовлять с объяемом RAM+swap, но чтобы компенсировать неиспользуемую память VE можно отдавать от 1.5 до 4 раз больше privvmpages. Хотя для stability critical application конечно рисковать не стоит, в этом случае лучше не превышать объем RAM+swap.

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

Вы хотите чтобы в swap уходили в первую очередь данные относящиеся к VE? Наверное в некоторых случаях это действительно может иметь смысл.
Однако я хочу обратить ваши внимание на следующее обстоятельство: Virtuozzo (да и наверное OpenVz тоже) обычно использутся для хостинга. внутри VE живут клиенты и они очевидно будут недовольны задержками в работе к которым приведет приемущественное сбрасывание их данных в swap. С другой стороны, в VE0 практически никто не живет, она используется только для административных целей. Задач там немного, да и задержка для них не особо критична. Но именно поэтому там нет данных которые стоило бы вытеснить в своп. просто потому что этих данных мало, и заметной пользы ноде это не принесет. Согласитесь, в таком сценарии совершенно неочевидно, стоит ли давать приемущество работы со swap какой либо из сторон.

Кроме того, хочу отметить, в своп вытесняются данные, которые используются _реже_. В свою очередь реже используются данные той VE которой дают _меньше_ _CPU_. Таким образом можно повлиять на работу со swap косвенно, путем назначения адекватных CPUunits. Если вы дадите много CPU ve0 -- она будет чаще работать с данными -- в swap при необходимости будут уходить редкоиспользуемые данные из VE.
Re: Как ограничить размер Свопа ? [message #6533 is a reply to message #6532] Wed, 20 September 2006 06:02 Go to previous messageGo to next message
Umka is currently offline  Umka
Messages: 56
Registered: September 2006
Member
vaverin wrote on Wed, 20 September 2006 01:45

privvmpages -- это вовсе не оперативка. Cогласно документации privvmpages: memory allocation limit. Замечу -- именно allocation, а не потребления, потому что существенную часть запрошенной памяти приложения не используют. Наши измерения показывали что apache не использут 20-30% памяти запрошенной при запуске. В случае multithred application доля неиспользуемой памяти существенно возрастает, иногда они рельнот используют всего лишь 10% запрошенной памяти.


Я правильно понимаю - данный параметр соотносится с limit_AS у limit(1)? и таким образом выполнив mmap на size M мы получим увеличение privvmpages в количестве size/4096 ?

[Updated on: Wed, 20 September 2006 06:11]

Report message to a moderator

Re: Как ограничить размер Свопа ? [message #6540 is a reply to message #6533] Wed, 20 September 2006 07:07 Go to previous messageGo to next message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
Уважаемый UMKA,

вы правы, это действительно напоминает RLIMIT_AS. посмотрите по нашим сырцам: повсюду с изменением mm->total_vm у нас есть ub_memory_charge.

Однако этот RLIMIT_AS действует per-mm, а privvmpages относится к группе процессов с общим UB. И это вовсе не сумма per-mm лимитов, тут есть ряд тонкостей: например если вы используете shared mapping, то новой памяти выделяться не будет и privvmpages изменится, а вот mm->total_vm тем не менее увеличится.

Если вас это интересует, посмотрите детали в ub_memory_charge и VM_UB_PRIVATE.
Re: Как ограничить размер Свопа ? [message #6544 is a reply to message #6540] Wed, 20 September 2006 07:56 Go to previous messageGo to next message
Umka is currently offline  Umka
Messages: 56
Registered: September 2006
Member
vaverin wrote on Wed, 20 September 2006 03:07

Уважаемый UMKA,

вы правы, это действительно напоминает RLIMIT_AS. посмотрите по нашим сырцам: повсюду с изменением mm->total_vm у нас есть ub_memory_charge.

Однако этот RLIMIT_AS действует per-mm, а privvmpages относится к группе процессов с общим UB. И это вовсе не сумма per-mm лимитов, тут есть ряд тонкостей: например если вы используете shared mapping, то новой памяти выделяться не будет и privvmpages изменится, а вот mm->total_vm тем не менее увеличится.

Если вас это интересует, посмотрите детали в ub_memory_charge и VM_UB_PRIVATE.

Ясна. значит ваш подход не лучше того что используется в linux vserver.... и java будет показывать запредельные цифры используемой памяти.
в отличии от FreeVPS где память учитывается в момент использования и если java использует 256М будет показано использование 256М, а не 2G.
Re: Как ограничить размер Свопа ? [message #6549 is a reply to message #6544] Wed, 20 September 2006 08:24 Go to previous messageGo to next message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
Уважаемый UMKA,

Umka wrote on Wed, 20 September 2006 11:56

Ясна. значит ваш подход не лучше того что используется в linux vserver.... и java будет показывать запредельные цифры используемой памяти.



Пожулуйста объясните поподробнее, что вы имеете в виду. Я не понимаю, какое отнощение имеют цифры показываемые java (где кстати?) -- один процесс -- к privvmpages, относящимися к VE целиком.

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

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

Кроме того я хочу обратить ваше внимание на то что у нас есть и другие параметры показывающие рельное потребление памяти VE:
- physpages current value shows total number of RAM pages used by processes in this VE.
- oomguarpages current value shows total amount of memory and swap space used by processes of particular VE.
Re: Как ограничить размер Свопа ? [message #6550 is a reply to message #6544] Wed, 20 September 2006 08:28 Go to previous messageGo to next message
Vasily Tarasov is currently offline  Vasily Tarasov
Messages: 1345
Registered: January 2006
Senior Member
Если необходима информация о используемой, а не аллоцирумой памяти, можно использовать другой счётчик, а не
privvmpages. А именно:
1. physpages - количество RAM pages, используемых данным VE. barrier и limit для данного параметра не работает, но посмотреть не "запредельные" числа для java можно Smile
2. oomguarpages похволяет ограничить реально используемую память (RAM + swap). Ондако, процесс который вышел за пределы будет убит!
Re: Как ограничить размер Свопа ? [message #6551 is a reply to message #6550] Wed, 20 September 2006 08:34 Go to previous messageGo to next message
vaverin is currently offline  vaverin
Messages: 708
Registered: September 2005
Senior Member
vass wrote on Wed, 20 September 2006 12:28


2. oomguarpages похволяет ограничить реально используемую память (RAM + swap). Ондако, процесс который вышел за пределы будет убит!


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

А в остальном все правильно Smile
Re: Как ограничить размер Свопа ? [message #6570 is a reply to message #6549] Wed, 20 September 2006 11:54 Go to previous message
Umka is currently offline  Umka
Messages: 56
Registered: September 2006
Member
vaverin wrote on Wed, 20 September 2006 04:24

Уважаемый UMKA,

Umka wrote on Wed, 20 September 2006 11:56

Ясна. значит ваш подход не лучше того что используется в linux vserver.... и java будет показывать запредельные цифры используемой памяти.



Пожулуйста объясните поподробнее, что вы имеете в виду. Я не понимаю, какое отнощение имеют цифры показываемые java (где кстати?) -- один процесс -- к privvmpages, относящимися к VE целиком.


Хочу лиш сказать что java делает большой mmap (равный max heap size) при старте. Это не может не сказаться на счетчкиках privvmpages которые будучи установлены в меньше значение вызовут ситуацию Out of memory. Я не прав?

Quote:


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


Я хочу сказать что FreeVPS использует для лимита на память значение более совпадающее с physpages. Аналогичного лимита в OpenVZ я не вижу. Если вы мне укажете на такой лимит я буду счастлив и это съэкономит время самостоятельного анализа вашего ядерного патча.



Quote:


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

Кроме того я хочу обратить ваше внимание на то что у нас есть и другие параметры показывающие рельное потребление памяти VE:
- physpages current value shows total number of RAM pages used by processes in this VE.
- oomguarpages current value shows total amount of memory and swap space used by processes of particular VE.

собственно аргументы выше.

[Updated on: Wed, 20 September 2006 11:56]

Report message to a moderator

Previous Topic: loop device внутри VPS
Next Topic: SMP kernel не работает
Goto Forum:
  


Current Time: Sat Jun 29 21:52:15 GMT 2024

Total time taken to generate the page: 0.03221 seconds