Как контролировать выделение памяти сторонней библиотекой?

Я занимаюсь разработкой приложения реального времени на сервере с двумя узлами NUMA. Ниже приведена упрощенная версия системной диаграммы (ОС — Ubuntu14.04):

.-------------.          .-------------.
| Device 0    |          | Device 1    |
.-------------.          .-------------.
||                       ||
||                       ||
.-------------.          .-------------.
| PCIE slot 0 |          | PCIE slot 1 |
.-------------.          .-------------.
||                       ||
||                       ||
.-------------. QPI link .-------------.
| CPU 0       |<-------->| CPU 1       |
.-------------.          .-------------.
||                       ||
||                       ||
.-------------.          .-------------.
| Mem node 0  |          | Mem node 1  |
.-------------.          .-------------.

Эти два устройства делают одно и то же, но каждое из них потребляет всю мощность одного процессора, поэтому мне нужно создать два потока, чтобы управлять ими по отдельности. Также я должен использовать стороннюю библиотеку для управления двумя устройствами.
Хотя я могу использовать numa_alloc выделить память на локальном узле в моем собственном потоке, который не меняет способ, которым сторонняя библиотека выделяет свою собственную память.

Первый: Если я запускаю программу только с одним устройством с numactl --membind Я получаю очень хорошие результаты.

второй: Если я запускаю программу с двумя устройствами без numactl --membind Я получаю относительно хорошую производительность для обоих устройств, но если я продолжаю работать в течение долгого времени, производительность не так стабильна.

Thrid: Если я запускаю программу с двумя устройствами вместе сnumactl --membind, сказать numactl --membind=0тогда устройство 0 работает довольно хорошо, но не устройство 1, и наоборот.

Основываясь на вышеупомянутых наблюдениях, я подозреваю, что локальность памяти является узким местом производительности здесь.

Мой вопрос: Могу ли я установить какие-то ограничения в моем потоке, чтобы все, что находится внутри этого потока, размещалось на определенном узле NUMA, в том числе сторонней библиотеки?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]