本文为摘录,原文为: 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
    • 闪存的 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:
          1. data placement decisions,
          2. overprovisioning,
          3. scheduling,
          4. garbage collection and
          5. wear leveling

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 的多通道特性来实现并行
  • Changes in MySQL

    • 直接使用 VFS 接口的话,不会有提升

    • 扩展 ioctl

      • 使之可以掠过 VFS 直接发送 RW 命令
    • 修改了 MySQL 的 buffer manager

      • 添加新的 IO 函数, buffer manager 可通过该函数来:
        • 获取 read write 的 LBA
        • 发送 RW 命令
      • 修改了 MySQL 的 read 函数:
        • read 返回后当前事务可以直接进行,而无需再申请 buffer (通过操作 LRU list)

5 READ STALL IN STORAGE AND R-BUF

5.1 Read Stalls in SSD Buffer

5.1.1 Problem Definition