Rendre permanent stripe_cache_size

15

J'ai fait

echo 8192 > /sys/block/md0/md/stripe_cache_size

pour améliorer mes performances RAID, et cela a beaucoup aidé.

Mais je ne sais toujours pas comment le rendre permanent.

J'essayais de le définir dans /etc/rc.local - d'autres commandes sont exécutées, mais il a été remplacé par 256 ailleurs ... Des indices?

BarsMonster
la source
Republier le commentaire de ma réponse ci-dessous; Je ne sais pas si vous l'avez vu ou non car je ne sais pas comment StackExchange fonctionne: Hmmm ... Je n'ai pas de RAID, donc c'est un peu long, mais pouvez-vous essayer 'grep -R 256 / etc / init.d 'et' grep -R stripe_cache_size /etc/init.d '?
zpletan
1
Le package sysfsutils aiderait-il à résoudre votre problème?
zpletan du

Réponses:

16

Ajoutez une règle udev, par exemple pour /etc/udev/rules.d/60-md-stripe-cache.rules:

SUBSYSTEM=="block", KERNEL=="md*", ACTION=="change", TEST=="md/stripe_cache_size", ATTR{md/stripe_cache_size}="8192"

Je n'ai pas vraiment essayé cela, donc ce n'est peut-être pas vrai à 100% (peut-être quelques fautes de frappe), mais cela devrait être proche. Vérifiez man udevpour mieux comprendre.

Vous pouvez également exécuter les commandes suivantes par la suite pour appliquer immédiatement la nouvelle règle:

udevadm trigger
udevadm control --reload-rules
NeilBrown
la source
1
Merci beaucoup, c'est enfin la solution parfaite :-) La syntaxe est ok, je n'ai eu qu'à ajouter 60- avant le nom, et régénérer les ramfs.
BarsMonster
1
Merci. Je ne peux pas croire que c'est toujours un problème dans Ubuntu 13.10. Je viens de passer de <10 Mo / s et les blocages complets à> 100 Mo / s lors de la copie d'un RAID chiffré vers un autre, simplement en changeant la taille du cache de bande en une valeur beaucoup plus généreuse.
frostschutz du
Juste pour que ce soit clair pour les autres: sur au moins les systèmes Ubuntu modernes (17.04 dans mon cas), peut-être d'autres, vous devez reconstruire vos initramfs ("sudo update-initramfs -u") après avoir créé cette nouvelle règle ou elle ne le fera pas réellement prendre effet automatiquement.
Bryan Henry
1

Juste pour développer le dernier message; le script en dessous fonctionne pour moi. Échangez simplement vos informations entre les "<...>". Prendre plaisir!


#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

#################NOTE######################
##  You are limited by CPU and memory too #
##  <Your Name> <Date of Modification>    #
##  stripe cache size and read-ahead      #
###########################################
echo 16384 > /sys/block/<Your RAID5 or 6 Volume>/md/stripe_cache_size
blockdev --setra 16384 /dev/<Your RAID5 or 6 Volume>

exit 0
DanglingPointer
la source
3
Ne dites pas «juste pour développer le dernier message», car les réponses sont généralement classées par votes, il est donc possible que votre réponse apparaisse au-dessus de celle à laquelle vous faites référence. Reportez-vous à l'article par le nom de l'auteur. C'est beaucoup plus clair.
Warren Hill
0

J'essaie également de comprendre cela. J'ai mis le mien dans rc.local et pas de chance. Je le démarre manuellement après la connexion. Je suppose que vous pourriez écrire un script pour gérer cela et le mettre dans vos "applications de démarrage", mais cela n'aide pas du tout si vous n'êtes pas connecté à gnome.


la source
C'est un serveur Ubuntu, donc pas de chance ici.
BarsMonster
0

Le package sysfsutils aiderait-il à résoudre votre problème?

RÉPONSE ORIGINALE:

Je ne sais pas comment commenter votre question; Je suppose que je vais modifier cette réponse à mesure que j'en apprends plus sur votre problème.

Pouvez-vous publier (ou coller, si c'est long) la sortie de

grep -R md0 /etc/init.d
zpletan
la source
Rien trouvé là-bas.
BarsMonster
Hmmm ... Je n'ai pas de RAID, donc c'est un peu long, mais pouvez-vous essayer 'grep -R 256 /etc/init.d' et 'grep -R stripe_cache_size /etc/init.d'?
zpletan
les deux n'ont retourné aucun résultat.
BarsMonster du
0

Je n'ai pas de vraie réponse pour vous, mais vous pourriez peut-être essayer de créer un simple script de démarrage parvenu. Créez un fichier dans / etc / init avec l'extension .conf. Dans le fichier mis:

start on started tty1

exec echo 8192 > /sys/block/md0/md/stripe_cache_size

Je pense que cela devrait exécuter la commande à peu près au moment où le terminal a démarré, ce qui est probablement à peu près au même moment où vous exécutez la commande.

user1974
la source
J'ai déjà essayé de mettre cela dans le script de démarrage (rc.local) et cela n'a pas aidé. De plus, comme il s'agit d'Ubuntu Server, aucun terminal ne peut être présent après le redémarrage, AFAIK.
BarsMonster
Je proposais cela comme une alternative à la méthode rc.local. Peut-être que ça commencerait plus tard. Je ne sais pas vraiment cependant.
user1974
Quant au manque de terminaux, je n'en ai aucune idée. Pourquoi un serveur n'aurait-il pas de ttys après un démarrage? Entendons-nous la même chose quand nous disons terminal? Quoi qu'il en soit, vous pouvez utiliser un service différent pour déclencher la commande, il suffit de changertty1
user1974
0

Tir total dans l'obscurité car je n'ai pas de configuration RAID 5 pour tester avec: peut-être ajouter une ligne avec

chmod -w /sys/block/md0/md/stripe_cache_size

dans rc.local pour supprimer les autorisations d'écriture une fois qu'il est défini. Peut-être que cela l'empêchera de changer ailleurs?

Ramón
la source
Bonne idée, mais il semble que quelque chose soit foiré dans le processus de démarrage d'Ubuntu: -S Je vais essayer de poster aujourd'hui.
BarsMonster
N'a pas aidé: - |
BarsMonster
0

Ajouter

echo 8192 > /sys/block/mdX/md/stripe_cache_size

à /etc/rc.local.

Thermionix
la source
Voir la question - c'est la première chose que j'ai essayée, et cela n'a pas fonctionné, apparemment md-driver a été réinitialisé ou quelque chose après l'exécution de rc.local.
BarsMonster
-1

Cette page suggère que la taille (ou la largeur) de la bande aurait dû être définie lors de la configuration du fs. Peut-être que tunefs pourrait aider ici?

TGM
la source
2
C'est une chose totalement différente. La taille du cache de bande est un paramètre pour le pilote du noyau MD sur la mémoire pour le cache de bandes.
BarsMonster