diff --git a/study/arch/MESI/README.md b/study/arch/MESI/README.md
index ffdf8e4..a92152b 100644
--- a/study/arch/MESI/README.md
+++ b/study/arch/MESI/README.md
@@ -65,6 +65,7 @@ blogexcerpt: 虚拟化 & KVM 子系统
| 22 | [Spectre原理详解及分支毒化的实现](https://zhuanlan.zhihu.com/p/114680178) | NA |
| 23 | [Lecture 11: Memory Data Flow Technique](http://home.eng.iastate.edu/~zzhang/courses/cpre585_f03/slides/lecture11.pdf) | NA |
| 24 | [cpu 乱序执行与问题](https://blog.csdn.net/lizhihaoweiwei/article/details/50562732) | NA |
+| 25 | [store-queue VS store-buffer](https://stackoverflow.com/questions/24975540/what-is-the-difference-between-a-store-queue-and-a-store-buffer) | NA |
diff --git a/study/arch/topdown/README.md b/study/arch/topdown/README.md
index 843a0f4..d4933aa 100644
--- a/study/arch/topdown/README.md
+++ b/study/arch/topdown/README.md
@@ -155,9 +155,24 @@ blogexcerpt: 虚拟化 & KVM 子系统
## 3.3 Bad Speculation/投机错误
-------
+| 层级 | 名称 | 描述 | 公式 |
+|:---:|:----:|:---:|:---:|
+| Level 1 | Bad Speculation | 表示由于预测错误而浪费掉的 pipeline slots 的占比. 主要包括:
1. 触发了 Machine Clear 而浪费了 pipeline slots.
2. 分支预测错误(Branch Mispredict) 而浪费的 pipeline slots. | (INST_SPEC - INST_RETIRED) / (4 * CPU_CYCLES).
1. INST_SPEC: CPU 执行的指令的数目.
2. INST_RETIRED: CPU 执行的指令中正常退休的指令的数目. |
+| Level 2 | Branch Mispredict | 当 CPU 遇到分支指令的时候, 为避免 pipeline stalls, 会进行投机执行. CPU 对分支指令的跳转方向和跳转目的地址进行预测, 然后投机执行预测出的路径, 对预测的分支进行取指和执行, 所有处于流水线中的这些分支预测路径上的指令都其实处于推测(speculative)状态, 但是并不是进行提交. 然后在流水线的后续阶段, 比如分支指令实际执行时, 会对之前分支预测的结果进行校验, 一旦发现预测失败, 则必须丢弃这个预测错误的分支上所有的指令及其执行结果, 并对流水线各部件的状态进行恢复. 最终重新从正确的分支进行取指. 这必然造成流水线资源的浪费. | NA |
+| Level 3 | Indirect Branch | 间接跳转 | NA |
+| Level 3 | Push Branch | 函数调用. 比如 BL/BLR 等. | NA |
+| Level 3 | Pop Branch | 有返回值的跳转. 如函数返回等. | NA |
+| Level 3 | Other Branch | NA | NA |
+| Level 2 | Machine Clear |
+
## 3.4 Retring/正常执行
-------
+| 编号 | 描述 | 公式 |
+|:---:|:----:|:---:|
+| Level 1 | Retring | retired 的 uOps 数量占所有 pipeline slots 的比重, 理想情况下, 我们希望看到所有的 pipeline slots 都能归属于 Retiring, 因为它与 IPC 相关. | INST_RETIRED / (4 * CPU_CYCLES) |
+
+
# 1 参考资料