web-dev-qa-db-fra.com

Différence entre vm.dirty_ratio et vm.dirty_background_ratio?

J'expérimente actuellement avec les paramètres du noyau trouvés dans /proc/sys/vm, notamment dirty_ratio et dirty_background_ratio.

La documentation du noyau a les explications suivantes pour les deux:

dirty_background_ratio

Contient, en pourcentage de la mémoire totale disponible contenant des pages libres et des pages récupérables, le nombre de pages sur lesquelles les threads de vidage du noyau en arrière-plan commenceront à écrire des données sales.

et

dirty_ratio

Contient, en pourcentage de la mémoire totale disponible contenant des pages libres et des pages récupérables, le nombre de pages sur lesquelles un processus qui génère des écritures sur disque commencera lui-même à écrire des données sales.

Sur mon système Linux dirty_background_ratio est 10 et dirty_ratio est 20. Je comprends que la différence est, qui écrit les données sales. Donc, si ma mémoire utilisée atteint 10%, le noyau commence à réécrire et 20% ne devraient jamais être atteints.

Ma question est maintenant: a la valeur la plus élevée de dirty_background_ratio et dirty_ratio un sens ou s'agit-il simplement de "quelle est la valeur la plus basse et qui l'a"?

17
happyMOOyear

La valeur la plus élevée de dirty_background_ratio et dirty_ratio a-t-elle un sens ou s'agit-il simplement de "quelle est la valeur la plus faible et qui l'a"?

En termes plus simples:

vm.dirty_background_ratio est le pourcentage de mémoire système qui, lorsqu'il est sale, le système peut commencer à écrire des données sur les disques.

vm.dirty_ratio est le pourcentage de mémoire système qui, lorsqu'il est sale, le processus d'écriture bloque et écrit des pages sales sur les disques.

Ce réglage dépend de ce que votre système exécute.Si vous exécutez une grande base de données, il est recommandé de maintenir ces valeurs faibles pour éviter les cols d'E/S et lorsque la charge du système augmente.

ex:

vm.dirty_background_ratio=10
vm.dirty_ratio=15

Dans cet exemple, lorsque les pages sales dépassent vm.dirty_background_ratio=10 Les E/S démarrent, c'est-à-dire qu'elles commencent à être vidées/écrites sur le disque. Lorsque le nombre total de pages sales dépasse vm.dirty_ratio=15 toutes les écritures sont bloquées jusqu'à ce que certaines des pages sales soient écrites sur le disque. Vous pouvez penser au vm.dirty_ratio=15 comme limite supérieure.

26
askb

J'ai été intrigué par cette question même et j'ai donc expérimenté un peu sur mon système Debian 7.10 sous Linux 3.2.0-4-AMD64 en utilisant sysbench 0.4.12, en modifiant:

  • / proc/sys/vm/dirty_ratio
  • / proc/sys/vm/dirty_background_ratio

Ces paramètres sont un moyen de retarder l'écriture sur le disque. Ils sont utiles tant que vous avez des applications qui écrivent rarement ou en petits morceaux (par exemple, un navigateur Web). S'il n'y a qu'une seule application sur le système qui génère simplement des données à un taux supérieur au maximum pris en charge par le disque, alors aucun paramètre n'a d'importance. L'écriture prendra autant de temps que nécessaire.

Ratio sale (DR) entraîne le processus qui a provoqué le nombre de pages sales franchissant le seuil à bloquer. Ratio d'arrière-plan sale (DBR) contrôle l'écriture de pages sales en arrière-plan. Donc, si vous avez un DBR faible, un DR plus élevé et que tous vos processus écrivent en petits morceaux ne dépassant jamais au total la vitesse d'écriture prise en charge du disque (par exemple 50 Mo/s), alors vous trouverez un système qui est assez réactif. C'est impressionnant quand on garde à l'esprit que l'écriture dans RAM est généralement 100 fois plus rapide (5 Go/s)! C'est l'importance de DBR.

Les paramètres de configuration sont utiles lorsque vous vous souciez des applications qui écrivent rarement. Vous ne voulez pas qu'un processus écrivant un octet ou lisant quelques ko se bloque pendant 20 secondes car il y a trop de données sales. C'est l'importance de ne pas avoir un DR trop élevé. Il garantit également qu'une certaine mémoire est disponible pour mettre en cache les données récemment utilisées.

2
pdp