首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Telemetry标准日志接口如何提升运维效率?

企业级 SSD 在存储系统的部署运维过程中,有时会需要收集日志信息做进一步问题调试分析,传统的做法是一些 SSD 厂商会自定义命令和工具进行收集,但不同 SSD 厂商工具和命令格式不尽相同,这就为存储系统的运维带来很高的运维成本。有些存储系统对 SSD 要求十分严格,不允许发一些自定义的命令,也会给日志收集工作带来很大的挑战。因此,Telemetry 标准化日志收集接口应运而生。

Telemetry 是什么?

Telemetry 是 NVM Express Base Specification 定义的错误日志收集标准接口,是 NVMe1.3 新增功能。Telemetry 通过统一的标准接口来收集 SSD 厂商自定义数据日志,用户下发一条标准命令就可以获取需要的日志,然后将收集到的日志发给 SSD 厂商做进一步日志分析,降低为了收集日志需要将 SSD 从部署系统移出的可能性,有效减少现场 debug 时间,提升用户运维效率。Telemetry 典型应用场景如现场失效分类,周期性健康监控,问题定位等,快速定位问题并解析,进一步提高产品可靠性。

Telemetry 日志收集方式:Host/Controller-Initiated

Telemetry 功能定义了收集 SSD 厂商自定义日志的机制,Telemetry 数据采集可以是 Host-Initiated 和 Controller-Initiated,前者是 host 发起获取 SSD 一些关键信息,后者是 SSD 认为重要的数据,由 SSD 厂商自定义。

Host 发起的收集数据记录在 Telemetry Host-Initiated Log,Controller 发起的收集数据记录在 Telemetry Controller-Initiated Log。

  • Host-Initated Telemetry Log(Log Page ID=07),只存储于 DDR,不保存 NAND
  • Controller-Initiated Telemetry Log (Log Page ID=08),存储于 NAND 中

Telemetry 日志解析

每个 Telemetry 数据日志由一组单独的 Telemetry 数据块(Block)组成,每个 Telemetry 数据块大小为 512 字节,Telemetry 数据以 Telemetry 数据块为单位返回(必须是 512Bytes 的整数倍)。Block 0 是日志 Header 部分。NVMe Spec 定义了标准 Telemetry Header 信息(Byte#0~511,Host-Initiated Telemetry 日志和 Controller-Initiated Telemetry 日志的数据结构类似,如下图为 Telemetry: Host-Initiated log 数据结构)。其中 384:511 Reason Identifier 这部分属于厂商自定义字段,不同方式触发的 Controller-Initiated 日志该部分结构可能存在差异。

Telemetry 日志数据块返回必须是 512Bytes 的整数倍:

每个 Telemetry 数据日志被划分为三个 Telemetry 数据区(即 Area 1、Area 2 和 Area 3,后者均包含前者)。

  • Data Area 1:第一阶段,确定存在问题,通过收集最小的数据集来确定问题与其他问题的区别。
  • Data Area 2:第二阶段,收集并分析更深入的中等量有效数据集,以确定问题的来源。
  • Data Area 3:第三阶段,可用于收集最大和最完整的数据集,以诊断问题。

所有 Telemetry 数据区从 Telemetry Area1 开始,通过 Byte 383:Telemetry Controller-Initiated Data Generation Number 判断数据是否已经读完。

以下是 NVMe Spec 中给出的 Host-Initiated Telemetry Log 实例,Controller-Initiated Telemetry log 类似。

  1. 当没有收集到 telemetry log 信息时
  • Telemetry Host-Initiated Data Area 1 Last Block = 0
  • Telemetry Host-Initiated Data Area 2 Last Block = 0
  • Telemetry Host-Initiated Data Area 3 Last Block = 0

2. 当 3 个 Area 都存在信息时(以下数字仅为示例,请以实际情况为准)

  • Telemetry Host-Initiated Data Area 1 Last Block = 65
  • Telemetry Host-Initiated Data Area 2 Last Block = 1000
  • Telemetry Host-Initiated Data Area 3 Last Block = 30000

3. 当只有 Area 2 存在信息时(以下数字仅为示例,请以实际情况为准)

  • Telemetry Host-Initiated Data Area 1 Last Block = 0
  • Telemetry Host-Initiated Data Area 2 Last Block = 1000
  • Telemetry Host-Initiated Data Area 3 Last Block = 1000

Host/Controller-Initiated Telemetry 触发条件差异

Host-Initiated 和 Controller-Initiated 的数据的准备、收集和提交等方面类似,主要的区别在于收集的触发方式,Controller-Initiated Telemetry Log 会在出现坏块、PCIe 超时等 SSD 厂商自定义场景下触发。

Telemetry 的操作流程一般为:

1) 主机在 Identify Controller data structure 中识别控制器对 Telemetry 日志的支持;

2) 主机准备一个区域,以便在需要时存储 Telemetry 数据;

3) 要接收 Controller-Initiated 的 Telemetry 数据可用的通知,主机使用异步事件配置功能启用 Telemetry 日志通知;

4) 如果主机决定收集 Host-Initiated 的 Telemetry 数据或控制器信号表明 Controller-Initiated 的 Telemetry 数据可用

  • a. 主机从 Host-Initiated 的日志或 Controller-Initiated 的日志中读取 Telemetry 数据区(Telemetry Data Area)的相应块。如果可能,主机应该收集 Telemetry 数据区 1、2 和 3。主机以 512 字节的 Telemetry 数据块单元读取日志。作为对 Controller-Initiated 的日志的最后一次读取的一部分,主机将异步保持事件 RAE(Retain Asynchronous Event)位清除为 0;
  • b. 如果是 Controller-Initiated 的日志,主机将重新读取日志页的头,并确保读取的 controller-initiated Data Generation Number 与读取的原始值匹配。如果这个值不匹配,则获取的数据不完整,需要重新继续读取;
  • c. 当所有 Telemetry 数据保存完毕后,应将数据转发给 SSD 厂商

NVMe-CLI 厂商自定义一键化收集

开源 CLI 工具支持 Telemetry log 收集,收集到的 telemetry 日志 Hearder 部分可以解析,数据日志内容都进行加密,需要返回 SSD 厂商进行解析,以 nvme-cli v1.12 为例:

示例 1:收集一条 host-initiated 的 telemetry-log。

代码语言:javascript
复制
# nvme telemetry-log /dev/nvme0 -o host_tel.log -g 1

复制代码

示例 2:收集一条 controller-initiated 的 telemetry-log(如需获取全部,需要执行多次)。

代码语言:javascript
复制
# nvme telemetry-log /dev/nvme0 -o controller_tel.log -c

复制代码

真实场景有可能存了多条 telemetry 日志,SSD 厂商如 Memblaze 基于 nvme-cli 提供自动化收集工具,可以一次性把所以 telemetry 日志全部收集。

OCP Spec 2.0 关于 Telemetry 延展

OCP(Open Compute Project) Datacenter NVMe® SSD Specification 是 Facebook 和 Microsoft 主导制定,来自 Hyperscale 业务商对 SSD 的需求定义,协议到 2021 年演进到 2.0 版本。

OCP 2.0 协议中新增基于 PCIe VDM 实现的 NVMe-MI 带外管理支持 Telemetry 日志收集,这也可能是国内业务厂商未来的潜在需求。

参考文献:

  • NVM ExpressTM Base Specification NVM Express Revision 1.4
  • OCP Datacenter NVMe® SSD Specification Version 2.0
  • 发表于:
  • 本文为 InfoQ 中文站特供稿件
  • 首发地址https://www.infoq.cn/article/cb484d1f7f7d2d7506eb39161
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券