Проблема производительности многоядерных многопроцессорных вычислений в среде Linux ARM

Проблема производительности многоядерных многопроцессорных вычислений в среде Linux ARM

Я разрабатываю приложение Linux на 4-ядерном процессоре ARM. В приложении есть два процесса, и я выделил каждый процесс процессору, как показано ниже.

  • core1 : process1 (графический интерфейс)
  • core2-4 : precess2 (приложение реального времени)

Без процесса 1, процесс 2 легко справляется со своим процессом и не о чем беспокоиться. Но проблема в том, что когда я запускаю процесс 1, он оказывает огромное влияние на производительность процесса 2 и процесс 2 вообще не работает должным образом.

Что может быть причиной этого?

Дополнительная информация:

  • cpu2-4 изолирован с isolcpus=1-3

  • Я проследил потоки всей системы и заметил, что только когда есть процесс 1, процесс 2 пробуждает множество задач, называемых rcu_preempt на ядре 1. Однако эти два процесса не разделяют память.

  • Я заменил процесс 1 некоторыми другими процессами и обнаружил, что процесс, быстро записывающий много данных в выделенную память, влияет на процесс 2. Просто процесс, выполняющий простую работу ЦП (вроде цикла while), не влияет.

решение1

Вы захватили все ЦП, заставив ядро ​​Linux вытеснять работающие процессы, чтобы запустить свои собственные потоки. Затем ядро ​​не различает ЦП и может вытеснять ЦП1 так же хорошо, как и любой другой ЦП. Чем больше активности происходит в компьютере, тем больше ядру нужно будет вытеснять, опять же, не различая ЦП.

Кроме того, ЦП — это не все, и архитектура компьютера может иметь более неявные узкие места. Некоторые из них — это банки памяти, где одновременный доступ к банку зависит от количества каналов к этому банку. Затем идут шина памяти компьютера, кэш диска, сам диск и т. д.

Дополнительные советы о том, как по-настоящему запустить процесс в реальном времени, вы можете найти в статье Как запустить приложение реального времени в Linux? Однако именно ваше фактическое оборудование определяет, что будет работать лучше или хуже.

Связанный контент