2010-01-11 11 views
1

Je vais écrire un système de messagerie à mémoire partagée multi-thread pour la livraison de messages à très haut volume entre les processus. Les messages proviendront des threads de travail d'un serveur Web. Je voudrais exploiter la localité de cache de processeur qui coeurs sur le même partage de CPU. Alors que quand je réveille un thread de travail sur la réception de ce système IPC, je réveille un thread sur le même CPU. J'ai besoin de Linux (POSIX dans genaral) et de windows les appels d'API et le bitmasking que j'ai besoin de faire pour extraire l'information qui me permettra de classer l'id-thread en cours d'exécution - du contexte de ce thread - en utilisant la structure suivante:Classification de threads CPU-Core Fonction

struct thread_core_id 
{ 
    uint16_t cpu_Id; 
    uint16_t core_Id; 
}; 

Les fonctions pour les deux plates-formes seront grandement appréciées. J'espère que ceci peut être fait sans appels de système - c.-à-d., Commutateurs de contexte.

- modifier -

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

Répondre

1

Pour Linux en particulier, vous devriez être en mesure d'obtenir les informations requises sur /proc/cpuinfo et /sys/devices/system/cpu/cpu*/cache et l'utiliser avec sched_{s|g}etaffinity() appels. Jetez un oeil à What Every Programmer Should Know About Memory, si ce n'est déjà fait, autour de la section 5.3.

+0

(+1) pour l'article et les conseils. J'ai lu sur les appels et l'article. –

+0

meilleure réponse jusqu'à présent: D –