我被分配为Linux内核编写系统调用,奇怪地确定(并减少)用户每分钟的最大传输量(用于文件操作)。此系统调用将被称为lim_fs_usage
,并将获取一个参数,以获取所有用户可在一分钟内访问的最大字节数。简而言之,我将确定Linux中所有文件系统操作的带宽。该项目还要求在用户之间选择适当的方法来分发这种受限资源(文件访问),但我认为这样
不是一个大问题。
我进行了很长时间的搜索和扫描,但找不到以编程方式管理文件系统访问的方法。我想过将(mmap()
)硬盘映射到内存并管理内存操作,但这变得毫无用处。我还试图找到一个用于虚拟文件系统的API,以便监控和限制它,但我找不到。任何想法,请...任何帮助非常感谢。提前谢谢你......
答案 0 :(得分:1)
我想知道你是否可以将其作为IO调度程序实现。
在Linux下进行IO带宽限制的主要困难是,当它到达设备附近的任何地方时,内核可能早已忘记是谁造成的。
同样,在决定谁负责某个IO时,你可以做一些非常棘手的事情:
如果你理解了所有这些以及更多的警告,并且仍然想要,我想这样做就像IO调度程序一样。
IO调度程序可以在Linux(2.6)下插入,并且可以动态更改 - 内核等待设备上的所有IO(每个块设备可以切换IO调度程序)结束,然后切换到新的。
答案 1 :(得分:0)
由于紧急情况,我会在没有对可行性进行任何研究的情况下从头脑中给出一个想法 - 如何插入一个钩子来监视处理文件系统访问的系统调用? 您最终可能会编写专门的内核模块来处理各种文件系统(ext3,ext4等),但作为概念验证,您可以从一个开始。不要忘记root已经在内存,进程空间和磁盘中为自己的操作保留了块。
管理内存操作与您尝试做的事情无关(但也许我在这里弄错了)。
答案 2 :(得分:0)
经过长时间的思考和探索,我决定使用提出的“提取方法”。我正在考虑创建一个新的系统调用,它初始化和管理一个全局变量,如hdd_ bandwith _limit。此变量将用于Read()
和Write()
系统调用'修改后的实现(而不是¨count¨variable)。然后我将决定分配这个资源,这是真正的问题。可能我会找出有多少用户在某个时刻使用该系统并平均分配该资源。将是一个类似Round-Robin的发行版。但是,我仍然对这个分配问题的建议持开放态度。它会是SJF还是FCFS还是Round-Robin?同步是另一个问题。我怎么知道用户的工作是短期还是长期?或者他是否完成了手术?