OSDI论文:XRP: In-Kernel Storage Functions with eBPF

1.论文概述

当前NVMe存储设备的出现可以达到微秒级,Linux内核系统调用以及块存储设备所产生的开销的比例也明显上升.

2.背景和动机

![image.png](https://img-blog.csdnimg.cn/img_convert/cd713687ffe6f69473cd5b657b63b8d7.png#clientId=u6eca4c97-25d9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=145&id=u094d9572&margin=[object Object]&name=image.png&originHeight=290&originWidth=1112&originalType=binary&ratio=1&rotation=0&showTitle=false&size=69123&status=done&style=none&taskId=u64183750-ff17-4699-ac3c-ac0f8611d52&title=&width=556)
新一代的NVMe中软件和硬件的开销几乎一致

存储io操作

![image.png](https://img-blog.csdnimg.cn/img_convert/412d28d3fbe816aec4c3af403f9ccd34.png#clientId=u49af4ee7-9eda-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=463&id=ua1c17676&margin=[object Object]&name=image.png&originHeight=926&originWidth=1658&originalType=binary&ratio=1&rotation=0&showTitle=false&size=291376&status=done&style=none&taskId=uc146ea40-7270-42c5-bc21-8862aa3dfb6&title=&width=829)
内核上下文切换消耗351纳秒占总开销的5.6%
应用程序执行读取的系统调用开销199纳秒占总开销3.2%
ext4文件系统开销2006纳秒占比32%
bio阻塞等待存储设备响应的开销379纳秒占比6%
NVMe驱动113纳秒占比1.8%
存储设备硬件响应开销3224纳秒占用比51.4%

得出的结论

软件开销占50%左右,其中文件系统占32%,另外由于bio和用户空间和内核空间切换也占了20%的开销

3.XRP方案

paper提出了XRP的方案,合并软件栈,消除内核态和用户态的开销.
paper中提到使用eBPF将用户态的处理逻辑放入内核太的NVMe驱动层,从而无需从用户态与内核态切换,只在内核态处理

![image.png](https://img-blog.csdnimg.cn/img_convert/13eb0d056d021a6c6cb88c0401da26b1.png#clientId=u6eca4c97-25d9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=734&id=ue2625e56&margin=[object Object]&name=image.png&originHeight=1468&originWidth=1792&originalType=binary&ratio=1&rotation=0&showTitle=false&size=675840&status=done&style=none&taskId=u5f68fa5e-7ea2-4dae-ad72-4d19abae567&title=&width=896)

上图中黄色箭头是应用调用链路, 蓝色箭头是系统调用链路, 红色是NVMe驱动调用链路

收益

在传统的bio的场景下调用链路与黄色相同,会有内核与用户态上下文的切换开销,文件系统以及bio阻塞开销,NVMe协议以及设备开销
在使用io_uring的场景下调用链路会小于蓝色链路,没有上下文切换的开销和bio阻塞,但是会有文件系统开销,NVMe协议以及设备开销
在使用eBPF的场景下调用链路与红色链路相同,没有上下文切换/bio阻塞/文件系统开销,只有NVMe协议以及设备开销
![image.png](https://img-blog.csdnimg.cn/img_convert/795886085ee12f84fad6e09fa4a90707.png#clientId=u6eca4c97-25d9-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=316&id=ue3a2cd02&margin=[object Object]&name=image.png&originHeight=632&originWidth=2386&originalType=binary&ratio=1&rotation=0&showTitle=false&size=244840&status=done&style=none&taskId=u0e489ede-8013-4261-83eb-e9c88672d32&title=&width=1193)

三种调用链路对比

用户态应用程序调用延迟78微秒,吞吐109K IOPS,速度倍率为1倍
使用io_uring在内核与用户态使用mmap映射相同地址空间,调用延迟68微秒,吞吐130K IOPS,速度倍率为1.2倍
使用eBPF调用延迟40微秒,吞吐276K IOPS,速度倍率为2.5倍
应用

限制

同时eBPF方案会带来一些问题,由于NVMe驱动层无法访问文件系统以及内核缓存,page cache会失效,因此对于多数应用程序并不适用.但是对于数据库应用来说就不是这样的情况,多数的数据库应用不并使用内核的page cache,而是采用带有o_direct的DirectIO.

引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值