Pergunta

Vou escrever um sistema de mensagens de memória compartilhada com vários threades para entrega de mensagens de alto volume entre os processos. As mensagens serão originárias dos threads do trabalhador de um servidor da Web. Eu gostaria de explorar a localidade do cache da CPU que núcleos no mesmo compartilhamento da CPU. Para que, quando acordo um tópico de trabalhador na extremidade receptora deste sistema IPC, acordo um thread na mesma CPU.

Preciso de Linux (Posix prefferável em Genaral) e janelas as chamadas da API e o bitmasking que eu preciso fazer para extrair as informações que me permitirão classificar o ID de thread de execução-do contexto do referido thread-usando a seguinte estrutura :

struct thread_core_id
{
    uint16_t cpu_Id;
    uint16_t core_Id;
};

As funções para ambas as plataformas serão muito apreciadas. Espero que isso possa ser feito sem chamadas do sistema-ou seja, troca de contexto.

-Editar-

Estou focado no x86 no momento, mas outras arquiteturas também seriam úteis.

Foi útil?

Solução

Para Linux especificamente, você poderá obter as informações necessárias para fora de /proc/cpuinfo e /sys/devices/system/cpu/cpu*/cache e use isso com sched_{s|g}etaffinity() chamadas. Dar uma olhada em O que todo programador deve saber sobre memória, se você ainda não o fez, em torno da Seção 5.3.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top