Linux 网络编程排障与高性能传输: 从丢包诊断到零拷贝实战

面向嵌入式 Linux 高性能网络场景的排障与优化指南。覆盖 UDP 丢包全链路诊断 (6 个丢包位置及对应 sysctl 调优)、TCP TIME_WAIT 端口耗尽排障、零拷贝技术对比 (sendfile/splice/MSG_ZEROCOPY)、dropwatch 内核丢包追踪工具实战,以及陈硕网络编程方法论精华。结合 sockpp RAII socket 封装和 newosp 帧协议丢包检测的工程实践。

February 20, 2026 · 7 min · 1331 words · map[name:DeguiLiu]

对象池在嵌入式热路径上的三个隐性成本

对象池 (mutex + queue + shared_ptr) 比裸 malloc 快约 60%,是减少堆分配的第一步改进。但在 ARM 嵌入式热路径上,mutex futex 开销、shared_ptr 原子引用计数、queue 动态增长三项隐性成本使其无法满足零堆分配和确定性延迟的要求。本文从一个真实的串口数据解析场景出发,量化这三项成本,并展示预分配环形缓冲和 variant 值语义如何彻底消除它们。

February 17, 2026 · 2 min · 397 words · map[name:DeguiLiu]

内存屏障的硬件原理: 从 Store Buffer 到 ARM DMB/DSB/ISB

内存屏障是无锁编程的底层基石,但多数文章停留在 acquire/release 的使用层面,没有解释 为什么 CPU 会重排序。本文从 Store Buffer、Invalidation Queue 和 MESI 协议三个硬件机制出发,推导出四种屏障类型的必然性,区分编译器屏障、硬件屏障和 C++ memory_order 三个层次,最终详解 ARM DMB/DSB/ISB 三条指令的精确语义与适用场景。

February 17, 2026 · 10 min · 1979 words · map[name:DeguiLiu]

MCCC 消息总线零堆分配优化与性能实测

从 MCCC 消息总线优化实践中提炼 5 个零堆分配模式 (Envelope 内嵌、编译期类型索引、函数指针 RAII、FixedFunction/FixedVector/FixedString、编译期配置矩阵),并附完整性能数据: BARE_METAL 18.7 M/s (54 ns/msg),FULL_FEATURED 5.8 M/s (172 ns/msg),HIGH 优先级零丢失,E2E P99 仅 449 ns。

February 17, 2026 · 8 min · 1673 words · map[name:DeguiLiu]

高性能系统设计的五个反直觉原则: 从消息队列优化中提炼的通用方法论

在优化无锁消息总线的过程中,我们发现五个违反直觉的性能原则: 状态机提升 100% 吞吐、上下文切换减少 99.8%、队列容量无法解决速率失衡、批处理提升 76 倍吞吐、单核自旋性能下降 91%。每个原则附带 ARM 实测数据、数学推导和适用条件分析。

February 17, 2026 · 6 min · 1223 words · map[name:DeguiLiu]

perf 性能分析实战: 从硬件计数器到火焰图的完整工作流

perf 是 Linux 内核自带的性能分析利器,但多数开发者只停留在 perf top 层面。本文以嵌入式 ARM-Linux 实战为背景,从 PMU 硬件计数器原理出发,系统讲解 perf stat(IPC/缓存/分支预测)、perf record + 火焰图(On-CPU/Off-CPU)、perf sched(调度延迟)三大核心工作流,并给出 ARM 平台缓存访存分析方法和自动化监控脚本。

February 16, 2026 · 12 min · 2500 words · map[name:DeguiLiu]

perf lock 锁竞争诊断: 从 futex 原理到生产定位实战

以 perf lock 为主线的锁竞争诊断实战。从 Linux mutex 的三条路径(fast/mid/slow)和 futex 内核机制出发,详解 perf lock contention 的每个输出字段含义,演示调用栈分析、锁持有者追踪、类型过滤等进阶用法,通过一个完整案例展示从「发现 95% 竞争率」到「无锁架构 3.6x 吞吐提升」的诊断全过程。

February 16, 2026 · 6 min · 1241 words · map[name:DeguiLiu]

Unix Domain Socket 实时性优化: 嵌入式 IPC 全链路调优

面向嵌入式 ARM-Linux 平台的 Unix Domain Socket 实时性优化系统指南。从 UDS 内核数据路径出发,覆盖 socket 类型选择(STREAM/DGRAM/SEQPACKET)、epoll 边缘触发正确实现、抽象命名空间、fd 传递零拷贝、memfd_create 大块数据传输、eventfd 轻量通知、实时调度与 CPU 隔离、内核缓冲区调优、io_uring 异步路径等维度。每项优化标注原理、ARM 特有注意事项和适用场景。附完整的 RAII 服务端实现。

February 16, 2026 · 10 min · 2110 words · map[name:DeguiLiu]

TCP 非阻塞发送的 Short Write 问题: 环形缓冲区 + epoll 事件驱动方案

非阻塞 TCP 发送的 short write 问题在高吞吐嵌入式场景下不可回避。本文从一个 CSDN 环形缓冲方案出发,逐项分析其 5 个工程缺陷 (非 2 幂、无界索引、内存泄漏、部分发送丢失、EAGAIN 误判),给出工程级改进方案: 2 的幂位掩码、精确 acquire-release 内存序、EPOLLOUT 驱动异步刷写,并对比 newosp SpscRingbuffer 的设计取舍。

February 16, 2026 · 9 min · 1854 words · map[name:DeguiLiu]

SPSC 无锁环形缓冲区设计剖析: 从原理到每一行代码的工程抉择

深度剖析 liudegui/ringbuffer 的 SPSC 无锁环形缓冲区实现。逐项解析缓存行对齐、2 的幂位掩码、wait-free 无重试设计、精确 acquire-release 内存序、FakeTSO 单核模式、批量 memcpy、ProducerClear 所有权修正等 12 项设计决策,每项标注 为什么这样做 和底层硬件原理。

February 16, 2026 · 10 min · 1955 words · map[name:DeguiLiu]

共享内存 IPC 实践: 从 POSIX shm 到 newosp 无锁 Ring Buffer

共享内存是 Linux 进程间通信中延迟最低的机制,但原始的 POSIX shm_open/mmap 接口缺少同步、生命周期管理和崩溃恢复。本文从 POSIX 共享内存原理出发,剖析 newosp 框架中 ShmRingBuffer 的 CAS 无锁设计、ARM 内存序加固、缓存行对齐等工程决策,并与 cpp-ipc 库进行架构对比,展示嵌入式场景下共享内存 IPC 的完整工程方案。

February 16, 2026 · 9 min · 1776 words · map[name:DeguiLiu]

嵌入式线程间消息传递重构: 用 MCCC 无锁消息总线替代 mutex + priority_queue

本文基于一个实际的线程间消息传递需求(Windows 风格的 SendMessage/PostMessage),分析传统 mutex + priority_queue + promise/future 方案的工程缺陷,然后用 MCCC 无锁消息总线重新实现,并通过完整的测试和 Sanitizer 验证。

February 16, 2026 · 7 min · 1422 words · map[name:DeguiLiu]

无锁编程核心原理: 从 CAS 原子操作到三种队列设计模式

无锁编程的基础性原理文章。从 CAS 原子操作的硬件实现出发,严格定义 lock-free 与 wait-free 的进展保证差异,深入分析 ABA 问题及其解决方案,阐明 acquire-release 内存序的必要性,最终以 SPSC/MPSC/MPMC 三种队列模式为主线,展示无锁数据结构从设计到工程落地的完整知识体系。

February 16, 2026 · 10 min · 2084 words · map[name:DeguiLiu]

多线程死锁与优先级反转实战: 从问题复现到工程解决方案

死锁与优先级反转的实战指南。通过 6 个可编译运行的 C++ 示例,复现经典 AB-BA 死锁、回调重入死锁、自死锁、优先级反转等场景,逐一给出工程修复方案(全局锁序、std::scoped_lock、try_lock 回退、PTHREAD_PRIO_INHERIT、无锁架构)。纠正「编译优化导致死锁」的常见误解。附 TSan/lockdep 检测方法。本文为实战篇,与姊妹篇《嵌入式系统死锁防御》形成互补。

February 16, 2026 · 10 min · 2042 words · map[name:DeguiLiu]

C++ 单例模式的线程安全实现: 从 DCLP 的历史缺陷到 C++11 的修复

双重检查锁定 (DCLP) 是 C++ 并发编程中最臭名昭著的模式之一。2004 年 Scott Meyers 和 Andrei Alexandrescu 论证了它在 C++03 中不可移植地安全实现。本文从 DCLP 的历史缺陷出发,解释 C++11 内存模型如何修复它,对比 Magic Statics、acquire/release 原子操作和顺序一致性三种实现,并讨论嵌入式场景下的工程选择。

February 16, 2026 · 7 min · 1361 words · map[name:DeguiLiu]