咨询与建议

看过本文的还看了

相关文献

该作者的其他文献

文献详情 >面向SSD的用户态文件系统设计与实现 收藏
面向SSD的用户态文件系统设计与实现

面向SSD的用户态文件系统设计与实现

作     者:付首力 

作者单位:电子科技大学 

学位级别:硕士

导师姓名:段翰聪

授予年度:2023年

学科分类:08[工学] 081201[工学-计算机系统结构] 0812[工学-计算机科学与技术(可授工学、理学学位)] 

主      题:SSD 野指针保护 用户态内存保护 用户态文件系统 

摘      要:随着计算机与互联网的发展,越来越多的数据需要存储到持久性设备中。从过去的磁带、磁盘过渡到了现在被广泛使用的固态硬盘(SSD),介质的容量和速度都有了飞跃式地发展。SSD拥有更高的带宽、更低的延迟以及低功耗等优势。但是,SSD也存在一些缺点,例如存储芯片写入寿命有限、无法in-place写入数据、以及写入数据最小单位小于擦除数据最小单位等问题。为了适应SSD的特性,研发人员在Linux内核态开发了更加合适的文件系统。然而,SSD较低的访问延迟导致内核I/O栈的额外开销占整个流程的比例变大。为降低额外开销,在用户态实现文件系统成为了新的研究方向。用户态文件系统可以绕过整个内核机制从而降低额外开销。此时,文件系统的性能受限于随机I/O。文件系统由于其本身的特性需要频繁和随机地访问SSD中的数据,比如,file_mapping需要递归地查询索引然后读取下一级索引的数据块。因此,如何减少主机与SSD之间的随机I/O成为了新的问题。在用户态实现文件系统还带来了新的安全问题。以往文件系统实现在内核态,内核地址空间与用户地址空间是隔离的。这种情况下,进程中的野指针不会指向文件系统中的数据。当文件系统实现在用户态时,它会和进程共享地址空间。如果程序存在野指针,文件系统的数据就存在被野指针索引的可能性。程序对野指针的访问可能造成文件系统数据损坏甚至系统崩溃。因此,文件系统需要一个用户态内存保护机制解决用户态数据安全问题。为了解决第一个问题。本文设计并实现了一个主机与SSD协作的用户态文件系统。此文件系统使用日志结构文件系统的模型减少对SSD的随机写入次数,并且选择容易产生随机I/O的功能卸载到SSD内部执行从而减少PCIe传输数据的次数。本文的文件系统划分为三层,包括API层、主机层和SSD层。SSD层通过对内部系统的开发实现了日志应用、file_mapping、path_lookup和数据迁移四个功能。主机层负责元数据缓存和文件系统通用功能。API层负责接收程序的请求。文件系统的主机层均在用户态实现,并且使用spdk库提供用户态NVMe驱动与SSD交互。为了解决第二个问题,本文设计并实现了一个基于双地址空间的用户态内存保护机制。此机制为进程额外生成一个保护线程,作用是管理受保护的内存区域。保护线程通过Linux内核预留一部分地址空间去映射受保护的数据。普通线程在访问受保护的地址时会因为权限错误而终止运行。保护线程的其余地址空间仍然会和普通线程共享。这样可以消除普通线程请求读写保护区域时产生的额外数据拷贝。本文最后记录了功能测试和性能测试结果。功能测试验证了文件系统功能和用户态内存保护机制功能的正确。本文文件系统的性能对比F2FS文件系统在部分读写场景下速度有一定程度的提升的提高。启用用户态内存保护机制时的内存带宽对比没有此机制的情况下性能损失为0%。

读者评论 与其他读者分享你的观点

用户名:未登录
我的评分