《服务器测试百日学习计划——Day6:NVMe架构深挖,搞懂controller、namespace和NVMe为什么快》
大家好我是JACK本篇是服务器测试百日学习计划Day6。Day5 我们搞清楚了存储体系全景今天往下钻一层——深挖 NVMe 架构搞懂 NVMe 为什么快以及 controller、namespace 到底是什么。一、四个最容易混的词先把这四个词彻底分清楚这是理解 NVMe 的基础。NVMe协议。定义的是主机怎么和高速 SSD 通信。PCIe总线。NVMe 盘通过 PCIe 跟 CPU 通信。U.2 / M.2物理形态。不是协议不是总线。SSD存储介质类型。所以一句最标准的话是我们这台服务器的两块盘是U.2 形态的 NVMe SSD通过PCIe 总线接到 CPU。还有一个常见混淆点——M.2 不等于 NVMe形态可以走的协议U.2NVMe企业级标配M.2NVMe 或 SATA两种都可以Day5 里我们的 sda/sdb 就是 M.2 形态 SATA 协议不是 NVMe。二、实机 NVMe 识别nvme list 总览[rootbogon ~]# nvme listNode SN Model Namespace Usage Format FW Rev ------------ ---------------- ------------------ ---------- ------------------- ------------ ------- /dev/nvme0n1 D77446D401J852 DERAP44YGM03T2US13.20TB /3.20TB512B 0B D7Y05M1F /dev/nvme1n1 D77446D4017E52 DERAP44YGM03T2US13.20TB /3.20TB512B 0B D7Y05M1F重点关注这几列字段含义Node设备节点路径Model硬盘型号Namespace命名空间编号Usage已用/总容量Format扇区格式512BFW Rev固件版本lspci 确认 PCIe 层[rootbogon ~]# lspci | grep -i non81:00.0 Non-Volatile memory controller: DERA Storage Device151582:00.0 Non-Volatile memory controller: DERA Storage Device1515这一步的作用是把块设备层nvme0n1和 PCIe 设备层81:00.0对应起来建立完整的链路认知。三、controller 和 namespace 是什么这是 Day6 最核心的概念面试高频题。controller控制器可以理解为主机和盘之间负责协议处理的逻辑单元。lspci里看到的 NVMe 设备本质上就是控制器级别的 PCIe 设备。namespace命名空间控制器下面暴露出来的逻辑存储空间。/dev/nvme0n1这个设备名拆开来看nvme0第0个 NVMe 控制器n1该控制器下的第1个 namespace一个 controller 下面可以有一个或多个 namespace。我们这台机器每块盘是一个控制器 一个 namespace 的标准配置。记住这句话controller 是控制器namespace 是控制器下面暴露出来的逻辑盘空间。四、NVMe 为什么快面试经常问标准答法记住这四点1. 走 PCIe 总线SATA 受限于 SATA/AHCI 体系物理带宽上限低。NVMe 直接走 PCIe带宽上限高很多。2. 多队列NVMe 支持多提交队列 多完成队列天然支持高并发 IO。SATA/AHCI 是单队列模式并发能力差很多。3. 低延迟NVMe 是专门为闪存设计的协议软件栈更轻延迟更低不像 AHCI 是从机械硬盘时代沿用下来的。4. 链路够宽结合 Day4 学的 PCIe 知识我们这台服务器的 NVMe 跑在 PCIe Gen4 x4理论带宽约 8GB/s。所以完整的标准答法是NVMe 能跑到 7GB/s是因为它走 PCIe Gen4 x4 总线协议本身支持多队列软件栈延迟低带宽和并发能力都比 SATA 体系强很多。五、nvme-cli 查看控制器和健康状态nvme id-ctrl 看控制器信息[rootbogon ~]# nvme id-ctrl /dev/nvme0n1NVME Identify Controller: vid:0x1d78# 厂商IDssvid:0x1d78# 子系统厂商IDsn:D77446D401J852# 序列号唯一身份编号mn:DERAP44YGM03T2US# 型号fr:D7Y05M1F# 固件版本ver:0x20000# NVMe协议版本NVMe 2.0tnvmcap:3200631791616# 总容量3.2TBnn:1# 该控制器下的namespace数量为1...ps0:mp:18.00W# 最大功耗状态ps4:mp:10.00W# 最低功耗状态重点关注sn序列号、mn型号、fr固件版本、verNVMe协议版本、nnnamespace数量。nvme smart-log 看健康状态[rootbogon ~]# nvme smart-log /dev/nvme0n1Smart LogforNVME device:nvme0n1 namespace-id:ffffffff critical_warning:0# 严重警告0表示正常temperature:43C# 当前温度available_spare:100%# 备用块空间100%冗余充足available_spare_threshold:30%# 低于30%会触发告警percentage_used:0%# 寿命消耗0%盘很新data_units_read:2,423,907 data_units_written:2,331,036 host_read_commands:175,882,364 host_write_commands:170,152,224 power_on_hours:1,253# 累计使用1253小时unsafe_shutdowns:297# 非正常掉电次数media_errors:0# 介质错误0表示正常num_err_log_entries:0# 错误日志条目0表示正常Temperature Sensor1:54C Temperature Sensor2:43C Temperature Sensor3:43C重点关注字段字段说明本机状态critical_warning严重警告0正常temperature当前温度43℃正常available_spare备用块空间100%充足percentage_used寿命消耗0%盘很新power_on_hours累计使用时间1253小时media_errors介质错误0正常num_err_log_entries错误日志0正常实际测试中每次验收新盘先跑一遍nvme smart-log重点看critical_warning、media_errors、percentage_used三项任何一项异常都要记录并评估是否需要换盘。六、Python 自动检测 NVMe# nvme_check.pyimportsubprocess# 打印 NVMe 总览print( NVMe List )nvme_listsubprocess.run([nvme,list],capture_outputTrue,textTrue).stdoutprint(nvme_list)# 统计 NVMe 数量countnvme_list.count(/dev/nvme)print(NVMe count:,count)# 打印 PCIe 层 NVMe 设备print( PCIe NVMe )pcie_nvmesubprocess.run([bash,-lc,lspci | grep -i nvme],capture_outputTrue,textTrue).stdoutprint(pcie_nvme)python3 nvme_check.py脚本目标把 NVMe 的块设备层和 PCIe 设备层对应起来一键输出。总结概念类型说明NVMe协议定义主机与高速SSD通信方式PCIe总线NVMe 的物理传输通道U.2 / M.2形态物理接口形态不代表协议controller控制器PCIe 设备层负责协议处理namespace逻辑盘空间controller 下暴露的存储单元nvme0n1里的 n1NVMe 快的四个原因PCIe 带宽高、多队列并发、低延迟软件栈、Gen4 x4 链路宽。下一篇 Day7 深入 RAID 控制器与逻辑盘结合 storcli64 实测数据讲 RAID 配置与排查敬请期待欢迎关注JACK的服务器笔记我们下篇见
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2433011.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!