PCIe TLP 解析入门:抓包之后,怎么读懂一个数据包
PCIe 链路上跑的 AI 推理数据、模型权重、SSD 读写、网卡收包,拆到最底层都是一串 TLP(Transaction Layer Packet)。本文讲清一个 TLP 长什么样、字段怎么读、四类核心事务怎么区分,最后给出一个能跑通的解析器。
PCIe 链路上跑的 AI 推理数据、模型权重、SSD 读写、网卡收包,拆到最底层都是一串 TLP(Transaction Layer Packet)。本文讲清一个 TLP 长什么样、字段怎么读、四类核心事务怎么区分,最后给出一个能跑通的解析器。
接上一篇《ccAI 精读(一):为什么 GPU 跑 AI 需要保密?》:CPU 侧用 TVM 保护好了,但数据一上 PCIe 就是明文。ccAI 的答案是——在 CPU 和 xPU 之间的 PCIe 上插一个门卫,再在软件侧配一个翻译员,让老 GPU 也能机密计算。
本篇讲清四个组件怎么配合:Adaptor(兼容)、Packet Filter(决策)、Packet Handler(执行)、HRoT-Blade(信任),最后落到 §7 作者真做出来的原型。
论文:ccAI: A Compatible and Confidential System for AI Computing(MICRO 2025)
作者想让普通的、老的 GPU/NPU(统称 xPU)也能安全地跑 AI,同时尽量不改原来的软件和硬件。
这是 ccAI 论文精读系列 的第一篇,只回答两个问题:为什么 AI 计算需要保密?为什么 GPU 是其中的短板?
前三篇的语法与思想,最终都落在一个真实的模块上:VGA 文本模式的
vga_buffer.rs。这篇不贴全文,而是把它拆成九块来读——从颜色怎么压进一个字节,一直讲到
println! 怎么变成对显存的一次写。
看 VGA 或驱动代码时会碰到
#[repr(C)]、#[repr(transparent)]、#[derive(...)]
这样的方括号标签。它们叫属性(attribute),作用是告诉编译器下面这个东西按什么特殊规则处理。其中
repr 系列直接决定 struct
在内存里的排布——这是和硬件打交道的关键。
Rust 与 C 的分水岭在内存归谁管:C 靠程序员自觉,Rust
用一套编译期规则保证安全。这套规则的核心就是所有权、借用(&
/ &mut)与生命周期,而 OS
开发还要在此基础上接触裸指针与
unsafe。这篇把这条主线一次讲清。
学 Rust OS 时会密集碰到
struct、引用、裸指针、unsafe、生命周期这些概念。如果此前没有
Rust 基础,直接读 OS 代码会很吃力。这篇先用 C/C++
作对照,把你已经会的东西在 Rust 里怎么写过一遍,建立一张 Rust 地图。
内核启动后,屏幕上出现了
Hello, World!——在还没有文件系统、设备驱动和
std
的情况下,这靠的是往一块特殊内存(0xB8000)里写字符,由 VGA
硬件读取并显示出来。这篇讲的就是这块内存和 VGA 的工作方式。
编译出来的可执行文件里到底长什么样?它和程序运行时的内存(Stack、Heap、.bss……)又是什么关系?