PCIe M.2 技术
PCIe M.2 技术文档
1. 硬件物理层与接口规范
1.1 M.2 物理规格
M.2(原称 Next Generation Form Factor, NGFF)是一种紧凑型扩展接口标准,用于替代 mSATA 和 mini-PCIe。其命名方式为 WWLL,其中:
- WW = 宽度(固定为 22 mm)
- LL = 长度(单位:mm)
常见尺寸:
| 尺寸代号 | 长度(mm) | 典型用途 |
|---|---|---|
| 2230 | 30 | Wi-Fi、蓝牙模块 |
| 2242 | 42 | 轻量级 SSD、嵌入式存储 |
| 2260 | 60 | 中端 NVMe SSD |
| 2280 | 80 | 主流消费级/企业级 NVMe SSD |
| 22110 | 110 | 高容量企业级 SSD(双面 NAND) |
注:2280 是目前桌面与笔记本最广泛采用的规格。
1.2 防呆键位(Keying)
M.2 插槽通过缺口位置(Key ID)定义支持的协议和电气接口:
| Key ID | 位置(引脚) | 支持协议 | PCIe 通道数 | 典型设备 |
|---|---|---|---|---|
| B Key | Pin 12–19 | SATA、PCIe ×2、USB 2.0/3.0、Audio | ≤ 2 lanes | SATA SSD、低端 NVMe、网卡 |
| M Key | Pin 59–66 | PCIe ×4、SATA(部分) | ≤ 4 lanes | 高性能 NVMe SSD |
| B+M Key | 同时具备 B 与 M 缺口 | 兼容 B 或 M 插槽 | ×2(B)或 ×4(M) | 通用型 NVMe SSD(如 Samsung 970 EVO) |
⚠️ 关键区分:
- M.2 是物理接口标准(定义尺寸、引脚、供电)
- NVMe 是逻辑协议(运行在 PCIe 之上的存储协议)
- 一块 M.2 SSD 可能使用 SATA 协议(走 AHCI)或 NVMe 协议(走 PCIe),二者不可混用。
1.3 电气特性
- 供电电压:+3.3V(主电源),部分支持 +1.8V 辅助电源
- 最大功耗:通常 ≤ 8W(高性能 SSD 可达 10W+,需主板供电支持)
- 信号完整性:
- PCIe 通道需严格阻抗控制(差分 85–100 Ω)
- 高速信号(>8 GT/s)对 PCB 走线长度、过孔、参考平面敏感
- 热设计:
- 高性能 NVMe(如 PCIe 4.0 ×4)在持续写入时温度可达 70–85°C
- 主板常配备 M.2 散热马甲(Heatsink),部分支持热节流(Thermal Throttling)
1.4 与传统接口对比
| 接口 | 带宽(理论) | 协议 | 尺寸 | 热插拔 | 典型用途 |
|---|---|---|---|---|---|
| M.2 (PCIe ×4) | 4 GB/s (3.0) / 8 GB/s (4.0) | NVMe / SATA | 超紧凑 | 否(通常) | SSD、Wi-Fi |
| mSATA | 0.6 GB/s | AHCI (SATA) | 类似 M.2 2242 | 否 | 老旧 SSD |
| PCIe x4 插槽 | 同 M.2 | 任意 PCIe | 大型 | 是 | 显卡、网卡 |
| SATA III | 0.6 GB/s | AHCI | 线缆连接 | 是 | 2.5" SSD/HDD |
M.2尺寸命名
下表列出了PCI Express M.2规范5.1版中有关M.2命名方式的详细信息
NOTES:
- 仅在双插槽规格时使用。
- 高度尺寸中包含标签。
- 该尺寸为11.5毫米,但在类型命名中写作11(例如,BGA类型1113)。
- 对于BGA SSD,最大高度以锡球压缩后的高度为准,无论BGA直接安装在平台上还是安装在模块板上都适用。
- 采用连接器设计时,允许有绝缘标签。
- Key G仅供客户使用,带有该钥位的产品不属于M.2标准,使用风险由客户自行承担。
- 仅在需指定顶部表面为平面的情况下使用。
- 仅当扩展卡的单针脚电流需求超过0.5安(正常功率额定值)和/或卡片外形更改为M.2-1A类型时使用。
- M.2-1A仅支持22毫米和30毫米宽度。
2. 协议栈与传输标准
2.1 M.2 支持的协议
M.2 本身不规定协议,仅提供物理连接。通过 Key 位选择协议:
- SATA 模式:使用 AHCI 驱动,性能受限于 SATA III(~600 MB/s)
- PCIe 模式:支持 NVMe(主流)或其他 PCIe Endpoint(如网卡、GPU)
✅ 当前 >95% 高性能 M.2 SSD 采用 PCIe + NVMe 组合。
2.2 PCIe 版本与带宽
| PCIe 版本 | 单通道带宽(单向) | ×4 总带宽(双向) | 实际吞吐(NVMe) |
|---|---|---|---|
| PCIe 3.0 | 985 MB/s | ~3.94 GB/s | ~3.5 GB/s |
| PCIe 4.0 | 1.97 GB/s | ~7.88 GB/s | ~7.0 GB/s |
| PCIe 5.0 | 3.94 GB/s | ~15.75 GB/s | ~14 GB/s |
📌 实际吞吐受 NAND 速度、主控、队列深度限制,通常低于理论值。
2.3 NVMe 协议架构
NVMe 专为 PCIe SSD 设计,核心优势在于 高并行性 与 低延迟。
核心机制:
- Submission Queue (SQ):主机向设备提交 I/O 命令
- Completion Queue (CQ):设备返回完成状态
- 多队列(Multi-Queue):
- 每个 CPU 核可绑定独立 I/O 队列(减少锁竞争)
- 队列深度可达 64K 条目(AHCI 仅 32)
- 命令类型:
- Admin Commands:创建/删除队列、固件更新、SMART
- I/O Commands:Read/Write/Flush/Dataset Management
与 AHCI 对比优势:
| 特性 | AHCI (SATA) | NVMe (PCIe) |
|---|---|---|
| 队列深度 | 1(32 条目) | 多队列(64K 条目) |
| 中断延迟 | 高(MSI-X 有限) | 极低(MSI-X + 多向量) |
| CPU 利用率 | 高 | 低(高效批处理) |
| 并行性 | 串行命令处理 | 真正并行 I/O |
2.4 其他 M.2 应用
- Wi-Fi 6/6E/7 模块:使用 PCIe + USB 协议(Key E,非本节重点)
- WWAN(4G/5G):Key B
- 蓝牙、SSD 缓存模块:均通过 M.2 实现小型化
3. 典型应用场景与产品生态
3.1 主流产品
- 消费级:Samsung 980 Pro(PCIe 4.0)、WD Black SN850X、Crucial T700(PCIe 5.0)
- 企业级:Intel P5510、Micron 9400、Kioxia CM7
- 嵌入式:Solidigm D5-P5336(30.72TB,22110)
3.2 部署差异
| 平台 | 特点 |
|---|---|
| 笔记本 | 通常 1× M.2(2280),供电/散热受限,多用 PCIe 3.0/4.0 |
| 台式机 | 1–3× M.2 插槽,支持 PCIe 4.0/5.0,常带散热片 |
| 服务器 | 多 M.2 或 U.2 + M.2 混合,支持热插拔、PLP(断电保护) |
| 嵌入式 | 2242/2230 尺寸,宽温设计,低功耗模式 |
3.3 高级用例
- RAID 0/1:通过主板 BIOS 或 Linux
mdadm软件 RAID - 缓存加速:Intel RST、Linux
bcache/dm-cache - 持久内存(PMEM):部分 Optane M.2 设备支持,通过
ndctl管理 - M.2 扩展卡:PCIe x4 转 1/2/4× M.2,用于无原生 M.2 插槽的台式机
4. Linux 内核支持与驱动架构
4.1 驱动模型
Linux NVMe 驱动位于:
drivers/nvme/
├── host/ # 主机端驱动
│ ├── pci.c # PCIe 探测与初始化(核心)
│ ├── core.c # 通用 NVMe 逻辑
│ └── ...
├── target/ # NVMe-oF(网络存储)
└── ...
关键内核配置选项(/boot/config-*):
CONFIG_NVME_CORE=y # NVMe 核心框架
CONFIG_NVME_PCI=y # PCIe NVMe 设备支持
CONFIG_NVME_FABRICS=y # NVMe over Fabrics(如 TCP/RDMA)
✅ 版本要求:
- 基础支持:Linux Kernel ≥ 3.3(实验性)
- 完整生产支持:≥ 4.4(多队列、blk-mq 集成)
- PCIe 5.0:≥ 6.0+(需硬件配合)
4.2 设备探测流程
- PCIe Enumeration:BIOS/UEFI 或内核扫描 PCIe 总线
- 驱动匹配:
nvme_pci_driver通过 Vendor/Device ID 绑定 - 初始化:
- 读取 CAP(Controller Capabilities)寄存器
- 分配 SQ/CQ
- 创建块设备
nvme0n1
- 块设备注册:通过
nvme_ns_setup_streams()等注册到/dev/
4.3 块设备接口
- 命名规则:
- Controller:
/dev/nvme0(管理接口) - Namespace:
/dev/nvme0n1(主存储空间) - Partitions:
/dev/nvme0n1p1,/dev/nvme0n1p2…
- Controller:
4.4 blk-mq 与多队列
- Linux 使用 blk-mq(Block Multi-Queue) 框架将 NVMe 队列映射到 CPU
- 每个硬件队列 ↔ 一个软件提交队列(
struct blk_mq_hw_ctx) - 启用方式:默认开启(
nvme_core.mq_mode=1)
4.5 电源管理与热插拔
- ASPM(Active State Power Management):
- 通过
pcie_aspm=force内核参数启用 - 可降低链路功耗(L0s/L1 状态)
- 通过
- D3cold:设备完全断电(需主板支持)
- 热插拔:
- 需主板 BIOS 启用 PCIe Hotplug
- Linux 通过
echo 1 > /sys/bus/pci/rescan触发扫描
4.6 故障排查(dmesg 示例)
# 设备未识别
nvme 0000:01:00.0: Unable to read CAP register
# 超时
nvme nvme0: I/O 12345 timeout
# 电源问题
nvme nvme0: Device not ready; aborting reset
# 固件错误
nvme nvme0: fatal error: DNR bit set
5. Linux 工具链与运维实践
5.1 设备识别
lspci -v | grep -A 10 -i nvme
lsblk # 查看块设备
ls -l /dev/disk/by-id/ # 持久化命名(推荐用于 fstab)
持久化 ID 示例:
/dev/disk/by-id/nvme-SAMSUNG_MZVL21T0HCLR-00B00_S699NF0R234567
5.2 性能测试
# 使用 fio 测试随机读写
fio --name=randread --ioengine=libaio --rw=randread --bs=4k \
--size=1G --numjobs=4 --direct=1 --runtime=60 --group_reporting
# 使用 nvme-cli 查看健康状态
nvme smart-log /dev/nvme0
nvme id-ctrl /dev/nvme0 # 控制器信息
nvme id-ns /dev/nvme0n1 # 命名空间信息
5.3 固件管理
nvme fw-download /dev/nvme0 --fw=file.bin
nvme fw-activate /dev/nvme0 --action=2 --slot=1 # 激活并下次启动生效
5.4 分区与文件系统
fdisk /dev/nvme0n1
mkfs.ext4 /dev/nvme0n1p1
mount /dev/disk/by-id/nvme-... /mnt/ssd
5.5 监控工具
iostat -x 1 # 实时 I/O 统计
iotop -o # 按进程 I/O 排序
smartctl -d nvme -a /dev/nvme0 # SMART 信息(需 smartmontools ≥ 7.0)
5.6 内核调优
- 队列深度(默认通常足够):
echo 1024 > /sys/block/nvme0n1/queue/nr_requests - I/O 调度器(NVMe 推荐 mq-deadline 或 none):
echo mq-deadline > /sys/block/nvme0n1/queue/scheduler - 中断亲和性(多核优化):
# 查看 IRQ cat /proc/interrupts | grep nvme # 绑定到 CPU 0-3 echo 0f > /proc/irq/123/smp_affinity
附录:PCIe 带宽对比表
| PCIe 版本 | 编码方式 | 单 Lane 速率 | ×4 双向带宽 | 实际 NVMe 吞吐(典型) |
|---|---|---|---|---|
| PCIe 3.0 | 128b/130b | 8 GT/s | ~31.5 Gb/s (3.94 GB/s) | ≤ 3.5 GB/s |
| PCIe 4.0 | 128b/130b | 16 GT/s | ~63 Gb/s (7.88 GB/s) | ≤ 7.0 GB/s |
| PCIe 5.0 | 128b/130b | 32 GT/s | ~126 Gb/s (15.75 GB/s) | ≤ 14 GB/s |
注:NVMe 协议开销、NAND 速度、主控效率导致实际吞吐低于理论值。