[LINUX] Comment faire exécuter un thread de processus uniquement sur un cœur de processeur spécifique

Dans un processeur multicœur, le cœur de processeur sur lequel le thread de processus est exécuté dépend du planificateur du système d'exploitation, et le contexte peut se déplacer vers un autre cœur de processeur en fonction de la situation. Sous Linux, vous pouvez définir l'affinité du processeur pour empêcher de tels mouvements et autoriser l'exécution des threads de processus uniquement sur des cœurs de processeur spécifiques (principalement en raison de problèmes de performances).

Qu'est-ce que l'affinité CPU?

Collection de processeurs logiques que le thread est autorisé à exécuter. L'affinité du processeur est représentée par un masque de bits.

Par exemple, CPU0 est "0x00000001", CPU1 est "0x00000002" et l'ensemble de CPU0,1,3 est "0x0000000b".

Vous pouvez vérifier le cœur de CPU CPU0 en utilisant cat / proc / cpuinfo.

Comment définir l'affinité du processeur par commande

Vous pouvez définir l'affinité CPU d'un processus avec l'ensemble de tâches de commande.

# taskset -p mask pid

Pour masque, spécifiez l'affinité du processeur et pour pid, spécifiez le processus que vous souhaitez modifier.

Utilisez l'option -a pour changer pour tous les threads du processus pid.

# taskset -a -p mask pid

Comment exécuter uniquement un processus spécifique sur un processeur CPU

Seul ce processus est autorisé à s'exécuter sur ce processeur et tous les autres processus en sont privés.

# ps -e -o pid= | xargs -n 1 taskset -p 0xFFFFFFFE
# taskset -p 0x00000001 PID

Comment définir l'affinité du processeur par programme

Pour définir l'affinité du processeur par programmation, utilisez la fonction sched_setaffinity ().

#define _GNU_SOURCE             /* feature_test_Voir les macros*/
#include <sched.h>

void
func(void)
{
  cpu_set_t mask;
  int ret;

  //Désactiver tous les masques
  CPU_ZERO(&mask);

  // CPU_AFFINITY_Autoriser l'exécution sur le noyau de MASK
  CPU_SET(CPU_AFFINITY_MASK, &mask);

  //Définir l'affinité du processeur
  ret = sched_setaffinity(0, sizeof(mask), &mask);
  if (ret != 0) {
    // error
  }
}

Recommended Posts

Comment faire exécuter un thread de processus uniquement sur un cœur de processeur spécifique
Comment exécuter Django sur IIS sur un serveur Windows
Comment exécuter un modèle de transformateur entraîné localement sur CloudTPU
Comment créer un jeu d'action multijoueur en ligne avec Slack
Comment créer un bot slack
Comment créer un robot - Avancé
Comment créer une fonction récursive
Comment exécuter matplotlib sur heroku
[Blender] Comment créer un plug-in Blender
Comment créer un robot - Basic
[Langage C] Comment créer, éviter et créer un processus zombie
Comment créer une bibliothèque .dylib à partir d'une bibliothèque .a avec OSX (El Capitan)
[Python] Comment rendre une classe itérable
Comment créer un indicateur personnalisé Backtrader
Comment tester sur une page authentifiée par Django
Comment créer un plan de site Pelican
Notes sur la façon d'exécuter Cython sur OSX
Comment exécuter des scripts Maya Python
Comment enregistrer une seule donnée sur l'écran de gestion de Django
Comment créer un système de dialogue dédié aux débutants
Un mémorandum pour faire WebDAV uniquement avec nginx
Comment rendre plusieurs noyaux sélectionnables sur Jupyter
Comment créer un dictionnaire avec une structure hiérarchique.
Comment exécuter MeCab sur Ubuntu 18.04 LTS Python
LINUX: Comment faire correspondre les touches fléchées à 2,4,6,8 sur des notes sans dix touches
Comment créer un plug-in QGIS (génération de package)
Faire en sorte que slackbot ne réagisse que sur des canaux spécifiques (slackbot Python)
J'ai lu "Comment créer un laboratoire de piratage"
Comment vivre une vie décente avec Windows 2017
Comment exécuter une application Django sur un conteneur Docker (environnement de développement et de production)
Comment compter les nombres dans une plage spécifique
Comment définir l'affinité du processeur pour les threads de processus
Comment appliquer des marqueurs uniquement à des données spécifiques avec matplotlib
Comment déployer une application Django dans le cloud Alibaba
Comment installer Linux sur un PC UEFI 32 bits
Comment faire un jeu de tir avec toio (partie 1)
Un mémorandum sur l'utilisation de keras.preprocessing.image de Keras
Comment créer un environnement Django (python) sur Docker
Comment exécuter Self bot avec Discord.py [Easy vandalism! ]
Comment créer un package Python à l'aide de VS Code
Comment exécuter setUp une seule fois dans Python Unittest
Bases de PyTorch (2) -Comment créer un réseau de neurones-
Comment créer un environnement Python sur Amazon Linux 2
Comment insérer un processus spécifique au début et à la fin de l'araignée avec la tremblante
Comment utiliser GitHub sur un serveur multi-personnes sans mot de passe
Comment utiliser Fujifilm X-T3 comme webcam sur Ubuntu 20.04
[Python] Comment créer une liste de chaînes de caractères caractère par caractère
Comment créer un nouvel environnement virtuel Python sur Ubuntu
Comment exécuter un fichier Python à une invite de commande Windows 10
Comment exécuter un programme Python à partir d'un script shell
Ne perdez pas contre Ruby! Comment exécuter Python (Django) sur Heroku
Comment créer un laboratoire de piratage - Kali Linux (2020.1) VirtualBox 64 bits Partie 2-
Comment transloquer un tableau à deux dimensions en utilisant uniquement python [Note]
Comment monter un répertoire Windows 10 sur Ubuntu-Server 20.04 sur VMware Workstation 15.
Comment créer un laboratoire de piratage - Kali Linux (2020.1) VirtualBox 64-bit edition -
Comment créer un package Python (écrit pour un stagiaire)
Remarques sur la façon de charger un environnement virtuel avec PyCharm
Comment faire un simple jeu Flappy Bird avec Pygame
Comment extraire un index autre qu'un index spécifique avec Numpy
Comment enregistrer un package dans PyPI (à partir de septembre 2017)