用户程序为什么要弄乱内核空间?


9

我什至不知道问题出在哪里,但是我在谈论这里描述的内核攻击。在此评论列表的下方,有人询问如何重新安排该过程。这个技巧并没有改善这种情况(机器仍然以非常缓慢的方式运行),并且在回复评论中谈到了内核空间与用户空间的关系。

首先,答复是否正确?如果是这样,为什么renice对用户空间中的事物而不对内核空间中的事物起作用?另外,根据我阅读的内容,用户自己启动的所有程序都应该位于用户空间中,我错过了什么?

如果这是不正确的,那为什么不肯改善这种状况呢?

Answers:


9

内核为用户空间提供了一些服务(例如打开套接字)。有一个定义明确的接口(API),用户空间程序可以通过它与内核进行交互。

在这种情况下,用户空间程序将反复打开套接字并通过它们发送文件描述符,然后关闭套接字。这些动作由内核执行。它将文件描述符保存在缓冲区中,直到套接字的另一端读取它为止。特定的错误是垃圾收集器最终应释放文件描述符,但事实并非如此-fd泄漏。泄漏的fds加起来并坐在那里消耗资源。终止程序不会释放资源,因为它们不属于程序。


6
renice不能提供帮助的原因是,它仅影响进程获得的用户CPU时间份额。为此,不计算在内核模式下花费的时间。通常,nice仅影响受CPU约束的程序,而不影响受IO约束的程序。在这里,失控的过程是纯粹的IO,甚至没有执行太多的系统调用,因为错误是每个系统调用花费的时间太长。
吉尔(Gilles)'所以

1
@Gilles对不起,您碰到了这么老的问题,但是看起来很有趣!我理解正确ionice吗,类似的东西会做得更好?
rozcietrzewiacz 2011年

@rozcietrzewiacz我也不认为ionice会有所帮助,但我不确定。由于该错误,该过程将所有时间都花在单个syscall上,而ionice不会阻止这一点(我认为)。
吉尔斯(Gilles)'所以
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.