web-dev-qa-db-fra.com

Linux - Tuning du contrôleur de raid du matériel réel (SCSI et CCISS)

La plupart des systèmes Linux, je gère les contrôleurs RAID de matériels de fonctionnalité (principalement tableau Smart HP ). Ils courent tous rhel ou centos.

Je cherche des tunables réels pour optimiser les performances des configurations qui intègrent des contrôleurs de raid matériels avec SAS DISKS (Array SMART, PERC, LSI, etc.) et Battery Backed ou Flash cache soutenu. Assume RAID 1 + 0 et plusieurs broches (4 disques de 4+).

Je passe une quantité considérable de réglages du réseau Linux pour des applications de trading de latence et de trading à faible latence. Mais beaucoup de ces options sont bien documentées (changeant des tampons d'envoi/réception, modification TCP Paramètres de la fenêtre, etc.). Quels sont les ingénieurs qui font du côté de stockage?

Historiquement, j'ai apporté des modifications à l'ascenseur E/S Scheduling ascenseur , qui a récemment opté pour les planificateurs deadline et noop afin d'améliorer les performances dans mes applications. Comme les versions RHEL ont progressé, j'ai également remarqué que les valeurs par défaut compilées pour les appareils de bloc SCSI et CCISS ont également changé. Cela a eu un impact sur les paramètres de sous-système de stockage recommandés au fil du temps. Cependant, cela fait longtemps que j'ai vu des recommandations claires. Et je sais que les valeurs par défaut du système d'exploitation ne sont pas optimales. Par exemple, il semble que le tampon de lecture par défaut de 128 Ko est extrêmement petit pour un déploiement sur le matériel de classe serveur.

Les articles suivants explorent l'impact des performances de la modification en lecture-devant cache et nr_requests valeurs sur les files d'attente des blocs.

http://zackreed.me/articles/54-hp-smart-array-p410-controller-tuning
[.____] http://www.overclock.net/t/515068/tuning-a-hp-smart-array-p400-with-Linux-Phy-Tuning-Really-Matters
[.____] http://yoshinorimatsunobu.blogspot.com/2009/04/linux-io-scheduler-queue-size-and.html

Par exemple, ceux-ci sont suggérons des modifications pour un contrôleur RAID HP Smart Array:

echo "noop" > /sys/block/cciss\!c0d0/queue/scheduler 
blockdev --setra 65536 /dev/cciss/c0d0
echo 512 > /sys/block/cciss\!c0d0/queue/nr_requests
echo 2048 > /sys/block/cciss\!c0d0/queue/read_ahead_kb

Que peut-on régler de manière fiable pour améliorer les performances de stockage?
[.____] Je cherche spécifiquement des options SYSCTL et SYSFS dans les scénarios de production.

29
ewwhite

J'ai constaté que lorsque j'ai dû régler pour un débit vs de la latence inférieur, j'ai accordé nr_requests à partir de sa valeur par défaut (à aussi bas que 32). L'idée étant plus petite lots équivaut à une latence plus faible.

Aussi pour Read_Ahead_kb, j'ai constaté que pour des lectures/écritures séquentielles, l'augmentation de cette valeur offre un meilleur débit, mais j'ai constaté que cette option dépend vraiment de votre charge de travail et de votre modèle IO. Par exemple sur un système de base de données que j'ai récemment tapé, j'ai changé cette valeur pour correspondre à une seule taille de page de DB qui a contribué à réduire la latence de lecture. L'augmentation ou la diminution au-delà de cette valeur s'est révélée faire mal aux performances dans mon cas.

Quant à d'autres options ou paramètres pour les files d'attente du périphérique Block:

max_sectors_kb = J'ai défini cette valeur pour correspondre à ce que le matériel permet un seul transfert (cochez la valeur du fichier max_hw_sectors_kb (RO) dans SYSFS à voir ce qui est autorisé)

NOMERGES = Cela vous permet de désactiver ou d'ajuster la logique de recherche pour la fusion des demandes IO. (Tourner ce désactivé peut vous enregistrer des cycles de processeur, mais je n'ai vu aucun avantage lors de la modification de cela pour mes systèmes, donc je l'ai laissé par défaut)

rq_affinité = Je n'ai pas encore essayé cela, mais voici l'explication derrière elle des documents du noyau

Si cette option est "1", la couche de bloc migrera les demandes de demande au "groupe" de la CPU qui a initialement soumis la demande. Pour certaines charges de travail, il fournit une réduction significative des cycles de la CPU en raison des effets de mise en cache.
[.____] Pour les configurations de stockage nécessaires pour maximiser la distribution du paramètre de traitement d'achèvement, cette option "2" oblige l'achèvement à exécuter sur la CPU demandant (contourner la logique d'agrégation "Groupe") "

planificateur = Vous avez dit que vous avez essayé la date limite et noop. J'ai testé à la fois noop et échéance, mais j'ai trouvé la date limite de vente pour les tests que j'ai effectués le plus récemment pour un serveur de base de données.

Noop a bien performé, mais pour notre serveur de base de données, j'ai toujours été capable d'obtenir de meilleures performances en ajustant le planificateur de délai.

Options pour le planificateur de délai situé sous/SYS/Block/{SD, CCISS, DM -} */File d'attente/iOSCHED /:

FIFOO_BATCH = type de nr_requêtes, mais spécifique au planificateur. La règle de la règle est de régler cette latence inférieure ou du débit. Contrôle la taille du lot des demandes de lecture et d'écriture.

write_expire = Définit l'heure d'expiration pour les lots d'écriture par défaut est de 5 000 ms. Une fois de plus, la diminution de cette valeur diminue votre latence écriture tout en augmentant la valeur augmente le débit.

read_expire = Définit l'heure d'expiration pour lire les lots par défaut est de 500 ms. Les mêmes règles s'appliquent ici.

Front_merges = J'ai tendance à éteindre cela, et c'est par défaut. Je ne vois pas le besoin pour le planificateur de perdre des cycles de processeur essayant de franchir la fusion IO demandes.

écrit_starved = La date limite est orientée vers la lecture de la valeur par défaut, c'est pour traiter 2 lots de lecture avant qu'un lot d'écriture ne soit traité. J'ai trouvé la valeur par défaut de 2 pour être bon pour ma charge de travail.

38
rtorti19

Plus que tout, tout dépend de votre charge de travail.

read_ahead_kb Peut vous aider s'il est vraiment utile de lire beaucoup de données de certains fichiers à l'avance, comme lors de la diffusion vidéo en continu. Parfois, cela peut mal vous faire mal. Oui, la valeur par défaut 128 Ko peut sembler petite, mais avec suffisamment de concurrence, cela commence à sonner comme gros! D'autre part, avec un serveur tel qu'un serveur de codage vidéo qui convertit uniquement les vidéos d'un format à un autre, cela pourrait être une très bonne idée à régler.

nr_requests, lorsqu'il est accru, peut facilement inonder votre contrôleur RAID, qui fait encore mal les performances.

Dans le monde réel, vous devez regarder les latences. Si vous êtes connecté à San, jetez un coup d'œil avec iostat, sar _ ou quoi que ce soit que vous aimez utiliser, et voyez si les temps de service d'E/S Demander les temps de service sont à travers le toit. Bien sûr, cela aide également les disques locaux. Si les latences sont très très grandes, envisagez de régler vos paramètres d'ascenseur d'E/S en descendant Max_Requests et d'autres paramètres.

4
Janne Pikkarainen