La compréhension de /proc/sys/vm/lowmem_reserve_ratio
Je ne suis pas en mesure de comprendre la signification de la variable "lowmem_reserve_ratio" par la lecture de l'explication de Documentation/sysctl/vm.txt.
J'ai aussi essayé de chercher sur google, mais toutes les explications trouvées sont exactement similaires présents dans les vm.txt.
Il sera vraiment utile si sb explique d'ou la mention d'un lien à ce sujet.
Voici les explications:-
The lowmem_reserve_ratio is an array. You can see them by reading this file.
-
% cat /proc/sys/vm/lowmem_reserve_ratio
256 256 32
-
Note: # of this elements is one fewer than number of zones. Because the highest
zone's value is not necessary for following calculation.
But, these values are not used directly. The kernel calculates # of protection
pages for each zones from them. These are shown as array of protection pages
in /proc/zoneinfo like followings. (This is an example of x86-64 box).
Each zone has an array of protection pages like this.
-
Node 0, zone DMA
pages free 1355
min 3
low 3
high 4
:
:
numa_other 0
protection: (0, 2004, 2004, 2004)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
pagesets
cpu: 0 pcp: 0
:
-
These protections are added to score to judge whether this zone should be used
for page allocation or should be reclaimed.
In this example, if normal pages (index=2) are required to this DMA zone and
watermark[WMARK_HIGH] is used for watermark, the kernel judges this zone should
not be used because pages_free(1355) is smaller than watermark + protection[2]
(4 + 2004 = 2008). If this protection value is 0, this zone would be used for
normal page requirement. If requirement is DMA zone(index=0), protection[0]
(=0) is used.
zone[i]'s protection[j] is calculated by following expression.
(i < j):
zone[i]->protection[j]
= (total sums of present_pages from zone[i+1] to zone[j] on the node)
/lowmem_reserve_ratio[i];
(i = j):
(should not be protected. = 0;
(i > j):
(not necessary, but looks 0)
The default values of lowmem_reserve_ratio[i] are
256 (if zone[i] means DMA or DMA32 zone)
32 (others).
As above expression, they are reciprocal number of ratio.
256 means 1/256. # of protection pages becomes about "0.39%" of total present
pages of higher zones on the node.
If you would like to protect more pages, smaller values are effective.
The minimum value is 1 (1/1 -> 100%).
Vous devez vous connecter pour publier un commentaire.
avoir le même problème que vous, j'ai googlé un peu (beaucoup) et je suis tombé apon cette page qui peuvent être (ou non) être plus compréhensible que le noyau doc.
(Je ne cite pas ici, car il sera illisible)
J'ai trouvé la formulation de ce document vraiment déroutant aussi. À la recherche à la source, dans
mm/page_alloc.c
aidé à clarifier les choses, permettez-moi de m'essayer à un plus d'explication:Comme il est dit dans la page que vous avez cité, ces chiffres "sont réciproques nombre de rapport". Formulé différemment: ces chiffres sont des diviseurs. Ainsi, lorsque le calcul de la réserve de pages pour une zone donnée à un nœud, vous prenez la somme des pages de ce nœud dans les zones supérieures que ce que l'on divise par la condition diviseur, et c'est le nombre de pages que vous avez une réservation pour cette zone.
Exemple: supposons un 1 GiB nœud avec 768 mio dans la zone Normale et 256 MiB dans la zone HighMem (assument aucune zone DMA). Supposons par défaut highmem réserve "ratio" (diviseur) de 32. Et supposons que le type de 4 Kio taille de la page. Maintenant, nous pouvons calculer la zone de réserve de la zone Normale:
Le concept reste le même lorsque vous ajoutez plus de zones et de nœuds. Rappelez-vous que l'réservé la taille est en pages---vous n'avez jamais réserver une fraction de page.