【发布时间】:2019-03-17 23:06:00
【问题描述】:
我正在开发一些需要 mlock 和 FIFO 调度策略来实现快速路径的实时程序。
我在具有 12 个 CPU 内核的 Ubuntu 16.04 上运行两个进程,并将这些进程的快速路径分配给不同的内核。
进程 1 正常启动并将其快速线程固定到 CPU 并在该线程上将调度策略设置为 FIFO。
当进程 2 启动时,在创建它的快速线程之前,它会尝试调用 mlock。
然后,进程 2 卡住了。
我将gdb附加到进程2,调用堆栈似乎在mlock函数内。
如果我去掉进程1的FIFO设置,两个进程都可以正常运行。
我的怀疑是 mlock 试图访问进程 1 的快速线程获取的一些内核资源。
所以它被阻塞并无限期等待。
有人知道它在等待什么吗?
我在两台类似的装有 Ubuntu 的 IBM 服务器上观察到了这个问题。
但是,在装有 Redhat Linux 的 Supermicro 机器上,这个问题没有发生。
感谢任何提示或解决方案!
【问题讨论】:
-
欢迎来到 SO。 :) 我建议查看How to Ask。为了有人帮助您,您的问题需要明确,包含实际代码,并表明您已经对自己进行过研究。
标签: multithreading linux-kernel real-time virtual-memory