Home avatar

主题的晦涩 人生的短暂

【译】一种面向多核架构的无锁、缓存高效的共享环形缓冲区

译者序

论文 A Lock-Free, Cache-Efficient Shared Ring Buffer for Multi-Core Architectures 介绍了一种专为多核架构设计、用于单生产者/单消费者模型的环形缓冲区,称为 MCRingBuffer。论文性能测试表明,其吞吐量数倍于 Lamport 提出的 BasicRingBuffer

MCRingBuffer 将环形缓存区划分为多个块,块划分为多个槽。

【译】拨开 Linux 平均负载的谜团

平均负载(load averages)是一个很关键的指标——我所在的公司基于平均负载和其他指标,花费数百万去自动伸缩云实例——但在 Linux 上存在许多和平均负载相关的谜题。Linux 平均负载不仅追踪运行态(runnable)任务,也追踪处于不可中断休眠状态(uninterruptible sleep state)的任务。为什么?从没有人给我解释过。在这篇文章中,我将解决这个谜团,并总结平均负载以供他人参考。

Tar 格式详解

tar 是 tape archive 的简称,即“磁带归档”,最早出现在 1979 年的第 UNIX v7。磁带上的数据存储为可能不相邻的变长数据块,浪费了大量块与块之间的空间。向磁盘、网络传输数据时,传输一大块的效率远高于多个小块,因此程序员使用 tar 将磁带上的数据打包在一起,物理上存储在连续的、固定大小的块上以提高性能。

tar 打包出来的文件称为为 tarball。一般会使用某种压缩算法压缩 tarball,压缩后的 tarball 后缀一般为tar.<compress-algorithm>,比如 gzip 压缩的 tarball 名为tar.gz,zstd 压缩的 tarball 名为tar.zstd

Lua 语言简明教程

Lua is a powerful, efficient, lightweight, embeddable scripting language. It supports procedural programming, object-oriented programming, functional programming, data-driven programming, and data description.

Lua combines simple procedural syntax with powerful data description constructs based on associative arrays and extensible semantics. Lua is dynamically typed, runs by interpreting bytecode with a register-based virtual machine, and has automatic memory management with incremental garbage collection, making it ideal for configuration, scripting, and rapid prototyping.

类型

Lua 使用动态类型,未初始化的全局变量值默认为 nil(通过元表实现)。

网络层:控制面板

路由器中和路由(决定数据包从源主机到目的主机的路径)相关的功能成为控制面板。

传统上,每个路由器都有自己的控制面板,即每个路由器都独立实现了路由算法。

per-router-control-plane
per-router-control-plane

现在,软件定义网络迅速发展,使用远程控制器连接路由器,实现逻辑上集中式的控制,路由器给控制器提供必要链路信息,控制器计算路由表并安装到路由器中。

SND-contral-plane
SND-contral-plane

路由算法

路由算法决定数据报从主机发送到目的主机的路径,路由算法探查出的路径应当尽可能好,如路径短时延小、拥塞少等。路径的好坏程度由路径的成本表示,比如可以将时延表示为成本,成本低代表时延小。实际上,链路成本并不反映真实的成本,不是路由算法根据链路成本路由,而是网路管理员设置链路状态,诱导路由算法计算出期待的路由路径。

0%