随着两周前Gigabyte AORUS Gen5 10000 SSD在美国Amazon和newegg的发售,以及其它厂家PCIe Gen5 M.2 SSD的发售,针对Gen5 M.2 SSD的测试对于笔记本电脑厂商也早于之前的预期开始了测试。
针对Gen5 M.2 SSD的测试常用的工具,一般有下面几大类:
PCIe Gen5协议分析仪
这类产品以SeriaTek PCIe Gen5 analyzer为代表。针对M.2 SSD的一个关键指标是保证M.2在进出低功耗L1.2的时候可以稳定地抓取并且解码数据
PCIe Gen5 SSD链路故障注入工具
这类产品以Quarch公司的Gen5 M.2 card control module为代表,串接在M.2 SSD和M.2插槽之间,导入物理层和链路层的各种问题,可以仿真出M.2 SSD在插入市场上各种质量参差不齐的主板的时候是否仍然可以稳定、可靠地工作。
PCIe Gen5 SSD性能和功能测试设备
这类产品以SanBlaze公司的RM5/DT5为代表,已经在过去一年多的时间里获得了全球各大Gen5 M.2 SSD厂商的选择,尤其是在Gen5 低功耗L1.2测试上通过独有的硬件设计解决了低功耗测试测试的难题。我们本篇文章也是重点介绍该功能的实现。
PCIe Gen5 SSD电压拉偏测试
这类产品以Quarch公司的Gen5 M.2 PPM (programmable power module)为代表,测试Gen5 M.2在接入不同的主板的时候,或者主板电压不稳的时候是否可以正常工作。
PCIe Gen5 SSD功耗和边带sideband信号追踪回溯工具
这类产品以Quarch公司的Gen5 M.2 PAM (programmable analysis module)为代表,测试Gen5 M.2 SSD在接入不同的主板,尤其是在L1.2低功耗下面的各种问题的分析非常方便,它可以非常高的分辨率长时间抓取所有的电压、电流和功耗以及sideband例如CLKREQ#, PERST#等,方便工程师进行问题的回溯分析。
PCIe Gen5 SSD测试环境搭建常用盘柜和治具
这类产品以SerialCables公司的Gen5 8槽位测试盘柜,以及各类Gen5 M.2转接卡和延长线为主,例如Gen5 M.2/AIC, M.2/U.2等,重在保证Gen5信号的品质。
PCIe Gen5 SSD高低温测试温箱
这类产品根据使用场景分为研发用和生产用两类。研发用的话,可以采用SerialCable RM5,可以提供0~75度的温度测试范围;对于生产用,一般根据用户的需求进行定制,一般采用通用温箱架构,需要保证Gen5信号的稳定性和设备的经济型。
针对上述的各类产品的介绍,感兴趣的朋友可以到下面的百度网盘下载PCIe Gen5测试工具白皮书8.0(https://pan.baidu.com/s/1FSc8LBTKM3aGr3FZ6nvhrQ?pwd=xcb3)。本文的重点是介绍如何测试PCIe Gen5 M.2 SSD的L1.2低功耗,测试连接图请参考下面的SanBlaze + SerialTek L1.2连接示意图360度VR照片(https://www.720yun.com/t/77vk6mdw7dl )。
L1.2低功耗测试介绍
SANBlaze SBExpress 和Certified by SANBlaze测试方法通过提供创建复杂测试套件、验证规范合规性、数据完整性、电源和reset测试以及 MI 合规性的简单方法,大大简化了 PCIe NVMe 设备的验证。
通过SANBlaze 认证测试套件的 10.5 版本,SANBlaze 推出了一套测试,旨在验证 NVMe 设备在超低功耗子状态 L1.1 和 L1.2 下的运行。
L1.x 子状态测试对旨在用于平板电脑和笔记本电脑等电池供电设备的NVMe SSD的生产商提出了独特但至关重要的挑战。这些设备将极大地受益于新的电源子状态(power sub-state),这些子状态以少量 PCIe 延迟换取尽可能低的功耗。
与 L1.x 子状态的根本区别是使用带外信号来 “唤醒设备”。使用带外信号允许设备通过完全关闭其收发器并仅监控CLKREQ# 带外信号的电平来实现接近零功耗的状态。
主要 PCIe 电源状态(Power States)
可以在以下 PCI‑SIG 文档https://pcisig.com/making‑most‑pcie‑low‑power‑features中找到 PCIe 电源状态的全面概述,特别是L1.1 和 L1.2 子状态由 PCI‑SIG 营销工作组联席主席 Scott Knowlton 撰写,此处引用。
主要的 PCIe 电源状态是:
L0 – 正常运行的链路
L1 – 没有数据传输的链路状态,因此 PCIe 收发器逻辑的关键部分可以关闭
L2 – 与 L3 相同的链路状态,但其中电源尚未(尚未)被移除
L3 – 设备关机时
L0s 一种链路状态,包括数据可以在一个方向上传输,可能在另一个方向上不传输数据,因此链路上的两个设备可以各自独立地空闲其发送端(transmitter)
定义 L1.1 和 L1.2 子状态
随着 PCIe 速度和通道密度的增加,仅仅保持 PCIe 通道处于活动状态就会消耗大功率,根据L1.2 power substate定义,进入低功耗时候将关闭收发器PCIe transceiver PHY链路,然后在需要的时候再重新打开。
为了解决这个难题,PCIe NVMe 定义了带外信号“CLKREQ#”,其最简单的定义是从主机到端点设备的“唤醒”信号,用于重新打开 PHY 并重新开始 PCIe 链路通信。关闭 PHY 可以节省大量电量并允许PCIe endpoint节点在空闲模式下几乎不消耗功率,这对于电池供电的设备如笔记本电脑来说是一个显著的改进。
Scott Knowlton 的论文描述了 L1.x 子状态的好处如下,为了完整性,这里引用上述提及的规范中的文本。
“L1 子状态背后的基本思想是使用 PCIe 收发器内部的高速逻辑以外的东西来唤醒设备。目标是在活动状态下实现接近零的功耗。
这是通过向现有 PCIe 引脚 (CLKREQ#) 添加额外功能以提供非常简单的信号协议来实现的。这允许 PCIe 收发器关闭其高速电路并依靠该信号再次唤醒它们。事实上,这定义了两个新的power substate子状态:L1.1 和 L1.2, 分别提供了它们自己的功率与退出延迟权衡选择。
L1.1 和 L1.2 都允许 PCIe 收发器关闭其 PLL 及其接收器和发射器,而 L1.2 甚至允许关闭common mode keeper circuits。
结果是非常显著的。高效的电路设计和现代硅工艺意味着典型的 PCI Express 4.0 x4 PHY(4 个收发器加上用于四个通道的相关数字逻辑)在 L0 中以全 16GT/s 数据速率运行时消耗的功率在 400‑500mW 范围内。
使用 L1.1,相同 PHY 的功耗降低了大约 20 倍,仅消耗 20‑30mW。接受稍长的 L1.2 退出延迟可使功耗再降低 10倍至仅 2‑3mW。
下图显示了与使用 L1 子状态相比,现有 L1 状态可用的低功耗解决方案。预计多通道链路的节能规模呈线性增长, 并且实施 L1 子状态功能会在 L1 退出延迟增加时降低功耗。实施 L1 子状态是降低使用 PCIe 的移动设计功耗的关键。”
图 1:L1.x 状态图和子状态定义
控制 CLKREQ#
如上一节所述,NVMe U.2、U.3、EDSFF 和 M.2 连接器上可用的引脚 CLKREQ# 已被修改,以向处于电源状态 L1.1 和L1 的M.2 SSD固态盘提供“唤醒”信号.2 如图1所示。
为了验证 L1、L1.1 和 L1.2 低功耗子状态的正确操作,用户必须能够监视和控制 CLKREQ# 信号。这可以使用 SANBlaze PCIe Gen5 NVMe 测试系统来实现(V10.5 软件版本)。
图 2:上游端口启动退出的 L1.1 波形
图 3:下游端口启动退出的 L1.1 波形
CLKREQ# 信号
CLKREQ# 在被测设备处于 L0(全功率)状态时被Assert拉低,并且可以由 PCIe 链路上的上游或下游设备Assert,以将设备从 L1.1 或 L1.2 恢复到 L0.Active。
CLKREQ# L1.1 L1.2 测试模式
SANBlaze 支持在 SBExpress‑RM5(Rack Mounted PCIe Gen5机架式测试系统) 和SBExpress‑DT5 (Desk Top PCIe Gen5桌面式测试系统)NVMe SSD测试系统上进L1.1 和 L1.2 测试。目前内置脚本可与SANBlaze 硬件一起使用,其操作如下所述。
根据被测设备在 SBExpress‑RM5 系统中的物理位置,测试将以两种模式之一运行。脚本将自动确定系统配置,并根据系统配置和版本运行两种测试模式之一。
两种操作模式各有优势,建议在两种模式中的每一种模式下测试待测的Gen4/5 M.2 SSD,如下所述。
L1.1和L1.2 子状态测试脚本
以下脚本在 SANBlaze V10.5 软件包中可用,可从 SANBlaze 获得。
所有脚本都是第一个脚本 PM_L1_Substate_Verify.sh 的变体,它使被测设备从 L0.Active 到 L1.Idle,再到 L1.1 和 L1.2。在每个级别,脚本通过检查 PCIe 总线链路状态和 CLKREQ# 信号的当前状态来测试被测设备的预期电源状态转换。
变化如下:
CLKREQ#模式定义
目前定义了两种测试模式将脚本运行在SANBlaze SBExpress‑RM5 硬件系统上,所有 SBExpress‑RM5 系统的所有插槽都能够运行模式 1。
模式 1 ‑ SANBlaze“riser”控制 CLKREQ#
模式 2 ‑ CLKREQ# 信号由上游 PCIe 设备控制
模式 2 测试需要自定义固件,该固件image可现场升级并可由SANBlaze 根据需求提供。
进模式 1 CLKREQ# 测试
在第一种操作模式下,SANBlaze 脚本通过手动控制 CLKREQ# 来控制进入和退出 L1.x 子状态。这种操作模式将验证子状态,并将以下述方式在 SBExpress‑RM5 测试系统的所有 16 个插槽中操作。
选择“测试管器”测试
低功耗子状态测试脚本需要手动选择,它们也将包含在Certified by SANBlaze 测试报告中。
首先,从SanBlaze WebGUI左侧菜单中选择 SBExpress 管理器页面:
然后选择页面底部附近的“ShowTestManager”按钮:
然后选择右边的“PM_L1_Substate_Verify.sh”脚本:
此时,可以选择将测试分配给所有设备,设置“通过时间”或“通过次数”。通过时间将用作每个子状态转换之间的停留时间,并且 脚本将在最终测试“通过”之前运行的通过次数。
为简单起见,我们将传递计数保留为 1,并让脚本设置停留时间。
选择“添加测试”按钮。测试将添加到所选设备。
你的系统现在将准备在所选设备上运行低功耗子状态测试,并且页面的上部应将测试显示为“空闲”,如下所示:
选择“开始”将运行测试,将被测设备置于 L0.Active 状态,然后进入上述每个 L1.x 子状态。
监控 NVMe 边带信号
为了演示模式 1 测试,我们正在使用 SerialTek Kodiak Gen5 PCIe/NMVe 协议分析仪监控链路统计数据和边带信号 PERST0#、CLKREQ#、PRSNT# 和 DUALPORTEN#。
正如trace所见,当被测设备De-assert CLKREQ# 并关闭 PCIe “Phys”时,你将看到系统移至“Training”。这是模式 1 测试的预期行为。
当系统Assert CLKREQ# 时,被测设备将重新训练并在 PCIe 上变为活动状态。
该脚本将监控 CLKREQ# 和 PCIe 链路的状态,并测试每个转换的预期行为。
测试结束时,设备将获得“通过、失败或警告”状态。例如,如果设备不支持它声称支持的低功耗状态,则可以使用警告。
图 4:SerialTek Kodiak PCIe Gen5协议分析仪结果
设置功能 NVMe 支持
在测试过程中,“GetFeatures”和“SetFeatures”命令的执行方式如下。
首先发出“GetFeatures”命令,并从设备读取支持的电源状态数 (NPSS - Number of Power States Supported) 值。
使用 SetFeatures 将生成的 NPSS 值发送到设备,以启用尽可能低的功耗状态。一旦以这种方式选择了最低功耗状态,设备就有望成功进入和退出每个低功耗状态。
模式 1 测试结果
在模式 1 CLKREQ# 测试中,M.2 SSD固态盘应正确响应 GetFeatures 请求,并接受 SetFeatures 命令以选择最低功耗状态。预计该M.2 SSD固态盘将按以下方式运行;否则,M.2 SSD固态盘将无法通过测试。
1. M.2 SSD固态盘以全功率模式 L0.Active 启动
2. M.2 SSD固态盘响应 GetFeatures 命令
3. M.2 SSD固态盘接受 SetFeatures 命令以选择最低功率状态
4. 脚本使用 ASPMControl 指示M.2 SSD固态盘进入 L1.0 状态
5. 脚本使用L1PMControl 启用 L1.1 状态
6. 脚本检查M.2 SSD固态盘是否置低 CLKREQ#
7. 脚本检查 PCIe 链路是否移动到“轮询”
8. 脚本Assert CLKREQ# 并验证M.2 SSD固态盘返回到 L0.Active 状态 9. 对 L1.2 状态重复步骤 4 ‑ 8
10. M.2 SSD固态盘返回到 L0.Active 并且默认值恢复到 SetFeatures
进行模式 2 CLKREQ# 测试
在第二种操作模式下,SANBlaze riser 允许被测设备的 PCIe 上游控制 CLKREQ#。按照上述模式 1 测试的步骤进行测试。
该脚本将确定模式 2 测试是否在指定的插槽上可用,然后并将自动执行模式 2 测试。
模式 2 测试要求
要运行模式 2 测试(主机控制 CLKREQ#),SBExpress‑RM5 系统必须配置如下:
如果模式 2 不可用,该脚本将审核系统并运行模式 1。
Mode2 CLKREQ# 测试的执行
在模式 2 CLKREQ# 测试中,M.2 SSD固态盘应正确响应 GetFeatures 请求,并接受 SetFeatures 命令以选择最低功率状态。预计该M.2 SSD固态盘将按以下方式运行;否则,M.2 SSD固态盘将无法通过测试。
1. M.2 SSD固态盘以全功率模式 L0.Active 启动
2. M.2 SSD固态盘响应GetFeatures 命令
3. M.2 SSD固态盘接受 SetFeatures 命令以选择最低功率状态
4. 脚本使用 ASPMControl 指示M.2 SSD固态盘进入 L1.0 状态
5. 脚本启用 L1。1 state using L1PMControl
6. 脚本检查M.2 SSD固态盘和主机是否都De-assert CLKREQ#
7. 脚本检查 PCIe 链路是否移动到“L1.Idle”
8. 脚本向M.2 SSD固态盘发出 IO 并验证主机Assert CLKREQ#
9. 脚本期望 IO 成功
10. 为 L1.2 状态重复步骤 4 ‑ 8
11. M.2 SSD固态盘返回到 L0.Active,默认值为恢复到 SetFeatures
SerialTek Kodiak PCIe Gen5协议分析仪抓取的trace将显示处于 L1.Idle 的M.2 SSD固态盘,并验证主机是否正在Assert CLKREQ# 以响应 IO 请求,如下所示。
图 5:Kodiak PCIe 分析仪跟踪验证主机正在Assert CLKREQ#
解释和发布测试结果
子状态测试的成功完成将显示在 SBExpress 页面上,如下所示:
选择测试的链接名称,在本例中为 PM_L1_Substate_Verify.sh,将显示测试执行的详细日志。
完成后,系统将生成一份测试报告,可在此处的 SBExpress 页面上找到:
选择名称,然后“View”将显示测试报告,然后可以导出或打印该报告,其中包含结果摘要或完整的测试日志。
在 CLKREQ# 测试的幕后
使用 SerialTek PCIe Gen5协议分析仪监控测试过程可以让你看到sideband边带和PCIe数据路径信号上实际发生的情况,但运行子状态测试不需要分析仪。
从 CLI 启动子状态
除了提供的脚本之外,还可以从 SANBlaze 系统命令行界面 (CLI) 初始化和观察子状态转换。
使用 sb_sdb 检查链路状态
sb_sdb 是一种通过串行总线与 PCIe 交换机通信的工具。它可用于查询交换机的链路状态。例如,位于 ‑d 0(测试设备左侧的第一个插槽)的设备的当前链路状态为 L0.Active:
在本例中,我们将使用 sb_sdb 来监控链接状态,通过电源子状态对M.2 SSD固态盘进行分分步测试。
使用 SetFeatures 启用最低功耗状态
首先使用 Getfeature 和 Setfeature 功能启用设备可以支持的最低功耗状态。目标编号为 100 + 插槽编号,因此插槽 0 中的M.2 SSD固态盘为 100。
使用插槽 0 的M.2 SSD固态盘作为示例 = Target 100 = /iport0/target100
接下来,找到支持的电源状态数并启用最低电源状态。下面的命令将返回支持的电源状态数:
就电源特性而言,最高功率状态首先出现,因此使用上面命令中的数字将启用最低功率状态。使用 NPSS 编号使用上面的 4 为 ‑d 数据发送“SetFeatures”命令,如下所示:
现在已经使用 SetFeatures 告诉M.2 SSD固态盘希望它进入的最低功率状态。它仍将处于 L0.Active 中,如下所示:
关闭系统看门狗(system watchdog)
SBExpress 系统有一个“看门狗”,除非禁用,否则每秒轮询一次。此看门狗将使M.2 SSD固态盘保持活动状态,因此为了测试目的,将其关闭。
关闭M.2 SSD固态盘的 SMBus
SBExpress 系统会从 M.2 M.2 SSD固态盘的“转接卡”适配器上的 SMBus 读取数据。SMBus 活动将使M.2 SSD固态盘保持活动状态,因此也将其关闭。
使用 ASPM 启用低功耗状态
发送此 ASPM 命令以启用 L1.0
你将在 L1.Idle 中看到M.2 SSD固态盘(此时为 L1.0)
这样你可以看到SSD不在 L1.x 中,因为 clkreq_l 仍然显示asserted:
启用 L1.1 或 L1.2
现在使用此命令启用 L1 子状态(8 = L1.1,4 = L1.2)
在这一点上,M.2 SSD固态盘将移动到 L1.2 子状态,并将De-assert CLKREQ#,如下面的 SerialTek Kodiak PCIe Gen5 Analyzer 边带跟踪所示:
图 6:M.2 SSD固态盘置低 CLKREQ#,如 Kodiak 分析仪跟踪所示
你还可以使用以下命令验证 CLKREQ# 现在是否已禁用:
如上所示,CLKREQ# 现在无效 (0x01)。
启动M.2 SSD固态盘的 IO,或Assert CLKREQ# 将使M.2 SSD固态盘重新联机,例如通过重新启动看门狗:
图 7:启动M.2 SSD固态盘 IO 或Assert CLKREQ# 使M.2 SSD固态盘重新联机
被测设备的行为会有所不同,具体取决于主机或 SBExpress 系统是否控制 CLKREQ#;相对于上游端口,M.2 SSD固态盘将保持在 L1,或者将根据插槽号 (0 ‑ 7) 或 (8 ‑ 15)转到Polling状态。
你可以通过清除上述设置手动将M.2 SSD固态盘恢复到全功率状态:
图 8:清除设置以手动将M.2 SSD固态盘恢复到全功率状态
CLI 命令的附加功能
在测试电源状态时,这些 CLI 程序特别有用:
下面是一些对电源状态测试有用的示例:
sb_i2c2 命令示例
Assert PERST到插槽 0 上的设备
De-assert PERST
关闭插槽 0 上的设备
启用电源
读写 CLKREQ_L
请记住,可能有多个M.2 SSD盘驱动 CLKREQ_L,并且因为该信号是串接到一起的,或任何Assert它的M.2 SSD固态盘都会保持它Assert,而不管其他设备。SANBlaze 脚本首先使用以下命令在所选 Riser 和 Adapter 上De-assert CLKREQ:
当进入 L1 子状态时,被测设备将置低 CLKREQ#
在模式 2 ‑ 主机M.2 SSD固态盘 CLKREQ# 中,当主机向M.2 SSD固态盘发出 I/O 时,主机将自动Assert CLKREQ。
在模式 1 中 ‑ SANBlaze 转接卡或适配器驱动 CLKREQ# 以将M.2 SSD固态盘恢复到 L0.Active 状态。
结论
SANBlaze 提供了一种测试低功耗状态 L1.1 和 L1.2 的简单方法,并提供了自动化脚本来验证支持 L1 子状态的 NVMe M.2 SSD固态盘上的电源状态。
SanBlaze提供的两种方法来验证被测设备是否达到所需状态。
q模式 1:SANBlaze riser 通过 SANBlaze 脚本或客户脚本控制CLKREQ# 转换。
q模式 2:基于主机的 CLKREQ# 控制将根据对设备的数据访问自动Assert/De-assert CLKREQ#。
自动化测试可以添加到现有的测试套件中,并包含在被测设备的最终报告中。
可以使用带有 Gen5 M.2 interposer的 SerialTek PCIe Gen5协议分析仪进行测试,以实时监控 CLKREQ# 信号和链路状态,或者可以从系统 CLI 读取这些状态。