Функция классификации потоков CPU-Core - PullRequest
1 голос
/ 11 января 2010

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

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

struct thread_core_id
{
    uint16_t cpu_Id;
    uint16_t core_Id;
};

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

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

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

1 Ответ

1 голос
/ 11 января 2010

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

...