Question

Je vais d'écrire un système de messagerie mémoire partagée multi-thread pour la livraison ultra messages volume entre les processus. Les messages proviendront des threads de travail d'un serveur web. Je voudrais exploiter la localité de cache CPU cœurs sur la même part de CPU. Alors que quand je me réveille un thread de travail sur la réception de ce système IPC, je me réveille un fil sur la même CPU.

J'ai besoin pour Linux (prefferably POSIX genaral) et les fenêtres des appels API et le bitmasking que je dois faire pour extraire les informations qui me permettra de classer l'exécution thread-id - du contexte dudit fil - à l'aide struct suivant:

struct thread_core_id
{
    uint16_t cpu_Id;
    uint16_t core_Id;
};

Fonctions pour les deux plates-formes seront grandement appréciés. J'espère que cela peut être fait sans appel du système -. À savoir, le contexte commutateurs

- modifier -

Je me concentre sur x86 au moment, mais d'autres architectures serait utile aussi bien.

Était-ce utile?

La solution

Pour Linux spécifiquement, vous devriez être en mesure d'obtenir les informations requises sur /proc/cpuinfo et /sys/devices/system/cpu/cpu*/cache et l'utiliser avec les appels sched_{s|g}etaffinity(). Jetez un oeil à Ce que tout programmeur devrait savoir au sujet mémoire, si vous avez pas déjà, dans la section 5.3.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top