Open main menu

OpenVZ Virtuozzo Containers Wiki β

Changes

VSwap

3,263 bytes added, 15:57, 17 July 2020
vswap in vz7 details added
'''New [[Download/kernel/rhel6|RHEL6-based OpenVZ]] kernel''' has a new memory management model, which supersedes [[UBC|User beancounters]]. It is called '''VSwap'''.
Now you can set == Primary parameters == With VSwap, there are two primary required parameters: <code>ram</code> and <code>swap</code> (a.k.a. <code>physpages</code> and <code>swappages</code>, while all ). All the other beancounters become secondary and optional.
* '''physpages'''
: This parameter limits 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 <code>physpages</code>
: The <code>barrier</code> is ignored and should be set to 0, and the <code>limit</code> sets the limit.
 * '''ram''': Currently (as of >= 042stab042) the user memoryis an easy shortcut for physpages.limit, the kernel memory and the page cache are accounted into <code>physpages</code>.is measured in bytes
* '''swappages'''
: This parameter limits sets the amount of swap space which can be used for "slower memory" (vswap) available to processes inside a container, in memory pages
: The <code>barrier</code> is ignored and should be set to 0, and the <code>limit</code> sets the limit.
 
* '''swap'''
: is an easy shortcut for swappages.limit, and is measured in bytes
The sum of <code>physpages.limit</code> and <code>swappages.limit</code> limits the maximum amount
of allocated 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
swapping. Actual swap out occurs only if there is a global memory shortage
on the system.
 
{{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,
based on '''ram''' and '''swap''' settings.
 
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>
 
==== VM overcommit and privvmpages ====
 
vzctl 4.6 adds a new parameter, <code>--vm_overcommit</code>.
Its only purpose is to be used in privvmpages calculation,
in case VSwap is used and there is no explicit setting
for privvmpages.
 
If <math>vm\_overcommit</math> is set:
 
: <math>privvmpages_{bar} = privvmpages_{lim} = (ram + swap) \times vm\_overcommit</math>
 
If it is not set:
 
: <math>privvmpages_{bar} = privvmpages_{lim} = \infty</math>
== Setting ==
vzctl set 777 --ram 512M --swap 1G --save
If you are converting an existing CT from old (non-vswap) configuration, you can either* leave all the other UBC parameters as-is,* or set those to 'unlimited',* or remove those from configuration file. == Convert non-vswap VSwap CT to Vswap 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.
# Add PHYSPAGES and SWAPPAGES parameters to config. Easiest way is to use <code>vzctl set $CTID --ram N --swap M --save</code>
Now your config is vswap enabled, and when you (re)start it(or use <code>--reset_ub</code>), vswap mechanism will be used by the kernel for this CT. Here is an example of the above steps:  CTID=123 RAM=1G SWAP=2G CFG=/etc/vz/conf/${CTID}.conf cp $CFG $CFG.pre-vswap grep -Ev '^(KMEMSIZE|LOCKEDPAGES|PRIVVMPAGES|SHMPAGES|NUMPROC|PHYSPAGES|VMGUARPAGES|OOMGUARPAGES|NUMTCPSOCK|NUMFLOCK|NUMPTY|NUMSIGINFO|TCPSNDBUF|TCPRCVBUF|OTHERSOCKBUF|DGRAMRCVBUF|NUMOTHERSOCK|DCACHESIZE|NUMFILE|AVNUMPROC|NUMIPTENT|ORIGIN_SAMPLE|SWAPPAGES)=' > $CFG < $CFG.pre-vswap vzctl set $CTID --ram $RAM --swap $SWAP --save vzctl set $CTID --reset_ub
== How to distinguish between vswap and non-vswap configs? ==
Both <code>vzctl</code> and the kernel treats a configuration file as vswap one if PHYSPAGES limit is '''not''' set to <code>unlimited</code> (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 <code>/proc/vz/vswap</code> file.
 
== Details about vSwap implementation in Virtuozzo 7 ==
 
The Container swapping process is similar to that on a standalone computer.<br>
This means in particular that some pages may get into the swap even if there is some free memory reported in the Container.<br>
This may validly happen in case kernel memory management system detects some anonymous memory which is not touched for a long time by Container processes and decides that it's more
efficient to put these anonymous pages into the swap and use more caches in a Container instead.
The Container swap space resides in physical node swap file.<br>
When the swap-out for a Container starts, appropriate number of pages are allocated in physical swap on the host. Next
# if there is no free memory on the host, the real swap-out of Container's memory to physical swap happens
# if there is free memory on the host, the Container's memory is saved in a special swap cache in host's RAM and no real write to host's physical swap occurs
{{Note|The physical swap space is allocated in both cases anyway, this guarantees all amount of host's swap cache for Containers memory can be written into physical swap on host in case the host gets short of RAM.}}
* '''Consequence 1''': without any configured node swap file the Container's `SWAPPAGES` parameter will be ignored.
* '''Consequence 2''': if node's swap size is less than sum of all Containers' swap sizes on the node, Containers won't be able to use 100% of their swap simultaneously - similar to RAM settings.
== See also ==
* [http://openvz.livejournal.com/39644.html On vSwap and 042stab04x kernel improvements]* [http://openvz.livejournal.com/39765.html Recent improvements in VSwapvzctl]
[[Category: UBC]]