Difference between revisions of "VSwap"
m (reformatting) |
(Add →Implicit UBC parameters) |
||
Line 1: | Line 1: | ||
'''New [[Download/kernel/rhel6|RHEL6-based OpenVZ]] kernel''' has a new memory management model, which supersedes [[UBC|User beancounters]]. It is called '''VSwap'''. | '''New [[Download/kernel/rhel6|RHEL6-based OpenVZ]] kernel''' has a new memory management model, which supersedes [[UBC|User beancounters]]. It is called '''VSwap'''. | ||
− | + | With VSwap, there are two required parameters: <code>ram</code> and <code>swap</code> (a.k.a. <code>physpages</code> and <code>swappages</code>). All the other beancounters become optional. | |
* '''physpages''' | * '''physpages''' | ||
Line 29: | Line 29: | ||
{{Note|swap used by a container can exceed <code>swappages.limit</code>, but is always within sum of <code>physpages.limit</code> and <code>swappages.limit</code>.}} | {{Note|swap used by a container can exceed <code>swappages.limit</code>, but is always within sum of <code>physpages.limit</code> and <code>swappages.limit</code>.}} | ||
+ | |||
+ | === Implicit UBC parameters === | ||
+ | |||
+ | Since vzctl 4.6, if some optional beancounters are not set, vzctl sets them implicitly, | ||
+ | using ram and swap and, in case of privvmpages, a new parameter called '''VM overcommit'''. | ||
+ | |||
+ | The following formulae are used: | ||
+ | |||
+ | <math>lockedpages_{bar} = oomguarpages_{bar} = ram</math> | ||
+ | |||
+ | <math>lockedpages_{lim} = oomguarpages_{lim} = \infty</math> | ||
+ | |||
+ | <math>vmguarpages_{bar} = vmguarpages_{lim} = ram + swap</math> | ||
+ | |||
+ | Also, if <math>vm\_overcommit</math> is set to non-zero: | ||
+ | |||
+ | : <math>privvmpages_{bar} = privvmpages_{lim} = (ram + swap) \times vm\_overcommit</math> | ||
+ | |||
+ | otherwise: | ||
+ | |||
+ | : <math>privvmpages_{bar} = privvmpages_{lim} = \infty</math> | ||
== Setting == | == Setting == | ||
Line 38: | Line 59: | ||
vzctl set 777 --ram 512M --swap 1G --save | vzctl set 777 --ram 512M --swap 1G --save | ||
− | == Convert non- | + | == Convert non-VSwap CT to VSwap == |
If you have an existing container with usual UBC parameters set, and you want to convert this one into VSwap enabled config, here's what you need to do. | If you have an existing container with usual UBC parameters set, and you want to convert this one into VSwap enabled config, here's what you need to do. |
Revision as of 20:44, 1 October 2013
New RHEL6-based OpenVZ kernel has a new memory management model, which supersedes User beancounters. It is called VSwap.
With VSwap, there are two required parameters: ram
and swap
(a.k.a. physpages
and swappages
). All the other beancounters become optional.
- physpages
- This parameter sets the amount of fast physical memory (RAM) available to processes inside a container, in memory pages. Currently (as of 042stab042 kernel) the user memory, the kernel memory and the page cache are accounted into
physpages
.
- The
barrier
is ignored and should be set to 0, and thelimit
sets the limit.
- ram
- is an easy shortcut for physpages.limit, and is measured in bytes
- swappages
- This parameter sets the amount of "slower memory" (vswap) available to processes inside a container, in memory pages.
- The
barrier
is ignored and should be set to 0, and thelimit
sets the limit.
- swap
- is an easy shortcut for swappages.limit, and is measured in bytes
The sum of physpages.limit
and swappages.limit
limits the maximum amount
of memory which can be used by a container. When physpages limit
is reached, memory pages belonging to the container are pushed out to
so called virtual swap (vswap). The difference between normal swap
and vswap is that with vswap no actual disk I/O usually occurs. Instead,
a container is artificially slowed down, to emulate the effect of the real
swapping. Actual swap out occurs only if there is a global memory shortage
on the system.
Note: swap used by a container can exceed swappages.limit , but is always within sum of physpages.limit and swappages.limit .
|
Contents
Implicit UBC parameters
Since vzctl 4.6, if some optional beancounters are not set, vzctl sets them implicitly, using ram and swap and, in case of privvmpages, a new parameter called VM overcommit.
The following formulae are used:
Also, if is set to non-zero:
otherwise:
Setting
Note: for VSwap, you need vswap-enabled kernel, ie RHEL6-based OpenVZ kernel. |
Since vzctl 3.0.30, you can use --ram
and --swap
parameters, like this:
vzctl set 777 --ram 512M --swap 1G --save
Convert non-VSwap CT to VSwap
If you have an existing container with usual UBC parameters set, and you want to convert this one into VSwap enabled config, here's what you need to do.
- Decide on how much RAM and swap you want this CT to have. Generally, sum of your new RAM+swap should be more or less equal to sum of old PRIVVMPAGES and KMEMSIZE.
- Manually remove all UBC parameters from config. This is optional, you can still have UBC limits applied if you want.
- Add PHYSPAGES and SWAPPAGES parameters to config. Easiest way is to use
vzctl set $CTID --ram N --swap M --save
Now your config is vswap enabled, and when you (re)start it, vswap mechanism will be used by the kernel for this CT.
How to distinguish between vswap and non-vswap configs?
Both vzctl
and the kernel treats a configuration file as vswap one if PHYSPAGES limit is not set to unlimited
(a.k.a. LONG_MAX). You can also use the following command:
# vzlist -o vswap $CTID
In addition, vzctl checks if kernel support vswap, and refuses to start a vswap-enabled container on a non vswap capable kernel. The check is presence of /proc/vz/vswap
file.