Skip to content

Conversation

ZZJJWarth
Copy link
Contributor

目前测试没有问题,但是暂时没有进行并发测试
加锁的问题还没有考虑:<
注释已经加上了

@fslongjin
Copy link
Member

这个是只有读缓存吗,我貌似没看到写的

@fslongjin
Copy link
Member

image
测试程序传一下到你的github,创个仓库。然后填写上来哈。

Copy link
Member

@chiichen chiichen left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

有几个疑问

  1. CacheBlock和BlockData的作用分别是什么,我觉得应该是用一个CacheHeader管理元数据,然后里面用一个指针指向缓冲区里的块数据,Iter就迭代CacheHeader就可以了
  2. 我感觉你只要在BlockDevice的Readat/Writeat操作的时候,在ext/fat等具体文件系统实现的Readat/Writerat之前,对是否存在cache判断就可以了,而不用把每个readat和writeat都重载吧
  3. 回写你可以先做个立即回写然后sync


impl BlockCache {
/// @brief 初始化BlockCache需要的结构体
pub fn init() {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

这个可以用unified_init宏进行统一初始化

@fslongjin
Copy link
Member

@chiichen zj说这个搞好了,麻烦看看

@chiichen
Copy link
Member

chiichen commented Apr 2, 2024

@chiichen zj说这个搞好了,麻烦看看

有几个我review到的点还没改,要是觉得不需要改动的地方也说一下觉得不需要改动的原因呗哈哈哈 @ZZJJWarth

@ZZJJWarth
Copy link
Contributor Author

内存分配的问题是不是有特定的接口啥的实现?还是说这是一个新的系统?(这个如果要实现可以作为下一个pr)
然后其他的东西已经review完毕了
测试的过程中会出现死锁的情况,在系统内运行test-blockcache程序对一个文件进行反复的读操作,很大可能会出现死锁的情况,但是经过测试发现,即使不打开blockcache也会导致死锁(该死锁由文件系统导致);使用make gdb指令发现,不论是否开启blockcache,死锁后的调用函数都一致,初步认为是文件系统导致。(不排除这是blockcache加锁后导致的死锁,但是文件系统导致的死锁可能性较大)
@dragonosbot ready

@dragonosbot dragonosbot added S-等待审查 Status: 等待assignee以及相关方的审查。 and removed S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 labels Apr 2, 2024
@chiichen
Copy link
Member

chiichen commented Apr 2, 2024

内存分配的问题是不是有特定的接口啥的实现?还是说这是一个新的系统?(这个如果要实现可以作为下一个pr) 然后其他的东西已经review完毕了 测试的过程中会出现死锁的情况,在系统内运行test-blockcache程序对一个文件进行反复的读操作,很大可能会出现死锁的情况,但是经过测试发现,即使不打开blockcache也会导致死锁(该死锁由文件系统导致);使用make gdb指令发现,不论是否开启blockcache,死锁后的调用函数都一致,初步认为是文件系统导致。(不排除这是blockcache加锁后导致的死锁,但是文件系统导致的死锁可能性较大) @dragonosbot ready

是哪个函数死锁,看看有没有对应的issue在这里 @ 一下,没有的话发个issue看看

@fslongjin
Copy link
Member

内存分配的问题是不是有特定的接口啥的实现?还是说这是一个新的系统?(这个如果要实现可以作为下一个pr) 然后其他的东西已经review完毕了 测试的过程中会出现死锁的情况,在系统内运行test-blockcache程序对一个文件进行反复的读操作,很大可能会出现死锁的情况,但是经过测试发现,即使不打开blockcache也会导致死锁(该死锁由文件系统导致);使用make gdb指令发现,不论是否开启blockcache,死锁后的调用函数都一致,初步认为是文件系统导致。(不排除这是blockcache加锁后导致的死锁,但是文件系统导致的死锁可能性较大) @dragonosbot ready

是哪个函数死锁,看看有没有对应的issue在这里 @ 一下,没有的话发个issue看看

我估摸着是文件的那里有个lock_no_preempt造成的。
当时原因是如果那里有preempt,那么文件读操作的时候,就没办法睡眠。
但同时,no preempt也引入了死锁的问题。
感觉是文件这个结构,它不能直接套个大锁。得精细化的去加锁,才能避免这个问题

@fslongjin
Copy link
Member

@dragonosbot author

@dragonosbot dragonosbot added S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 and removed S-等待审查 Status: 等待assignee以及相关方的审查。 labels Apr 4, 2024
@fslongjin
Copy link
Member

这个PR的问题非常多,请一个个comment详细确认并修改。

同时,block cache不应该放在 kernel/src/driver/base/目录下。这个是设备驱动模型的目录。请移动到kernel/src/driver/block/下面创建新的文件夹。

@ZZJJWarth
Copy link
Contributor Author

@dragonosbot ready

@dragonosbot dragonosbot added S-等待审查 Status: 等待assignee以及相关方的审查。 and removed S-等待作者修改 Status: 这正在等待作者的一些操作(例如代码更改或更多信息)。 labels Apr 7, 2024
@fslongjin fslongjin merged commit eb49bb9 into DragonOS-Community:master Apr 7, 2024
@ZZJJWarth ZZJJWarth deleted the stable_0.1.1 branch April 29, 2024 09:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-fs Area: 文件系统 O-x86_64 Target: x86_64 S-等待审查 Status: 等待assignee以及相关方的审查。 T-driver Relevant to the driver team, which will review and decide on the PR/issue.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants