我们有一台运行 Ubuntu LTS 的本地 Xeon 服务器,由几位开发人员共享。每位开发人员都以自己的用户身份登录并在其上运行各种工作负载。我们遇到的问题是,当运行占用大量 CPU 或存储的工作负载时,其他用户实际上无法在机器上工作,shell 变得无响应。
我们尝试要求用户在构建时限制其 CPU 使用率,这解决了 CPU 问题,但显然磁盘 IO 使用率仍然是一个问题。我们正在使用 SSD 存储。
在服务器上使用虚拟机是不可能的,因为我们不想严格限制资源。我们只是想确保其他用户不会缺乏资源。
我们有什么选择?
答案1
修改工作负载的灵活性如何?有一些实用程序(例如 nice)可以限制进程的优先级,限制它们可以获得的切片大小。
https://www.geeksforgeeks.org/nice-and-renice-command-in-linux-with-examples/#
但正如您已经注意到的,这个解决方案并不完美,因为这里的问题可能是,当只有一个用户在线时,他们将无法充分利用系统的全部潜力。这可能只是一个新问题。
磁盘 IO,其他人已经询问并制定了解决方案,例如此处的答案https://unix.stackexchange.com/questions/536007/cgroups-throttle-per-user-disk-io-bandwidth-on-linux
我担心可能不会有完美的解决方案,这就是为什么虚拟化之类的东西变得如此流行,以便更有效地利用共享资源。
就像所有 Linux 事物一样,可能还有更多的解决方法(甚至可能设计出利用它们的系统)
我认为,要正确地做到这一点,可能需要在内核级别进行一些调度,或者需要一些接口来使用已经存在的调度选项,我对此一无所知。……但我以前也犯过错,所以如果其他人提出解决方案,我也会学习!所以答案可能是,不接受让步就没有答案。