.. _Configuring Memory Policy for Storage Services: Configuring Memory Policy for Storage Services ---------------------------------------------- You can configure memory limits and guarantees for storage services at runtime using the ``vinfra memory-policy vstorage-services`` commands. You can do this for the entire cluster or a specific node. The following memory parameters can be configured manually: - memory guarantee - swap size - page cache (which, in turn, is set using cache ratio, minimum, and maximum) Page cache is calculated according to the following formula: :: $PAGE_CACHE = minimum <= ratio * $TOTAL_MEMORY <= maximum The ``minimum`` and ``maximum`` values are hard limits that are applied if the ``ratio * $TOTAL_MEMORY`` value is outside these limits. To better understand how page cache size is calculated, consider the following examples: .. tabularcolumns:: |>{\TL}\X{2}{11}% |>{\TL}\X{3}{11}% |>{\TL}\X{3}{11}% |>{\TL}\X{3}{11}| .. _Pagecache examples: .. table:: Page cache examples :class: longtable +---------------+----------------+-----------------+-----------------+ | | Example 1 | Example 2 | Example 3 | | | | | | | | (cache size is | (cache size | (cache size | | | within limits) | equals minimum) | equals maximum) | +===============+================+=================+=================+ | Total memory | 4 GiB | 4 GiB | 4 GiB | +---------------+----------------+-----------------+-----------------+ | Cache ratio | 0.5 | 0.1 | 0.9 | +---------------+----------------+-----------------+-----------------+ | Cache minimum | 1 GiB | 2 GiB | 1 GiB | +---------------+----------------+-----------------+-----------------+ | Cache maximum | 3 GiB | 3 GiB | 3 GiB | +---------------+----------------+-----------------+-----------------+ | Cache size | 2 GiB | 2 GiB | 3 GiB | +---------------+----------------+-----------------+-----------------+ If memory parameters are set both per node and per cluster, the per-node ones are applied. If no memory parameters are configured manually, the memory management is performed automatically by the ``vcmmd`` daemon as follows: - Each CS (e.g., storage disk) requires 512 MiB of RAM for page cache. - The page cache minimum is 1 GiB. - If the total memory is less than 48 GiB, the page cache maximum is calculated as two-thirds of it. - If the total memory is greater than 48 GiB, the page cache maximum is 32 GiB. To check the current memory parameters for storage services set by ``vcmmd``, run :: # vcmmdctl list name type active guarantee limit swap cache <...> vstorage.slice/vstorage-services.slice SRVC yes 1310720 24522132 0 1048576 .. _vinfra memory-policy vstorage-services per-cluster change: vinfra memory-policy vstorage-services per-cluster change ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Change per-cluster memory parameters: :: usage: vinfra memory-policy vstorage-services per-cluster change [--guarantee ] [--swap ] [--cache-ratio --cache-minimum --cache-maximum ] ``--guarantee `` Guarantee, in bytes ``--swap `` Swap size, in bytes, or -1 if unlimited ``--cache-ratio `` Cache ratio from 0 to 1 inclusive ``--cache-minimum `` Minimum cache, in bytes ``--cache-maximum `` Maximum cache, in bytes Example: :: # vinfra memory-policy vstorage-services per-cluster change --guarantee 8796093022208 --swap 1099511627776 --cache-ratio 0.5 --cache-minimum 1099511627776 --cache-maximum 3298534883328 +-----------+------------------------+ | Field | Value | +-----------+------------------------+ | cache | maximum: 3298534883328 | | | minimum: 1099511627776 | | | ratio: 0.5 | | guarantee | 8796093022208 | | swap | 1099511627776 | +-----------+------------------------+ This command sets the storage services memory parameters for all nodes in the storage cluster as follows: - the memory guarantee to 8 GB - the swap size to 1 GB - the page cache limits: the minimum to 1 GB, the maximum to 3 GB, and the cache ratio to 0.5 .. _vinfra memory-policy vstorage-services per-cluster show: vinfra memory-policy vstorage-services per-cluster show ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Show per-cluster memory parameters: :: usage: vinfra memory-policy vstorage-services per-cluster show Example: :: # vinfra memory-policy vstorage-services per-cluster show +-----------+------------------------+ | Field | Value | +-----------+------------------------+ | cache | maximum: 3298534883328 | | | minimum: 1099511627776 | | | ratio: 0.5 | | guarantee | 8796093022208 | | swap | 1099511627776 | +-----------+------------------------+ This command lists the storage services memory parameters for all nodes in the storage cluster. .. _vinfra memory-policy vstorage-services per-cluster reset: vinfra memory-policy vstorage-services per-cluster reset ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Reset per-cluster parameters to default: :: usage: vinfra memory-policy vstorage-services per-cluster reset [--guarantee] [--swap] [--cache] ``--guarantee`` Reset only the guarantee. ``--swap`` Reset only the swap size. ``--cache`` Reset only cache values. Example: :: # vinfra memory-policy vstorage-services per-cluster reset --cache +-----------+---------------+ | Field | Value | +-----------+---------------+ | cache | | | guarantee | 8796093022208 | | swap | 1099511627776 | +-----------+---------------+ This command resets the manually configured page cache limits to default for all nodes in the storage cluster. .. _vinfra memory-policy vstorage-services per-node change: vinfra memory-policy vstorage-services per-node change ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Change per-node memory parameters: :: usage: vinfra memory-policy vstorage-services per-node change [--guarantee ] [--swap ] [--cache-ratio --cache-minimum --cache-maximum ] --node ``--guarantee `` Guarantee, in bytes ``--swap `` Swap size, in bytes, or -1 if unlimited ``--cache-ratio `` Cache ratio from 0 to 1 inclusive ``--cache-minimum `` Minimum cache, in bytes ``--cache-maximum `` Maximum cache, in bytes ``--node `` Node ID or hostname Example: :: # vinfra memory-policy vstorage-services per-node change --guarantee 8796093022208 --swap 1099511627776 --cache-ratio 0.5 --cache-minimum 1099511627776 --cache-maximum 3298534883328 --node 7ffa9540-5a20-41d1-b203-e3f349d62565 +-----------+------------------------+ | Field | Value | +-----------+------------------------+ | cache | maximum: 3298534883328 | | | minimum: 1099511627776 | | | ratio: 0.5 | | guarantee | 8796093022208 | | swap | 1099511627776 | +-----------+------------------------+ This command sets the storage services memory parameters for the node with the ID ``7ffa9540-5a20-41d1-b203-e3f349d62565`` as follows: - the memory guarantee to 8 GB - the swap size to 1 GB - the page cache limits: the minimum to 1 GB, the maximum to 3 GB, and the cache ratio to 0.5 .. _vinfra memory-policy vstorage-services per-node show: vinfra memory-policy vstorage-services per-node show ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Show per-node memory parameters: :: usage: vinfra memory-policy vstorage-services per-node show --node ``--node `` Node ID or hostname Example: :: # vinfra memory-policy vstorage-services per-node show --node 7ffa9540-5a20-41d1-b203-e3f349d62565 +-----------+-------------------------+ | Field | Value | +-----------+-------------------------+ | cache | maximum: 13194139533312 | | | minimum: 8796093022208 | | | ratio: 0.7 | | guarantee | 8796093022208 | | swap | 1099511627776 | +-----------+-------------------------+ This command lists the storage services memory parameters set for the node with the ID ``7ffa9540-5a20-41d1-b203-e3f349d62565``. .. _vinfra memory-policy vstorage-services per-node reset: vinfra memory-policy vstorage-services per-node reset ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Reset per-node memory parameters to defaults: :: usage: vinfra memory-policy vstorage-services per-node reset [--guarantee] [--swap] [--cache] --node ``--guarantee`` Reset only the guarantee. ``--swap`` Reset only the swap size. ``--cache`` Reset only the cache values. ``--node `` Node ID or hostname Example: :: # vinfra memory-policy vstorage-services per-node reset --cache --node 7ffa9540-5a20-41d1-b203-e3f349d62565 +-----------+---------------+ | Field | Value | +-----------+---------------+ | cache | | | guarantee | 8796093022208 | | swap | 1099511627776 | +-----------+---------------+ This command resets the manually configured page cache limits to default for the node with the ID ``7ffa9540-5a20-41d1-b203-e3f349d62565``.