Классификация потоков CPU-Core Функция

Я собираюсь написать многопоточную систему обмена сообщениями с общей памятью для доставки сверхбольших объемов сообщений между процессами. Сообщения будут исходить из рабочих потоков веб-сервера. Я хотел бы использовать локальность кеша ЦП, ядра которого находятся на одном и том же ресурсе ЦП. Таким образом, когда я пробуждаю рабочий поток на принимающей стороне этой системы IPC, я пробуждаю поток на том же ЦП.

Мне нужны для Linux (предпочтительно POSIX в целом) и Windows вызовы API и битовая маска, которые мне нужно сделать, чтобы извлечь информацию, которая позволит мне классифицировать идентификатор исполняемого потока - из контекста указанного потока - используя следующую структуру :

struct thread_core_id
{
    uint16_t cpu_Id;
    uint16_t core_Id;
};

Функции для обеих платформ будут высоко оценены. Я надеюсь, что это можно сделать без системных вызовов, то есть без переключения контекста.

-- редактировать --

В настоящее время я сосредоточен на x86, но другие архитектуры также были бы полезны.


person Hassan Syed    schedule 11.01.2010    source источник


Ответы (1)


В частности, для Linux вы должны иметь возможность получать необходимую информацию из /proc/cpuinfo и /sys/devices/system/cpu/cpu*/cache и использовать ее с вызовами sched_{s|g}etaffinity(). Взгляните на О чем должен знать каждый программист Память, если вы еще этого не сделали, в разделе 5.3.

person Nikolai Fetissov    schedule 11.01.2010
comment
(+1) за статью и советы. Я прочитал звонки и статью. - person Hassan Syed; 11.01.2010