runc 主流程简读

平时天天跟容器打交道,但自己对其背后的机制却并不是多么了解。今天我们先跳过上层让人眼花缭乱的 containerdCRI-O 以及各种 xxx-shim,直接进入到最深处的组件:runc。所谓“容器的三大核心技术”——namespace、cgroup、unionfs,runc 就负责着前两者。

本文主要关注 runc 里一些关键函数的流程,因此会跳过大量细节,我只能尽量保持不丢失最重要的几个部分~

继续阅读

Lua opcode 解析

每一个虚拟机中最重要的部分,无疑当属 opcode。2023 年的第一篇文章,就交给 opcode 解析吧~ 本文将详细解析 Lua 虚拟机里除了 table 之外的所有 opcode。

继续阅读

Lua 虚拟机执行环境的初始化流程

作为下一篇 opcode 的「餐前甜品」,我们先分析下 Lua 虚拟机的初始化流程,为执行 opcode 做好准备。本次的文章从创建虚拟机开始,直至 luaV_execute 执行 opcode,将覆盖除了词法、语法解析之外的大多数源码。

继续阅读

开启 PIE 编译选项导致的一个诡异问题

上周在工作中遇到一个诡异的问题:代码完全没动过,加了一些编译选项之后,编译正常,二进制也能运行,业务流程却失败了。经过一些排查之后,发现是 PIE 与 ld 链接资源文件的机制产生了冲突,很值得在此做一下记录,顺便复习下链接相关的知识。

继续阅读
nginx -s reload header image

Nginx debug 日志分析:reload 过程发生了什么

最近在研究 Nginx 源码。我把 Nginx 的 debug 日志给开了,看一看 reload 流程产生的日志都有哪些,并对源码进行简单阅读,以期对 Nginx 的 reload 流程产生一个感性认知。

继续阅读

ngx_list 链表解析

概述

ngx_list 作为 Nginx 中的链表结构被广泛使用。不同于普通的链表设计,其设计是元素组成定长数组区块,定长数组区块再进一步组成链表。这种形式虽对内存稍有浪费,但却能大幅度减少内存分配与释放的频率。

继续阅读