NUMA:内存到底连在哪里
这是一篇 Linux 内核系列教程的延续,前面几篇追踪了一个网络包从网卡进来到发出的完整内存路径,但始终假设"一个页就是一个页"。 本文指出这个假设在多路服务器上不成立:每个 CPU 插槽有自己的本地内存,访问远端插槽的内存需要绕路,因此内存有位置,位置决定访问速度,内核只能管理、无法隐藏这一点。 文章引出 NUMA 这个概念,解释为什么在双路服务器上假设"内存无差别"会出问题。内容偏教学铺垫,篇幅短,核心是把"内存有 locality"这一反直觉点讲清楚,为后续深入 NUMA 拓扑、调度、内存分配策略做引子。
理解 Testcontainers:Ryuk 清理器
Testcontainers 在测试运行时会自动启动一个名为 Ryuk 的容器,负责在测试结束后清理所有测试用的容器。 这个容器出现在 docker ps 输出里,镜像是 testcontainers/ryuk,名字因语言库而异(Go 用 reaper_ 前缀)。 它随测试启动,测试结束就消失,专门用来确保 Postgres、Redis、Kafka 等测试容器不会残留。
Linux 内核网络子系统:一个数据包的完整旅程
追踪一个网络数据包在 Linux 内核中的完整进出路径,揭示网络子系统如何调用驱动注册的函数指针。文章从上一篇 register_netdev 的"承诺"出发,顺着数据包走一遍内核网络栈的完整流程,包含具体源码位置(netdevice.h:1436、dev.c:11531)。
Kronk SDK:用 Go 封装 llama.cpp 的 C API
Kronk 是一个 Go 层,把 llama.cpp 的 C API 封装成更友好的 SDK 接口。公开方法只有 Init、New 和几十个方法,但背后有大量封装逻辑。 这是 Internals for Interns 系列的第二篇,上一篇拆解了 yzma 的实现。
深入剖析 PostgreSQL SQL 查询内部机制
一本讲解 PostgreSQL 查询执行全流程的书,从词法分析、语义校验、规则重写、代价优化到迭代器执行逐一展开,同时涉及内存管理、磁盘组织和并发控制。
Go 语言现代 REST API 开发实战
一本介绍用 Go 标准库构建生产级 REST API 的实战书籍,强调不依赖重型框架,配合 GORM 和 Squirrel 等轻量库实现可扩展的 API。
内核模块:Linux驱动为何不必编译进镜像
Linux内核启动时并非所有代码都编译进镜像,文件系统、块设备、网络栈等层层调用最终都落到动态加载的驱动代码上,这就是内核模块系统的存在意义。
Yzma:用 Go 直接调用 llama.cpp 推理引擎的内部实现
<p>在我们研究了推理的实际情况<em>是</em>——模型如何逐个标记输入提示并构建响应。我提到了两个可以让你本地运行这个循环的Go项目:,使得 Go 称推理引擎直接,以及,它会在其上构建一个友好的 SDK。<br><br>今天我们打开yzma,看看整个过程是如何组合起来的。</p>
Fake Clocks, Real Guarantees: Inside Go's synctest
The first time I reached for testing/synctest, I assumed it was a sleep helper with better manners. The public API is small enough to support that assumption: synctest.Test(t, func(t *testing.T) {... ...
深入 Linux 内核:虚拟文件系统 (VFS) 原理
Linux内核系列续篇,从调度器深入文件系统层。解析程序打开文件时的内核路径:VFS如何统一不同文件系统接口,以及底层驱动交互机制。 适合想补齐操作系统底层知识的开发者。
Go 运行时深度解析:Profiling 机制揭秘
深入解析 Go 运行时五种 Profile(CPU、Heap、Block、Mutex、Goroutine)的底层采集机制与数据格式。文章揭示了它们共享同一 pprof 协议骨架,但采集模型截然不同:CPU 基于信号中断与无锁环形缓冲区流式处理;Heap/Block/Mutex 在分配器或锁内部原地聚合采样;Goroutine 则是全量快照。 详细拆解了采样率随机化、延迟计数(GC 配合)、时长加权采样及缩放估算等关键工程细节。
真实Go存储引擎中的MMAP与pread之争
以VictoriaLogs为例,深入剖析Go存储引擎中mmap与pread的性能权衡。指出mmap虽能减少系统调用开销,但冷数据引发的Major Page Fault会导致Go线程阻塞且无法被Runtime调度器感知,从而引发整体停顿。 文章展示了结合mincore检查页面驻留状态的双路径读取实现,为高性能Go数据库开发提供了极具价值的底层优化思路。
理解 Linux 内核:调度器
深入解析Linux 7.1内核调度器机制。澄清进程与线程在底层均为task_struct,详解EEVDF算法如何通过虚拟运行时间(vruntime)实现公平性与低延迟平衡。 剖析上下文切换的缓存冷启动成本及抢占触发逻辑,适合希望理解操作系统核心原理的开发者。
Understanding the Go Runtime: The Reflect Package
In the previous article we watched the runtime rebuild an entire stack trace out of metadata the compiler and linker had frozen into the binary at build time. I told you at the end that reflect works ...
Memory Manager
In the previous article we looked at how a user program crosses the ring 3 → ring 0 boundary to ask the kernel for help. The example we used was read — a file descriptor, a buffer pointer, a byte coun...
Memory Manager
In the previous article we looked at how a user program crosses the ring 3 → ring 0 boundary to ask the kernel for help. The example we used was read — a file descriptor, a buffer pointer, a byte cou...
Stacktraces
In the previous article we took apart the select statement and saw how it’s really two features in one, with the compiler rewriting the easy shapes away and only the hard cases falling through to the ...
Stacktraces
In the previous article we took apart the select statement and saw how it’s really two features in one, with the compiler rewriting the easy shapes away and only the hard cases falling through to the...

