背景:
我和同事们使用集群,如果有人同时写入太多大文件,我甚至无法在 vim 中移动光标(太可怕了!)。我不确定这是否与打开的文件数量或正在使用的硬盘“带宽”有关,但它肯定只发生在进行大型写入操作时(包括下载大文件)。我知道你可以通过每个用户的配额来限制硬盘空间,但我从未听说过可以限制数据传输速度。
问题
是否可以限制 Linux 中用户每秒写入的数据量?
答案1
使用cgroups与 CFQ I/O 调度程序(许多发行版的默认程序)一起使用。CFQ 可以识别 cgroups,并且可以为任何用户、组或进程分配 x% 的磁盘 I/O 时间。
因此,如果您有一个名为 的 cgroup sequenceGeek
,拥有最大资源的 90%,那么您可以有另一个名为 的 cgroup coworkers
,拥有 10% 的资源。或者类似公平的东西。
man cgrules.conf
,man cgset
应该man cgconfig.conf
可以帮你入门。至少在 Fedora 16 中是这样,现在没有时间检查其他发行版是否有类似的配置文件名。很可能有。
编辑:哦,刚刚从您的评论中注意到您正在使用 NFS。那么您的网络可能已饱和,您需要使用 QoS 和tc
。iptables
谷歌搜索Advances Linux Routing How-To
,它有现成的流量限制和创建优先级类别的示例。或者,如果可能的话,在您的防火墙/路由器/负载平衡器上进行限制。
也可能是旧内核版本存在 NFS 问题或 NFS 挂载选项错误。
答案2
如果您无法移动光标,我猜是您的 CPU 等待 IO 的时间太长了。您可以通过运行 top 并查看%wa
顶部附近列出的时间长度来检查这一点。
上述 cgroups 的控制器blkio
是一种控制某个人或某个组可以执行的 IO 量的方法。我现在有点着急,但如果你读过内核文档 ( /usr/share/doc/kernel-<version>/Documentation/cgroups
),我相信你会搞定的。不过你需要一个相当新的内核,但我认为 2.6.32(EL6 内核)以上的任何版本可能都可以。
您需要blkio.throttle.write_bps_device
在 cgroups 文件系统中配置该文件。通过该文件以及 和/etc/cgconfig.conf
,/etc/cgrules.conf
您可以限制任何用户或组在您的存储上使用的带宽量。
答案3
我不太确定,但在阅读了一点内容后man limits.conf
,假设你是 root 用户,我建议添加难的限制其他人的帐户data
(最大数据大小),priority
以及nice
。例如将他们的限制设置为低于您的限制,然后将您正在运行的任何应用程序的优先级设置为高于他们的优先级。当然,在进行任何更改之前,您应该进行更多研究和测试,因为这可能会严重干扰他们的用户体验。
祝你好运。