- 1 ABSTRACT
- 2 INTRODUCTION
- 3 BACKGROUND
- 4 READ STALL IN DBMS AND RW COMMAND
- 5 READ STALL IN STORAGE AND R-BUF
本文为摘录,原文为: attachments/pdf/e/p1911-lee.pdf
1 ABSTRACT
问题: 读阻塞
- buffer manager 采用 read-after-write (RAW) 策略
- 读写速率不同,导致 读阻塞
- RAW 分两层:
- DBMS buffer
- Storage buffer (硬件层)
方案:
RW as new storage interface:
- fused read and write, RW, 读写融合
- buffermgr 可同时发出读写请求
- 脏页拷贝到存储 buffer 之后 马上 read
R-Buf
- 分离读写 buffer
效果
- RW: tpcc -> 3.2x
- RW + R-Buf: tpcc -> 3.9x
2 INTRODUCTION
3 BACKGROUND
3.1 I/O Asymmetry in Flash SSDs
- SSD 读写非对称:
- 读快,写慢
- MLC 闪存,写一个页面需要
1500us
,而读仅需50us
- MLC 闪存,写一个页面需要
- 闪存的 GC 进一步加剧了这一现象
- 下表为一个测试结果 (FIO)
- OpenSSD
- is a solid-state drive which does not have a firmware Flash Translation Layer implemented on the device
- relies on OS to manage of the physical solid-state storage
- more flexibility with regard to:
- data placement decisions,
- overprovisioning,
- scheduling,
- garbage collection and
- wear leveling
- OpenSSD
- 读快,写慢
3.2 RAW Protocol in DBMS Buffer
3.3 RAW Protocol in Storage Buffer
- S-Buf
- Shared buffer, for both read & write
SSD architecture
4 READ STALL IN DBMS AND RW COMMAND
4.1 Read Stalls inRelational DBMS Buffer
- the read stall problem can be alleviated or even disappear with a large buffer
- PG: 会下降的更多: 61%
4.1.1 Problem Definition
- 数据库 buffer 层的 write-then-read ,阻挡了使用底层异步并行优化 (libaio or io_uring)
4.2 RW Command
4.2.1 Key Idea.
new block I/O command:
RW
write a dirty page to storage, and in parallel, read the missingpage to the host in on I/O call.
4.2.2 Abstraction and Architecture.
当前存储接口中不存在这样的命令, 作者将
RW
作为 NVME vendor specific command 添加rw(rdLBA, wrLBA, len, buf)
- rdLBA/wrLBA: 读写操作的逻辑块地址
- len: 两个页面的大小 (假设相等)
- buf: host buffer 虚地址
当主机向控制器发出 RW 命令后, NVME Controller 并行处理 READ 和 WRITE
- 将与 wrLBA 相关的脏页拷贝进控制器缓存 (storage buffer)
- 马上读取 rdLBA
- 好处
- 存储控制器内部可以并行
- 减少 SYSCALL 和 IO 中断
- Consistency and Durability
4.2.3 Prototype Implementation
向 OpenSSD 添加了新的 RW 命令,并扩展固件代码来支持这一语义。
Changes in OpenSSD
- 使用 OpenSSD
- OpenSSD 可以自由修改软件和硬件设计
- 使用了 Comos+ board, 该板支持 NVMe 接口
- 定义了新的 opcode
- 固件上实现了自定义操作
- 固件的读写地址不同,可以利用 SSD 的多通道特性来实现并行
- 使用 OpenSSD
Changes in MySQL
直接使用 VFS 接口的话,不会有提升
扩展
ioctl
- 使之可以掠过 VFS 直接发送 RW 命令
修改了 MySQL 的 buffer manager
- 添加新的 IO 函数, buffer manager 可通过该函数来:
- 获取 read write 的 LBA
- 发送 RW 命令
- 修改了 MySQL 的 read 函数:
- read 返回后当前事务可以直接进行,而无需再申请 buffer (通过操作 LRU list)
- 添加新的 IO 函数, buffer manager 可通过该函数来: