蛋蛋的三大爱好:写文章,小电影,看直播。
写文章的功力,大家都见识过了,一部《蛋蛋读NVMe》 上谈协议,下接地气;
小电影,不仅自己看,还用于在文章中给大家举例;
直播,2016年天朝除了楼市,就属直播最火。为什么蛋蛋喜欢看直播?因为:
她
她
和她
作为一个职业技术宅,蛋蛋喜欢研究事物内在的逻辑,并且通过自己的技术进行优化。
蛋博士有个习惯,看直播的时候喜欢打一枪换一个地方,拿着本本看看停停,于餐桌,阳台,沙发之间辗转反侧。
如果走到哪里都拖着电源线,是非常影响蛋博士送游艇的心情的,所以蛋博士必须对这种应用场景下的SSD 功耗进行优化。
读博士的好处,就是能够透过现象看本质,蛋蛋把观看直播过程中SSD的行为抽象成一批又一批的IO读写,再把每笔IO的SSD的电源状态分解为如下图:
结合上图考虑SSD的功耗,两个影响因素:
- IO Pattern:Active IO duration和Inactive IO duration,只有处于Inactive state, SSD才能一级级的进入更低的省电模式
- Power State转换带来的额外能耗:举例来说,当SSD进入D3 state时,可能需要把大量的Dirty data在短时间内写入到Flash,这个过程是比较费电的。这也是为什么有时候进入低一级的省电模式,如果马上退出,反而比留在原有省电模式更加费电的原因。存在这样一个临界时间,即进入低一级power state并返回和留在原power state的功耗相同,坊间称之为补偿时间(recoup time)。
策略上:
- 降低 工作模式下的功耗,比如使用在SSD里使用LPDDR
- 尽可能多的进入更省电的Power State(停留时间超过补偿时间),这样做对Performance肯定有影响,但一心看直播的蛋蛋不在乎。
SSD省电是一个系统工程,为了找到最好的模型,蛋博士动手开始搭模拟环境:
不同State的功耗,停留时间以及进出带来的额外功耗
Active Power |
1.3 W |
Active时的功耗是1.3W |
Idle Power |
800 mW |
Idle时的功耗是800mW |
Idle time |
10ms |
Idle超过10ms就进Slumber |
Slumber time |
5s |
Slumber超过5s就行DevSlp |
Slumber Power |
125 mW |
Slumber时的功耗是125mW |
DevSlp Power |
5 mW |
DevSlp时的功耗是5mW |
DevSlp Resume energy |
100 ms @ 1.3W |
DevSlp退出需要100ms,功耗是1.3W |
RTD3 Context Save Data |
256 MB |
进入RTD3时需要保存的上下文有256MB (蛋博士看的是高清直播) |
RTD D3(Context Save) Energy |
1.2 s @ 2.6W |
保存这些上下文需要1.2s,功耗是2.6W |
RTD D0(Context Restore) Energy |
200ms @ 1.3W |
退出RTD3恢复上下文需要200ms,功耗是1.3W |
预设
- 每两组IO之间的Interval是固定的
- 增加Interval的同时,IO时间也增加相应的比例,因为单位时间内需要传输的数据量是一样的 (你可以每隔一分钟传1440帧,也可以每隔5分钟传7200帧,反正蛋博士要求画面不能卡顿,分辨率要是4K)
- 能够进入到哪一级省电模式,以及能待多久,根据Interval时间内完成IO后剩余时间,并考虑补偿时间的情况下计算得出
- 进出某个省电模式的时间相等;
蛋蛋从Interval=0.5分钟开始逐渐延长时间间隔,得到SSD功耗分布的结果
根据Intel对超级本的定义,为了能几天才充一次电,IDLE时的功耗是100mW, 分给SSD的配额也就5mW。
根据上图的结果,interval必须到30分钟,让蛋博士等这么久才瞅一眼mm,完全不能接受。
蛋博士开始对模型进行优化:
- 把Slumber状态下的功耗降低4倍;
- Slumber下停留时间超过1s就进入DevSlp;
效果十分突出:
- Interval=30s的整体功耗下降为原来的1/3;
-
Interval=8min时,就可以实现SSD功耗5mW的目标
现在可以每8分钟就瞅一眼mm了,蛋博士觉得还有提升的空间。针对某个特定的应用场景,如果提前告知SSD平均的Interval时间,SSD就可以做比较极端的省电优化,
比如跳过Slumber(或者极短时间)直接进DevSlp甚至RTD3,效果是下面这个样子。
每4分钟看一小会儿直播,蛋博士满足的笑了。
提问:封面的思聪跟蛋博士的三位心头好,是什么关系?