-
-
Notifications
You must be signed in to change notification settings - Fork 141
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
file对epoll add和epoll remove的处理,扩展性较差 #896
Comments
这里并不是说“不是pipe,且不是socket的,那么这种inode就是EventFdInode”,因为这里只是尝试向下转换为EventFdInode,如果成功了,那它就是EventFdInode,如果不是,那就按照原来的方式返回SystemError::ENOSYS |
给IndexNode这个trait加add_epoll()和remove_epoll()函数后,我觉得可以对这些进行统一,因为还有其它类型的Inode也会使用这些函数。 |
只有pollable的iNode才支持epoll,这里感觉统一加在iNode里有点奇怪,是否新加一个trait: |
@GnoCiYeH 请问一下在进程进行epoll时,判断是否有就绪事件的代码如下:
这只是简单判断了队列是否为空。这意味着如果一个文件有就绪事件,它需要主动把事件放到队列中。这是怎么实现的? |
这个目前是暴力实现的,比如我把一个epitem绑定在socket上,那网卡来数据时,就会通知这个socket对应的epoll。 |
这个地方应该感觉需要做一个重构吧,内核中不止socket会产生事件。 |
是的,要是可以在wq里面注册回调来实现是最好的,但是目前wq没有这样的功能。这种方式rust也不太好设计。。 |
是否可以在poll的时候主动轮询一下? |
epoll最核心的地方在于:有数据来才唤醒。在poll的时候主动轮询解决不了问题,因为poll这个动作是在唤醒epoll后来做的,但是问题在于该如何唤醒epoll? |
我大概理解怎么唤醒了,按照现在的pipe相关的代码,在对特殊文件进行操作的时候,可以检查是否需要唤醒epoll,比如pipe文件就在读写操作的时候进行了唤醒。 |
|
问题
File对象的add_epoll和remove_epoll方法,里面对文件类型进行了特判。
我认为可以统一处理这个事情,给IndexNode这个trait加add_epoll()和remove_epoll()函数会比较好。
@Godones 另一个问题,对于代码:https://github.com/DragonOS-Community/DragonOS/pull/894/files#diff-08d0c277f75d9d64222b3634cc6c86f177e35c79e7cda7ca1161a1211cde4922R522
不能认为,“不是pipe,且不是socket的,那么这种inode就是EventFdInode”
这个跟上面Add的时候的语义完全就对应不上,需要修改。
抄送:@GnoCiYeH @Chiichen
The text was updated successfully, but these errors were encountered: