对文件系统进行原型设计

Posted

技术标签:

【中文标题】对文件系统进行原型设计【英文标题】:Prototyping a filesystem 【发布时间】:2010-07-27 05:20:30 【问题描述】:

的最佳实践有哪些?

我在 Python 中尝试过使用fusepy,现在我很好奇:

从长远来看,如果 可敬的文件系统实现 在C?不会在 C 中妨碍 便携性,或最终导致 性能问题? 是否还有其他实现方式,例如 保险丝? 显然核心文件系统技术发展缓慢(fat32、ext3、ntfs,其他一切都是小鱼),采用了哪些调试技术? 在主要操作系统中实现高度优化、完全受支持的文件系统开发的一般课程是什么?

【问题讨论】:

【参考方案1】:

存在于用户空间中的文件系统(在 FUSE 或其 Mac 版本中)确实是一个非常方便的东西,但不会具有与存在于内核空间中的传统文件系统相同的性能(因此必须在 C )。你可以说这就是为什么微内核系统(文件系统和其他东西存在于用户空间中)从来没有像 A. Tanenbaum 在 Minix 邮件列表上的一篇著名帖子中攻击 Linux 时所说的那样,真正“将单片内核留在尘土中” 20 年前(作为一名 CS 教授,他说他会因为 Linus 为他的操作系统选择单体架构而失败——Linus 当然反应热烈,整个交流现在非常有名,可以在网络上的许多地方找到;-)。

可移植性并不是真正的问题,除非您的目标是内存非常有限的“嵌入式”设备——除了此类设备,您可以在可以运行 C 的地方运行 Python(如果有的话,那就是FUSE 会限制你,而不是 Python 运行时)。但性能肯定可以。

【讨论】:

【参考方案2】:

从长远来看,应该 可敬的文件系统实现 在C?不会在 C 中妨碍 便携性,或最终导致 性能问题?

不一定,有很多与 C 不同的执行语言(首先想到的是 O'Caml,C++。)事实上,我希望 NTFS 可以用 C++ 编写。问题是您似乎来自 Linux 背景,并且由于 Linux 内核是用 C 编写的,因此任何希望合并到内核中的文件系统也必须用 C 编写。

还有其他实现吗 保险丝?

有几个适用于 Windows,例如,http://code.google.com/p/winflux/ 和 http://dokan-dev.net/en/ 在不同的成熟度级别

显然是核心文件系统技术 缓慢移动(fat32、ext3、ntfs、 其他都是小鱼),什么 是否采用了调试技术?

同样,这在 Windows 中大部分是正确的,在 Solaris 中你有 ZFS,在 Linux 中 ext4 和 btrfs 存在。调试技术通常涉及在各种操作过程中关闭机器,查看数据处于何种状态,存储大量数据并查看性能。

什么是通用课程文件系统 发展需要达到一个 高度优化,完全支持 在主要操作系统中实现?

同样,这取决于哪个操作系统,但它确实涉及大量测试,尤其是 确保故障不会丢失数据。

【讨论】:

不要忘记像 bonnie++ 这样的事实标准文件系统基准测试:coker.com.au/bonnie++ 嗯,这是最好的答案,但比我希望的要少。可能不是完整文章的正确论坛:) @Matt:您会惊讶于人们为赏金所做的事情:-) 如果这还不够,请稍微修改您的问题,准确说明您希望什么并添加赏金。 bonnie++ 事实上的标准文件系统基准测试?你在开玩笑吗? fsl.cs.sunysb.edu/docs/fsbench/fsbench-tr.html#sec:bonnie【参考方案3】:

我建议您为内核块设备 API 层创建一个mock object。模拟层应该使用mmap'd 文件作为文件系统的后备存储。这样做有很多好处:

    运行单元测试用例的 FS 性能极快。 能够将调试代码/断点插入模拟层以检查故障情况。 轻松保存文件系统状态的多个副本以供研究或运行测试用例。 能够确定性地引入文件系统必须处理的块设备错误或其他系统事件。

【讨论】:

【参考方案4】:

受人尊敬的文件系统将快速高效。对于 Linux,这基本上意味着用 C 语言编写,因为如果您没有与内核一起分发,您将不​​会受到重视。

至于 Fuse 等其他工具,有 MacFUSE,它可以让你在 mac 和 linux 上使用相同的代码。

【讨论】:

以上是关于对文件系统进行原型设计的主要内容,如果未能解决你的问题,请参考以下文章

设计模式-原型模式

2014025654《嵌入式系统程序设计》第五周学习总结

最常用的6种原型文件格式对比

团队作业2——需求分析&原型设计

课本一二章

团队作业3——需求改进&系统设计