Função de classificação de roscas CPU-core
-
20-09-2019 - |
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.
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.