Multi-Stream Write是Samsung推出的一个技术。
Multi-Stream Write的设计思路有两点:
1. 给从Host写入的数据增加一个Stream 的概念,同一个Stream里的数据会被同时invalidate。比如一个5M的MP3,1G的电影,一旦删除,就整个文件所有的数据全部被删除,不存在一部电影被删除10%的情况。
2. 将数据按照更新频率(用不同的Stream ID标记)存到NAND上
下图能够看到Multi-Stream和传统方式在把数据写到NAND上时选择Block的区别:
Host下写入数据时,根据该数据的更新频率分配Stream ID,FTL把Stream ID相同的数据Mapping到NAND Flash上相同的Block。
说白了,Multi-Stream Write是通过更加有效的数据摆放,降低后续GC过程中数据迁移的开销,从而实现Performance和寿命的提升。
下图中右侧的Block 0是最理想的情况,GC时可以直接擦除,完全没有Valid Data的copy。
Samsung也给出了Enable Multi-Stream以后的实验数据:
Case 1: Four Streams – Read/Write (70%/30%)
- 用打了补丁(要不然没有update frequency)的FIO
- 先做了2小时的Pre condition (128K Seq Write),让盘进入Steady Status,保证GC开始工作 (挺专业)
- 定义了 1x, 10x, 33x,55x四种更新频率不同的数据
从结果来看:
- Read IOPS (4K)提高到1.8倍
- Write Throughput (128K)提高到2倍
- WA降低到原来一半 (相当于寿命延长一倍)
PS: 不知道是不是我眼神不好,最后一张图,打开Multi-Stream以后WA居然掉到了1以下,Samsung你故意的吗?(刚发了一封邮件给Samsung,看看人家回不回吧。)
Case 2: Cassandra
- 一个开源分布式数据库应用,自带Stress Tool
- 50%/50% Read/Write
- 100万条记录
- 4小时Pre Condition
结果:
- IOPS提高45%
- WA降低到原来一半
- Read Latency降低50%
之前写的《跟着兵哥捡垃圾系列》,曾经讨论过数据摆放策略对GC效果的影响,那是在理论层面,现在看到在产品中的具体实现,只想感叹一句:铜锣湾只有一个扛把子 — Samsung。
本文参考:
Multi-Stream Write SSD Increasing SSD Performance and Lifetime with Multi-Stream Write Technology by Changho Cho, Principal Engineer Samsung Semiconductor