之前写过一篇介绍NVMePower State的文章,近期SSDFans从ULINK这边借了一套测试NVMe Power State的设备,正好可以实践一下。
首先先回顾一下什么是NVMe Power State的相关基本概念。
NVMe Spec里给出的动态电源管理的框图:
Power objective和PerformanceObjective: 系统层面的应用有功耗和读写性能的目标,这个是输入。
Power Manager (Host Software): 这个我理解是NVMeController Device Driver
NVMe Express Power State: NVMe规定(IdentifyController Data Structure)最多支持32个Power State Descriptor,其中Power State Descriptor 0是必须support 的,其他都是可选。
每个Power State都有一个32 Byte的 Descriptor数据结构,里面包括了该Power State下各种属性, 比如:
Active Power Scale: 该Power state下Active模式功耗的粒度;
Active Power: 该Power state下Active模式的最大平均功耗, 这个值乘以上面的Scale,就是实际功耗值;
Relative Write Latency: 该Power state下的写延迟, 值越小代表延迟越低 (这个值的分级级数必须小于Controller支持的PowerState数量,Controller不能一边说只支持5个Power State,一边说可以支持10种写入延迟,这个是耍流氓);
Relative Write Throughput: 该Power state下的写入吞吐量:值越小代表吞吐量越高 (这个值的分级级数同样必须小于Controller支持的Power State数量)。
Host和Controller之间,就通过对这些Field的修改,实现下面的沟通。
Entry Latency: 进入该PowerState的时间(微妙级);
Exit Latency: 退出该PowerState的时间(微妙级);
这两个值给Host,Host根据这个来决策是否进入,何时进入某个Power State;
Non-Operation State:为’0’代表在这个PowerState Controller会处理IO,为‘1’代表在这个Power State Controller不会处理IO。
Host的具体操作是:
1. Host给Controller发个IdentifyController Command, Controller会回复一个4K的数据包。
2. Host解析数据包获知Controller支持的PowerState的数量以及Power State下Controller的具体属性
3. Host根据实际情况,通过SetFeature Command命令控制Controller进入相应的Power State
4. Host也可以通过GetFeature Command来获知当前Controller所处的Power State
NVMe Power State的介绍,收录在近期出版的 《深入浅出SSD》一书的电源管理章节中,扫描识别下方二维码即可购买。
ULINK用来测试NVMe Power State的这套设备包括:
- ULINK的PCIe SSDPower Adapter
- Intel的 NUC平台 (支持ASPM L1.2)
- M.2 to PCIe转接卡(支持CLKREQ功能)
- PCIe to M.2 转接卡(支持CLKREQ功能)
整个环境搭起来就是下面这样:
环境搭建完毕,打开DriveMaster2015 NVMe并加载专用脚本,就可以开始测试了。
我们首先使用Samsung 960 EVO进行了测试,(下面这张表格为脚本自动检测SSD支持的Power State数量与参数)。
1. 从日志开头的汇总表格来看,960EVO一共支持5个Power State
2. 从Power State 0开始,功耗逐渐降低
3. 从NOPS(Non-Operational State)这列可知,Power State 0~2 允许有IO,Power State 3,4 不允许IO
4. Power State 3,4 分别给出了ENLAT (entrylatency)和EXLAT (exit latency)
5. APW的全称是ActivePower Workload (000b=No Workload Specified; 001b=Workload #1; 010b=Workload #2),系统会去检查SSD有没有指定Workload进行测试,如果没有指定的话就用ULINK的workload,三星960EVO并没有指定workload,测试中就使用了ULINK自己定义的workload:
a) ULINK workload:先idle 5分钟,然后下50,000个50KB的随机写命令,之后再idle5秒钟
b) Workload 1:先idle 5分钟,然后下32个1MB的随机写命令,之后再idle30秒钟
c) Workload 2: 80,000个128KB的顺序写命令
PowerState 1测试日志(本文只列出了部分Power State 的日志)
IDLE RMS Current : 3.3V: 378.6 mA 12V: 0.0 mA (1.2493 w)
//在Power State 1下,Idle状态的功耗为1.2493w(3.3V*378.6mA)
Use Workload : Workload #0/ULINK Workload
//使用ULINK自己定义的Workload
ACTP RMS Current : 3.3V: 673.3 mA 12V: 0.0 mA (2.0872 w)
// 在Power State1下,Active状态的平均功耗为2.0872w
ACTP Max Current : 3.3V: 681.9 mA 12V: 0.0 mA (2.2502 w)
// 在Power State1下,Active状态的最大功耗为2.2502w
ACTP Power : 27.1067 Joules
Read Throughput (IOPS) : 39318
// 在Power State 1下,read IOPS为39318
Read Latency : 25 us
// 在Power State 1下,readlatency为25us
Write Throughput (IOPS) : 43021
// 在Power State 1下, write IOPS为43021
Write Latency : 23 us
// 在Power State 1下, writelatency为23us
Exit Time : 2840 us (Not Specified by thedevice)
// Power State 1的退出时间为2840 us
PowerState 3测试日志:
IDLE RMS Current : 3.3V: 9.1 mA 12V: 0.0 mA (0.0300 w)
//在Power State 1下,Idle状态的功耗为0.0300w
Use Workload : N/A
// 因为NOPS=1,所以不使用workload,而且下面三个ActiveState相关的功耗统计都是N/A
ACTP Average Current : N/A (NOPS = 1)
ACTP Max Current : N/A (NOPS = 1)
ACTP Power : N/A
Read Throughput (IOPS) : 11574
//因为NOPS=1,说明这个powerstate预期是没有IO的,DriveMaster为了让客户了解该Power State下的读写状况,强制发了IO
Read Latency : 86 us
Write Throughput (IOPS) : 14357
Write Latency : 69 us
Exit Time : 4586 us +++++Fail (Exit Time Too Long; Doesnot meet the default:1200 us)
// 退出Power State3耗时 4586 us,超过了SSD自己申明的时间(1200us)
在Power State 3的部分,Entry Time和Exit Time都显示fail — 超过了规定的时间。这个时间并不是NVMe Spec规定的,而是固件在Identify过程中上报的,厂商可以自己定义这个时间。
PowerState 4测试日志:
Power State 4
Entry Time : 7795 us +++++Fail (Entry TimeToo Long; Does not meet the default:2000 us)
IDLE RMS Current : 3.3V: 0.2 mA 12V: 0.0 mA (0.0006 w)
// 可以看到,Power State 4是非常省电的,整个SSD的功耗是0.6毫瓦
Use Workload : N/A
ACTP Average Current : N/A (NOPS = 1)
ACTP Max Current : N/A (NOPS = 1)
ACTP Power : N/A
Read Throughput (IOPS) : 11602
Read Latency : 86 us
Write Throughput (IOPS) : 14330
Write Latency : 69 us
Exit Time : 8955 us +++++Fail (Exit TimeToo Long; Does not meet the default:6000 us)
最后,在整个测试过程中,DriveMaster会全程监控电流值并记录在csv格式的日志里,使用这些数据绘制出SSD在不同Power State下的功耗情况,如下图: