小编kov*_*van的帖子

如何设置 Docker 容器的 CPU 优先级(niceness)?

我的一个容器总是很忙,并且正在从其他需要响应且仅不时处于活动状态的容器(网络服务器)中占用 CPU。

我想降低消耗 CPU 的容器的 CPU 优先级,以便在其他容器需要 CPU 时,它不会被阻塞。

我该怎么做呢?我已经在网上搜索了一段时间,但我找不到答案。

我试过用 运行容器--entrypoint='nice 10 mybinary',但结果--entrypoint只能运行二进制文件,不能运行 shell 命令。

docker

12
推荐指数
1
解决办法
1万
查看次数

如何强制两个进程在同一个CPU上运行?

语境:

我正在编写一个由多个进程组成的软件系统。它是在Linux下用C++编写的。它们之间使用 Linux 共享内存进行通信。

通常,在软件开发中,性能优化是在最后阶段进行的。在这里我遇到了一个大问题。该软件对性能要求较高,但在 4 或 8 个 CPU 核心(通常不止一个 CPU)的机器上,只能使用 3 个核心,因此浪费了第一个核心 25% 的 CPU 能力,而在第一个核心上浪费了 25% 的 CPU 能力,而在第二个占60%。经过多次研究,并放弃了互斥锁和锁争用,我发现时间被浪费在 shmdt/shmat 调用(分离和附加到共享内存段)上。经过更多研究,我发现这些 CPU(通常是 AMD Opteron 和 Intel Xeon)使用称为 NUMA 的内存系统,这基本上意味着每个处理器都有其快速的“本地内存”,并且从其他 CPU 访问内存是很容易的。昂贵的。

经过一些测试后,问题似乎在于软件的设计使得基本上任何进程都可以将共享内存段传递给任何其他进程以及其中的任何线程。这似乎会降低性能,因为进程不断地从其他进程访问内存。

问题:

现在的问题是,有什么方法可以强制成对的进程在同一个 CPU 中执行吗?我并不是想强迫它们始终在同一个处理器中执行,因为我不在乎它们在哪一个处理器中执行,尽管这样就可以完成这项工作。理想情况下,有一种方法可以告诉内核:如果您在一个处理器中调度此进程,则还必须在同一处理器中调度此“兄弟”进程(即通过共享内存与之通信的进程),以便表现不会受到惩罚。

c linux performance kernel numa

4
推荐指数
1
解决办法
1651
查看次数

标签 统计

c ×1

docker ×1

kernel ×1

linux ×1

numa ×1

performance ×1