外观
交互实验室
每个演示只改变一个机制的关键变量。先预测结果,再操作,最后用课程中的不变量解释结果。它们是浏览器内的教学模型,运行在你的设备上。
01 · 把虚拟地址拆开
按普通 4 KiB 页拆分:三个索引各占 9 位,页内偏移占 12 位。输入采用 xv6 低地址范围 0 ≤ VA < 2^38,观察跨页时哪些字段变化。
VPN20
VPN1145
VPN0325
页内偏移1656
这是地址拆分演示。实际翻译还需读取 PTE 并检查权限;2 MiB 大页在更高层结束遍历,页内偏移为 21 位。TLB 可缓存翻译结果。
02 · 观察缓存命中与冲突
直接映射缓存:4 组,每组 1 行,每行 16 字节,总容量 64 字节。0 和 64 映射到同一组。
组 0空
组 1空
组 2空
组 3空
点击「下一次访问」,观察相同索引上的冲突。
已访问 0 次 · 命中 0 · 未命中 0
已访问 0 次 · 命中 0 · 未命中 0
03 · 多数派决定能否选出 leader
节点 A 发起选举。点击其他节点,切换它与 A 是否连通;本轮所有连通节点都向日志足够新的 A 投票。
五节点集群需要至少 3 票。所有节点的日志同样新。
这是固定五成员、无并发候选者的选举模型。故障不会缩小多数派分母;真实 Raft 还检查任期、每任期一次投票与日志新旧,选举成功也不等于所有请求已经提交。
04 · 加更多核心,会快多少?
理想加速比 4.71×
相对单线程耗时 21.25%
相对单线程耗时 21.25%
Amdahl 模型假设工作量固定、可并行部分均匀分摊且没有通信与调度开销。实际加速比需要测量,甚至可能小于 1。
05 · 注意力能看见哪些 token?
我
12.2%
正在
33.1%
学习
54.7%
语言0.0%
模型0.0%
因果预测在位置 i 使用 0…i 的内容预测下一个 token。这里仅对固定分数做 mask 与 softmax,没有 Q/K/V 投影;温度用于展示权重变化,生成采样温度通常作用于词表 logits。
把观察带回源码
| 演示 | 建议做一次的观察 | 回到哪门课 |
|---|---|---|
| Sv39 | 比较 0xfff、0x1000 与 0x200000 | 操作系统的页表与大页 |
| 缓存 | 对比 0,4,8,12 与 0,64,0,64 | CSAPP的局部性与组索引 |
| Raft | 隔离 2 个节点,然后隔离 3 个节点 | 分布式系统的多数派 |
| Amdahl | 90% 可并行时把线程从 8 改成 64 | 并行性能模型 |
| 注意力 | 查询位置设为 0,然后关闭因果遮罩 | 语言模型的因果预测 |
模型的具体边界
Sv39 面板拆分普通 4KiB 页的地址字段,只接受 xv6 的低地址范围 0 ≤ VA < 2^38。完整 Sv39 还定义高位符号扩展地址;本面板不接受它们,也不读取页表。2MiB 大页的叶项出现在更高层,页内偏移会变成 21 位,因此面板显示的 VPN0 在该映射中属于页内偏移的一部分。
缓存面板以字节地址计算 offset = address % 16、set = floor(address/16) % 4、tag = floor(address/64)。它只有一个缓存层,不模拟写回、预取、共享一致性或访存耗时。第一次访问新块即使替换已有行,也仍可能属于强制未命中;反复访问映射到同一组的不同块,才清楚展示冲突导致的重复未命中。
选举面板把“与 A 连通”简化为“本轮给 A 一票”,包括 A 自己的一票。五个固定成员一直需要三票,失联不会改变分母。它不模拟其他候选者、日志落后或投票持久化;这些条件会在真实 Raft 中进一步限制谁能当选。
Amdahl 的百分比按单工作线程执行时间划分,假设问题规模固定、并行工作可完全均分且没有额外开销。可并行比例为 p<1 时,工作线程趋于无限的理想上限为 1/(1-p)。这不是实测性能预测,也不能用来解释随线程数一起扩大的问题规模。
因果注意力允许位置 i 看到 0…i,用于预测位置 i+1 的 token;看到当前位置本身不是泄漏。关闭遮罩在这种自回归训练任务中会暴露未来目标,而双向编码器可以有意使用无遮罩注意力。演示只计算固定分数的 softmax 权重,没有计算 Q/K/V 投影或加权后的输出向量。