上周翻译完 【译】替 swap 辩护:常见的误解 之后很多朋友们似乎还有些疑问和误解,于是写篇后续澄清一下。事先声明我不是内核开发者, 这里说的只是我的理解, 基于内核文档中关于物理内存的描述 ,新的内核代码的具体行为可能和我的理解有所出入,欢迎踊跃讨论。

误解1: swap 是虚拟内存,虚拟内存肯定比物理内存慢嘛

这种误解进一步的结论通常是:「使用虚拟内存肯定会减慢系统运行时性能,如果物理内存足够为什么还要用虚拟的?」 这种误解是把虚拟内存和交换区的实现方式类比于「虚拟磁盘」或者「虚拟机」等同的方式, 也隐含「先用物理内存,用完了之后用虚拟内存」也即下面的「误解3」的理解。

首先,交换区(swap) 不是 虚拟内存。操作系统中说「物理内存」还是「虚拟内存」的时候在指程序代码 寻址时使用的内存地址方式,使用物理地址空间时是在访问物理内存,使用虚拟地址空间时是在访问虚拟内存 …

这篇翻译自 Chris Down 的博文 In defence of swap: common misconceptions原文的协议CC BY-SA 4.0 ,本文翻译同样也使用 CC BY-SA 4.0 。其中加入了一些我自己的理解作为旁注,所有译注都在侧边栏中。

翻译这篇文章是因为经常看到朋友们(包括有经验的程序员和 Linux 管理员)对 swap 和 swappiness 有诸多误解,而这篇文章正好澄清了这些误解,也讲清楚了 Linux 中这两者的本质。值得一提的是本文讨论的 swap 针对 Linux 内核,在别的系统包括 macOS/WinNT 或者 Unix 系统中的交换文件可能有不同一样的行为, 需要不同的调优方式。比如在 FreeBSD …

你觉得,你的系统中大多数文件大概有多大?

这是一个很有意思的问题,你可以试着先猜一下。

基于对系统中保存文件的了解,可能有这样的思考过程:

  • 我收藏了好多照片,每个有 2~5MiB 吧。
  • 我下载了好多漫画,每个 100KiB 左右,这些大概占了不少比例。
  • 我还收藏了不少动画电影电视剧,虽然这些文件总数量可能不多?
  • 我下载了 Linux 的源码,那里面每个 C 代码文件都几千行,每行 100 字宽,平均也得有 30KiB 吧,有几万个源码文件呢,占比应该挺大的……

问题中「大多数」其实是个挺不精确的称呼,换个精确点的问法:你觉得你的系统中 文件大小的中位数 大概在什么范围内?或者说,文件系统中 文件大小的分布情况 一般是怎样的曲线?

这个问题其实还有多种别的问法,比如:一个常见的桌面或者服务器系统中,多大的文件算大文件, 多小的文件算小文件,什么范围内的大小算是普通呢?

经历过基本的科学教育的人 …

上篇 「柱面-磁头-扇区寻址的一些旧事」 整理了一下我对磁盘类存储设备(包括软盘、硬盘,不包括光盘、磁带)的一些理解, 算是为以后讨论文件系统作铺垫;这篇整理一下我对闪存类存储设备的理解。

这里想要讨论的闪存类存储是指 SSD 、SD卡、U盘、手机内置闪存等基于 NAND 又有闪存转换层的存储设备(下文简称闪存盘),但不包括裸 NAND 设备、3D Xpoint (Intel Optane)等相近物理结构但是没有类似的闪存转换层的存储设备。 闪存类存储设备这几年发展迅猛,SD卡和U盘早就替代软盘成为数据交换的主流, SSD 大有替代硬盘的趋势。 因为发展迅速,所以其底层技术变革很快,不同于磁盘类存储技术有很多公开资料可以获取, 闪存类存储的技术细节通常是厂商们的秘密,互联网上能找到很多外围资料, 但是关于其如何运作的细节却很少提到。所以我想先整理一篇笔记,记下我搜集到的资料,加上我自己的理解。 本文大部分信息来源是 Optimizing Linux with cheap flash drivesA Summary on …

在 SSD 这种新兴存储设备普及之前,很长一段时间硬盘是个人计算机的主要存储设备。 更往前的磁带机不常见于个人计算机,软盘的地位很快被硬盘取代,到 SSD 出现为止像 MiniDiscDVD-RAM 等存储设备也从未能挑战过硬盘的地位。硬盘作为主要存储设备,自然也影响了文件系统的设计。

这篇笔记稍微聊一聊硬盘这种存储设备的寻址方式对早期文件系统设计的一些影响,特别是 柱面-磁头-扇区寻址(Cylinder-head-sector addressing, 简称CHS寻址)的起源和发展。 大部分内容来自维基百科 Cylinder-head-sector 词条 这里只是记录笔记。现今的硬盘已经不再采用 CHS 寻址,其影响却还能在一些文件系统设计中看到影子。

柱面、磁头、扇区以及相关术语

磁盘示意图(来自维基百科 Cylinder-head-sector 词条
chs-illustrate-trans.svg

如右图所示,一块硬盘(Hard Disk Drive, HDD)是一个圆柱体转轴上套着一些磁碟片(platter), 然后有一条磁头臂(actuator arm)插入磁碟片间的位置 …

zfs 这个东西倒是名不符实。叫 z storage stack 明显更符合。 叫 fs 但不做 fs 自然确实会和 btrfs 有很大出入。
我反而以前还好奇为什么 btrfs 不弄 zvol , 直到我意识到这东西真是一个 fs ,名符奇实。
—— 某不愿透露姓名的 Ext2FSD 开发者

Btrfs 和 ZFS 都是开源的写时拷贝(Copy on Write, CoW)文件系统,都提供了相似的子卷管理和 快照(snapshot)的功能。网上有不少文章都评价 ZFS 实现 CoW FS 的创新之处,进而想说「 Btrfs 只是 Linux/GPL 阵营对 ZFS …

2020年2月9日更新过

ZFS 在设计之初源自于 Sun 内部多次重写 UFS 的尝试,背负了重构 Solaris 诸多内核子系统的重任,从而不同于 Linux 的文件系统只负责文件系统的功能而把其余功能(比如内存脏页管理, IO调度)交给内核更底层的子系统, ZFS 的整体设计更层次化并更独立,很多部分可能和 Linux/FreeBSD 内核已有的子系统有功能重叠。

似乎很多关于 ZFS 的视频演讲和幻灯片有讲到子系统架构,但是找了半天也没找到网上关于这个的说明文档。 于是写下这篇笔记试图从 ZFS 的早期开发历程开始,记录一下 ZFS 分层架构中各个子系统之间的分工。 也有几段 OpenZFS Summit 视频佐以记录那段历史。

早期架构

早期 ZFS 在开发时大体可以分为上下三层,分别是 ZPL, DMU 和 SPA ,这三层分别由三组人负责。

最初在 Sun 内部带领 ZFS …

很抱歉萌狼很早就提过交换问题的事,被我一直咕咕了许久。 拖延症晚期有药么

我的提问和萌狼的回答

可以去萌狼的博客上看呀

Q1:除了博客的「关于」页面以外,还愿意再向咱介绍一下自己嘛?

介绍自己啊。 写了删删了写,不知道该介绍点啥 就说点自己的兴趣?

喜欢自由开源软件,喜欢 Arch Linux 。喜欢这些倒不是出于 RMS 和 FSF 那样道义上的原因, 我觉得商业软件公司要赚钱吃饭也是无可厚非的。

喜欢自由软件是因为,当我需要知道它到底怎么工作的时候,有可能去挖代码,必要的话能去改代码。 当然我一个人肯定不能读所有在用的软件,但是我知道我有读和修改代码的权利的话, 那么我认识的朋友们也同样有这样的权利,我不认识的广大社区有千千万万的人也同样有这样的权利, 从而我相信当我遇到问题的时候不至于卡在某些人某些公司某些集体的决策上而无法解决。

基于这个理由,我对开源社区也同样有公开全部细节的期待。我喜欢 Arch Linux 因为即便它的内部决策只是一小波人,但是导致决策的讨论以及决策的执行方式全是公开的,可以在网上翻阅, 可以追根溯源,这让我有种安心感。就像我不喜欢 Manjaro 的一点是它有太多细节是翻阅不到的, 虽然它也是开源社区,但是打包细节翻阅不到,包列表翻阅不到,决策的制定和执行的过程也翻阅不到 …

最近几个月在这个博客发了不少歌词翻译 似乎有要转型成音乐博主的趋势 ,前段时间买了个新域名 sak.uy ,准备专门用来放这些东方歌曲的歌词翻译,于是分设了单独的博客「 Sakuya的音乐盒 」。主博客这边右侧边栏会有到音乐盒的链接。

曾经在这边的那些歌尽量保持 URL 跳转过去,新的歌词翻译会发到那边去,还想继续听歌的话请继续订阅那边的 RSS 呀。

主博客这边还是像往常一样保持记录生活点滴和技术经验好了。说道介绍技术, 有人问过我那些日语歌词上给汉字标注的假名都是我一个个手输的么? 一开始是手输的,后来发现了不错的自动化方案,于是这里介绍一下。

首先是 python-furigana

这是个 python 写的小程序(严格说是库),可以把一段日文转换成标准的 HTML 形式的 <ruby> 标签的振假名( ()仮名(かな) )。 它本身只是个方便的格式化库,实际工作是用 python-mecab 这个 binding 去查询 mecab 这个著名的日语语料分析库。要用它还得配合一些开源的 mecab 词典,这些在 …

惠狐 megumifox 写了篇 用PulseAudio将电脑的声音用手机放出来 ,文末提到想知道我怎么用树莓派转发 USB 的,于是写篇文章记录一下。

起因

家里有个装了 Arch Linux ARM 的树莓派3B 闲置着,装了 Arch Linux ARM 偶尔上电更新一下, 不过因为性能实在不适合做别的事情于是一直在吃灰。某日 给老婆安利幻想万华镜和老婆看片 的时候, 老婆不吃安利于是迁怒键盘鼠标键盘鼠标被长长的 USB 线扯着感觉很难受 ,于是偶发奇想,能不能利用一下树莓派的多达 4 个 USB 2.0 端口接鼠标键盘呢, 这样鼠标键盘就可以跟着树莓派来回走,不用拖着长长的 USB 线了。

上网搜了一下, Linux 环境有个 usbip 工具正好能做到这个。原理也很直观, usbip 能把 USB …

君さえいなけりゃよかった 如果你从未出现过该多好
降り出した雨の中で 君に出会った时から 下起雨的那一刻 从遇到你那时起
君がいないということが 当たり前じゃなくなった 身边没有你的情况 就已经不再是平常
ああ こんなはずじゃない 啊 不应该是这样的
ずっと自分胜手にさ 过ごせたはずなのに 明明一直是散漫地过着自己的日子
まるで仆じゃないような仆が さらけ出されてくよ 就像是带出了不是我的另一面的我

君さえいなけりゃよかった こんな気持ちは知らないから 如果你从未出现过该多好 就不会知道这种心情
やらなくちゃいけないことが 手つかずのまま积もってく 一堆不得不做的事情 堆在手头越积越多
仆じゃなくてもいいのなら こっちを见て笑わないでよ 如果不是我也可以的话 就别看着我这边笑啊
大袈裟じゃなくてそれだけで 忘れられなくなるの 甚至那些不重要的事情 都变得难以忘记了

君の适当な话も 全部心に刺さります 你无意间随口说的话 全都刺在心头
気にしなけりゃいいのにな 残らずかき集めちゃうの 虽说只要不在意就可以了 却一句不剩全收集了起来
ああ こんなはずじゃない こんなはずじゃない 啊 不应该是这样的 不应该是这样的 …

译注

这篇是翻译自 Brandon Invergo 的博客的英文文章 Using GNU Stow to manage your dotfiles 。 Brandon Invergo 的博客采用 CC-BY-SA 3.0 授权,因此本文也同样采用 CC-BY-SA 3.0 ,不同于其它我写的文章是 CC-BY-NC-SA 4.0 授权。

我自己已经使用此文中介绍的方案管理 我自己的 dotfiles 快 3 年了。最早想采用这样的管理方案是为了方便在多台 Arch Linux 系统之间同步配置, 后来逐渐主力系统也更新换代了一次,又同步到了自己的 vps 上去,目前管理多个 Arch Linux 上都多少都有这套配置。甚至装好 Arch Linux 添加好用户最初做的事情就是安装 …