您如何读取 SPDK 内部 NVME 设备上的封装温度?

How do you read package temperature on NVME device inside of SPDK?

我们正在评估使用 SPDK 作为内部框架来构建带有 NVMe 设备的数据记录器。

磁盘和 SSD 设备具有 smartctl 接口,可以为您提供一段时间的封装温度。看起来 smartctl 现在已经足够智能,可以处理 NVMe 设备了。但是,一旦 SPDK "setup",支持 smartctl 的内核模块就消失了,不再在这些设备上运行。

我在规范中找到了对 "temperature" 阈值的引用,但我没有找到 "read the current device package temperature"。

Linux 下的 SPDK 看起来是一个不错的性能包,但如果它阻止获取底层硬件的基本健康信息,那么它就无法启动。

今天早上我头脑清醒,我想我会分享:

  • 在"examples/nvme"中,存在"identify",它提供了很多 通常从 "smartctl".
  • 获得的 "health" 信息
  • 如果您天真地尝试 运行 "identify" 与 "perf" 同时进行, 你会发现你可以 运行 一个或另一个,但不能同时抱怨 "claiming" 一台设备。
  • 如果你查看命令选项,你会发现 "shared memory ID", 通常是“-i ID”,表示多个进程共享的内存 ID 可以并发访问。您现在可以 运行 "perf -i ID ..." 然后 运行 "identify -i ID ..." 例如,观察包装上的温度 随着时间的推移而上升。
  • 如果您查看 "nvme/hello_world" 的代码,您会发现 spdk_env_opts 有一个字段 "shm_id"。这显然是从 这些其他示例的命令行上的上述“-i ID”选项。如果你 修复 "hello_world" 以设置 shm_id = -1(默认 - 无共享内存),然后 捕获和选项并将此字段更新为 ID 值,您将能够获得 "hello_world" 与 "perf" and/or "identify".
  • 一起工作
  • hello_world 可以用来制作更简单的温度传感器(使用 HEALTH 消息作为数据源),或者在更大的应用程序中包含健康感知。
  • 这个进程在涉及的进程中仍然有blivits。我还没想到这个 [还没有].