J'essaie de réduire la latence de mon application réseau Linux. J'ai appris qu'il existe deux outils pour «lier» un programme à un cœur de processeur particulier: le jeu de tâches et le cpuset.
- Laquelle devrais-je préférer? Sont-ils équivalents à un niveau inférieur?
- (la disposition) Mon application a un seul thread et est censée traiter une seule connexion TCP (pas de reconnexion) sur un réseau LAN rapide avec le moins de latence possible. Suis-je sur la bonne voie?
central-processing-unit
performance-tuning
latency
multi-core
John Linberg
la source
la source
Réponses:
L'ensemble de tâches sert à lier un processus à un ou plusieurs processeurs; spécifiant essentiellement où il peut s'exécuter lors de l'exécution initiale ou pendant son exécution. Si vous utilisez RHEL / CentOS sur un équipement de serveur moderne, il
numactl
est recommandé de le fairetaskset
.Cpuset / cset est pour le blindage CPU et est un framework construit autour des cgroups Linux. Cset n'a jamais été populaire sur certaines distributions (comme RHEL) car il existe d'autres outils disponibles pour la gestion des processus.
La première commande ci-dessous crée un bouclier qui limiterait les tâches du système d'exploitation aux cœurs CPU 0 et 8. La seconde déplacerait votre session shell actuelle vers le bouclier CPU spécifié, résultant en une isolation des processus système et utilisateur.
Il y a d'autres choses à vérifier et à régler avant de suivre le chemin des processus de liaison aux CPU; interruptions (
irqbalance
désactivation partielle), paramètres d'économie d'énergie, planificateur système, ascenseurs d'E / S, politique en temps réel (chrt
).Voir: Paramètres TCP à faible latence sur Ubuntu
Voici un exemple ( compliqué ) d'un wrapper d'application qui sélectionne un noyau, arrête l'irqbalance, le démarre et met en liste noire le noyau sélectionné, puis exécute ./your_program avec SCHED_FIFO et la priorité 99 sur le noyau sélectionné.
la source
taskset
. Si vous utilisez cpuset, il n'est pas possible de modifier vos affinités par rapport à ce que le cpuset vous accorde.numactl
??sched_setaffinity
.