【技术实现步骤摘要】
Pebble集成io_uring机制的方法与系统
[0001]本专利技术涉及数据库开发
,特别涉及一种Pebble集成io_uring机制的方法与系统。
技术介绍
[0002]Pebble是Cockroach参考RocksDB并用Go语言开发的高性能KV存储引擎。存储引擎作为数据库的重要组成部分,为数据库的性能和稳定性奠定了基础。在存储场景中,通常对性能具有非常高的要求。因此在存储引擎底层的I/O技术选型时,总是希望能得到更好的解决方案。Pebble中使用同步I/O机制,理想情况下程序会尽可能发挥CPU的计算能力和存储设备的I/O能力,从而实现最好的性能。近年来,存储设备的I/O性能提升很快,同步I/O模式会限制存储设备能力的发挥。如果使用异步I/O,能显著加速Pebble这种I/O密集型应用的性能。
[0003]2019年,Linux5.1正式发布,引入一套全新的syscall接口——io_uring,用于支持异步I/O。它允许用户提交一个或多个I/O请求,这些请求是异步处理的,不会阻塞调用进程。在用户空间和 ...
【技术保护点】
【技术特征摘要】 【专利技术属性】
1.一种Pebble集成io_uring机制的方法,其特征在于:包括以下步骤:通过在Pebble存储引擎中新增虚拟文件系统对象,使用最新的io_uring替代传统同步I/O机制作为Pebble底层的I/O模型,自定义实现Pebble中的虚拟文件系统接口;包括以下步骤:S1、使用io_uring机制的文件系统实现类;以Pebble的vfs.defaultFS为基础实现,改写Create、Open以及ReuseForWrite三个函数,即创建文件、打开文件以及再利用重写文件三种操作;S2、使用io_uring机制的文件操作实现类;通过封装Pebble原有的vfs.File类进行实现,对文件操作类的结构进行改造,并对文件操作类中涉及读写操作的函数进行改造,包括但不限于Read、ReadAt、Write以及Sync函数;S3、提交io_uring任务的实现类,其基本思想是实现一个io_uring封装类:使用单例模式创建唯一对象,所有文件的io_uring读写请求都通过该对象提交到内核中;实现方式是定义一个队列,该队列负责接收从多个线程发送过来的io_uring任务;使用单例模式创建的唯一对象在初始化时开启一个协程,在Pebble运行的生命周期中,不断地循环从队列头部获取io_uring任务,并提交到内核中,同时还不断地循环从io_uring任务的CE队列中获取已经写入磁盘结束的io_uring任务,调用waitgroup.Done命令唤醒等待的线程继续处理,通知发起请求的函数I/O操作已经完成。2.根据权利要求1所述的Pebble集成io_uring机制的方法,其特征在于:所述步骤S1中,改写Create、Open以及ReuseForWrite函数时,包括以下内容:1)、调用os.OpenFile打开文件时使用direct_io模式;2)、函数返回的File对象具体为使用io_uring机制实现的文件操作实现类。3.根据权利要求1所述的Pebble集成io_uring机制的方法,其特征在于:所述步骤S2中,对文件操作类的结构进行改造,包括以下内容:1)、增加两个数组对象,一个用于保存文件的写入内容,另一个用于实现读写操作时不满512字节的缓存处理,大小为512字节;2)、增加整型对象,用于记录读、写以及落盘的偏移量;3)、增加waitgroup对象,用于确保每次文件同步时,所有的io_uring写任务已经处理完成。4.根据权利要求1所述的Pebble集成io_uring机制的方法,其特征在于:所述步骤S2中,对文件操作类的Read函数行改造,包括以下内容:1)、文件读取的起始偏移量必须为512字节的整数倍,当记录的文件读取偏移量不满足此条件时,将起始偏移量前移至最大的满足512字节整数倍的位置;2)、根据传入数组的长度和文件大小,将读文件的结束位置后移至最小的满足512字节整数倍的位置;3)、确定文件读取位置后,提交io_uring读任务,并创建对应的一个同步等待组waitgroup,等待读操作完成;4)、当读操作完成后,对读取内容进行截取处理,将真正需要的读取内容返回。5.根据权利要求4所述的Pebble集成io_uring机制的方法,其特征在于:ReadAt函数与
技术研发人员:刘梦真,
申请(专利权)人:山东浪潮科学研究院有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。