Будут ли динамические выделения в другом потоке замедлять мой основной поток обработки?
У меня есть критический поток, который обрабатывает данные в тесном цикле. Он привязан к аффинности и предназначен для высокопроизводительной обработки. Это не делает динамические распределения.
У меня есть другой поток, который работает на другом ядре, который не выполняет никакой критической работы, но, тем не менее, выполняет динамическое распределение. Это также связано с близостью.
Повлияет ли присутствие этого другого потока, выполняющего динамическое распределение, на мой критический поток?
1 ответ
Определенно да.
Не только для косвенного эффекта разметки памяти и L3, но также немедленного эффекта время от времени.
Когда вызывается malloc, он пытается повторно использовать то, что уже было выделено и освобождено, но иногда приходится расширять пространство памяти процесса, и он делает это, вызывая mmap или brk.
Я не уверен на 100% в отношении brk, но mmap определенно делает недействительным TLB, поэтому следует ожидать более медленной обработки ошибок страниц сразу после этих вызовов.
Если вы используете Linux или *BSD, вы можете попробовать поиграться с кодом ядра, чтобы не делать недействительными во всех случаях, но не ожидайте, что это будет просто.