背景:
我和同事一起使用集群,如果有人在同一时间写太多的大文件,我甚至不能在vim中移动光标(恐怖!)。 我不确定它是否与打开的文件数量或硬盘驱动器的“带宽”有关,但只有在发生大写操作(包括下载大文件)时才会发生。 我知道你可以通过每个用户的配额限制硬盘空间,但我从来没有听说过能够限制数据传输速度。
题
是否有可能限制在Linux用户每秒写入的数据量?
将cgroups与CFQ I / O调度程序(许多分发的默认值)一起使用。 CFQ知道cgroups,只能给任何用户,组或进程x%的磁盘I / O时间。
所以,如果你有一个叫做sequenceGeek cgroup,拥有90%的最大资源,那么你可以有另一个叫coworkers cgroup,拥有10%的资源。 或者类似的公平。
man cgrules.conf , man cgset和man cgconfig.conf应该让你开始。 至less在Fedora 16中,如果他们有类似的configuration文件名,现在没有时间去检查其他发行版。 可能他们这样做。
编辑:哦,只是注意到你的意见,你正在使用NFS。 那么你的networking可能会饱和,你需要使用tc和iptables QoS。 Google for Advances Linux Routing How-To ,它已经准备好了限制stream量和创build优先级的例子。 或者如果可能的话,在防火墙/路由器/负载均衡器上进行限制。
也可能是一个旧的内核版本有NFS或错误的NFS挂载选项的问题。
如果你不能移动你的光标,我的猜测是你的CPU正在IO上等待很长的时间。 您可以通过运行顶部来查看,并查看顶部附近%wa所列的金额。
上述cgroups的blkio控制器是一种控制某人或某个组可以执行的IO数量的方法。 我现在有点急,但是如果你阅读内核文档( /usr/share/doc/kernel-<version>/Documentation/cgroups ),我相信你会pipe理的。 你将需要一个相当新的内核,但是我认为2.6.32(EL6内核)的任何东西都可能。
您需要在cgroups文件系统中configurationblkio.throttle.write_bps_device文件。 通过这一点,再加上/etc/cgconfig.conf和/etc/cgrules.conf ,您可以限制任何用户或组在存储上的带宽量。
我不完全确定,但是在阅读了一些限制man limits.conf ,假设你是root,我build议在data (最大数据大小), priority和nice为其他人的帐户添加硬限制。 比如设置低于你的限制,然后设置你正在运行的任何应用程序的优先级高于他们可以。 当然,在进行任何更改之前,您应该多研究一下并进行testing,因为这可能会严重干扰用户体验。
祝你好运。