操作系统笔记:NUMA:内存分配与远端访问的代价
发布于:
NUMA(Non-Uniform Memory Access)机器上,“同样是内存访问”并不等价:访问本地 NUMA 节点的内存更快,访问远端节点更慢,且会引入额外互连流量。对延迟敏感服务而言,NUMA 问题经常表现为:
发布于:
NUMA(Non-Uniform Memory Access)机器上,“同样是内存访问”并不等价:访问本地 NUMA 节点的内存更快,访问远端节点更慢,且会引入额外互连流量。对延迟敏感服务而言,NUMA 问题经常表现为:
发布于:
mmap 把“文件”与“内存地址空间”连接起来:读写文件内容可以变成对内存的 load/store。它常用于:
发布于:
线上常见的“IO 抖动”现象里,page cache 与 writeback(回写)经常是主角:吞吐看起来没变,但 P99/P999 延迟突然上升,甚至出现周期性尖刺。
发布于:
本文深入解析分支预测失败导致的流水线 flush 机制、性能影响和优化方法。
发布于:
这篇笔记把 IO 多路复用当作一个“代价模型”问题:在大量连接/FD 下,如何以更低的 CPU 成本判断哪些 FD 可读/可写。常见路径:
发布于:
本文深入解析超时与重试机制如何导致流量放大,以及如何通过合理的策略避免这一问题。
发布于:
本文深入解析内存屏障(fence)的必要性、工作原理、常见场景和工程实践。
发布于:
这篇笔记整理三类经常一起出现的同步原语:mutex、futex、条件变量。重点不是 API 记忆,而是把“为什么快 / 为什么慢 / 为什么会卡住”拆成可观测的机制:
发布于:
本文深入解析四层(L4)和七层(L7)负载均衡的工作原理、适用场景、性能特征和工程实践。
发布于:
本文深入解析 SIMD(Single Instruction, Multiple Data)的工作原理、适用场景、性能边界和工程实践。
发布于:
本文深入解析 Linux CFS(Completely Fair Scheduler)的工作原理、vruntime 机制、调度策略和工程实践。
发布于:
本文深入解析拥塞控制的核心概念,以及 CUBIC 和 BBR 两种算法的设计差异、适用场景和工程实践。
发布于:
本文深入解析性能诊断的核心指标:IPC、cache miss 和 branch miss,以及它们之间的关系和诊断方法。
发布于:
本文深入解析 io_uring 的设计原理、工作机制、适用场景和工程实践。
发布于:
本文深入解析 TLS 握手的工作原理、延迟来源、会话复用机制和工程优化实践。
发布于:
本文深入解析 Cache line 的工作原理、伪共享(false sharing)的机制与影响,以及工程实践中的定位与优化方法。
发布于:
本文深入解析 TCP 重传机制:RTO(Retransmission Timeout)和 fast retransmit 的工作原理、性能影响和工程实践。
发布于:
本文深入解析 HTTP/2 的核心特性:多路复用、流控、头部压缩,以及传输层队头阻塞问题。
发布于:
脑裂(split brain)的本质不是“网络断了”,而是:
发布于:
线性一致性(linearizability)这四个字经常被当成“强一致”的代名词,但工程里最重要的是:它是一个可以用客户端观察来定义、也可以被测试与反证的语义。
发布于:
这篇把 Raft 实现里两个最常见、也最容易误用的 index 讲清楚:
发布于:
成员变更(reconfiguration)是强一致系统里最容易“看起来只是改个列表”,但实际上非常危险的操作。
发布于:
这篇讲清楚一个“基于日志复制的一致性系统”迟早要面对的现实:
发布于:
这篇解决一个工程上最常见的困惑:
发布于:
本文围绕“读写多数派(quorum)为什么能工作”做一次工程化梳理:不背公式也能理解它的安全性来源,能把它落到系统实现与排障上。
发布于:
本文是「一致性笔记:Leader 选举:租约(lease)与心跳」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
本文是「存储笔记:冷热分层:把热点留在 NVMe,把冷数据放远端」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
本文是「存储笔记:写入合并(merge)与写扩散:从日志到段」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
本文讲清楚一个容易误解的事实:在很多存储系统(尤其 LSM)里,Delete 并不等于空间立刻释放。删除本质上是“写入一个 tombstone(删除标记)”,真正回收空间通常发生在后台 compaction/GC 之后。
发布于:
本文是「RocksDB 笔记:压缩与校验:CPU/IO 的权衡点」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
这篇讲清楚两件事:
发布于:
本文是「RocksDB 笔记:Write stall:为什么会卡住、如何定位」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
本文是「RocksDB 笔记:MemTable/Immutable:写入高峰的内存结构演进」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
在 SSD 上看到的“写放大”,常常不是上层存储引擎(LSM/B+Tree)带来的那一个,而是设备内部也在发生:
发布于:
在 RocksDB 写入链路中,最容易遇到两类“看似突然”的现象:
发布于:
本文是「RocksDB 笔记:Bloom / Ribbon filter:降低负查的成本」的工程化笔记,记录语义/模型定义、可观测信号与排障要点。
发布于:
这篇笔记更“贴近工程现场”地回答 RocksDB 的一个高频问题:Block Cache 到底缓存什么?怎么估算需要多大?为什么“命中率看起来不低”但延迟还是很差?
发布于:
在 KV 存储里,“删除”很少是一个真正的 delete。尤其当底层是 LSM:
发布于:
复制 + quorum 的系统一旦允许在故障/分区下继续接受写,就必须回答:当同一 key 出现并发写时,系统如何定义“最终值”?
发布于:
复制系统长期运行一定会产生副本分歧(divergence)。原因不是“实现有 bug”,而是现实世界的常态:
发布于:
发布于: