Linux ARM 环境下的多核多进程性能问题

Linux ARM 环境下的多核多进程性能问题

我正在 4 核 ARM CPU 上开发 Linux 应用程序。应用程序中有两个进程,我将每个进程分配给 CPU,如下所示。

  • 核心1:进程1(GUI)
  • core2-4 : precess2 (实时应用)

没有进程1,进程2可以轻松处理其进程,无需担心。但问题是,当我运行进程1时,它对进程2的性能产生了巨大的影响,进程2根本无法正常工作。

这可能是什么原因造成的?

附加信息:

  • cpu2-4 与 isolcpus=1-3 隔离

  • 我跟踪了整个系统的线程,发现只有当进程1存在时,进程2才会在core1上唤醒大量名为rcu_preempt的任务。不过这两个进程不共享任何内存。

  • 我用其他进程替换了进程 1,发现一个进程快速向分配的内存写入大量数据会影响进程 2。仅执行简单 CPU 工作(如 while 循环)的进程不会产生影响。

答案1

您已接管所有 CPU,从而迫使 Linux 内核抢占正在运行的进程以运行自己的线程。然后内核不再区分 CPU,并且可以像其他 CPU 一样很好地抢占 CPU1。计算机中发生的活动越多,内核就需要抢占更多,同样,对 CPU 不加区分。

此外,CPU 并不是万能的,计算机的架构可能存在更多隐性瓶颈。其中一些是内存库,对内存库的并发访问取决于该内存库的通道数量。然后是计算机的内存总线、磁盘缓存、磁盘本身等。

您可能会在文章中找到有关真正运行实时进程的更多提示 如何在Linux中运行实时应用程序? 然而,您的实际硬件决定了其运行效果会更好或更差。

相关内容