“写放大”(Write Amplification)在存储系统中是很常见的。但是,即使都是在存储系统中,“写放大”也有很多种,各种的写放大原理并不是很一样。下边根据自己的理解,进行了下总结,如有问题,恳请指正。

1. 读写单元较大导致的写放大

在文件系统中,读写单元固定,比如都是4K,这样,如果write函数写的数据小于4K,则要先把整块读入,再修改,再把新的4K整体写入(O_DIRECT情况除外)。这个过程可以称为 RMW (Read-Modify-Write),这就是File System的写放大问题。[1][2][5] (注意:Read-Modify-Write被更广泛地用在原子指令[3]和RAID[4]中。)

再如,在DBMS等应用层存储系统中,同样存在自己管理的读写单元,如MySQL的默认读写单元称为页,默认是16KB,所以一次读写只能以页的单位进行,这时,小于页的数据读写同样会带来整页的读写,进而造成了“写放大”,道理和文件系统是一样的。 阅读全文

出于某种目的,你可能不想把levelDB的所有的文件都存到一个目录下:

但是 levelDB 不支持类似的选项,只能将文件存到一个目录;而且不幸的是,levelDB由于频繁的compaction操作,带来了频繁的文件创建和删除,且每个level包含多个文件,不易这样改。 阅读全文

《人有人的用途》(The Human Use of Human Beings — Cybernetics and Society)这本书是控制论鼻祖维纳(Norbert Wiener)的一本“科普书”,虽然只有100多页,我却是一本有深度的好书。第二部分笔记是书的第4~6章。

我曾经看过两本和经济学相关的畅销书,这种经济科普书中,常见类似“让你像经济学家一样思考”的宣传。书呢看了的确挺爽,思考世界的方式也很新鲜,但是看完之后并不能在头脑中留下系统的经济学知识体系,因此,这让我一直认为这类“经济科普”都是速食垃圾,读不得。

但这次再看完《人有人的用途》的几章,却动摇了我对那些科普书的看法。这是因为虽然我的专业与维纳相关,但我却从没有像他那样用信息、控制、反馈、计算、博弈的观点重新审视过这个世界。我虽不完全同意维纳所说,但就像经济学家可以用经济学的视角看世界,维纳也在用他的控制论视角看世界。如此看来,那些经济畅销书,还是有用的,不过我还是感觉先学经济知识,再看它们也许更好。 阅读全文

《人有人的用途》(The Human Use of Human Beings — Cybernetics and Society)这本书是控制论鼻祖维纳(Norbert Wiener)的一本“科普书”,虽然只有100多页,还是32开纸,但是我觉得却是一本有深度的好书。首先,这本书并没有任何公式和严谨的控制理论,还有很多恰当的小例子,因此特别易读;但是虽易读,并非无营养,相反,每一段、每个观点都可以细读,引发思考。

与“科普书”的定位相比,更应当注意的是这本书的副标题:“控制论和社会”,作者不仅让人信服的解释了熵的概念、(机器)学习的概念、语言信息传递的原理;也对法律、社会政策等方面的思考和讨论;最后时甚至对未来发展进行预测……行文间,作者的例子不仅涉及自己的控制论,还包括信息论、生物学、热力学、社会学等多方面的思考。更令人叹服的是,虽1954年成书时人工智能之一概念才刚刚起步,作者在这本当时的“科普”书中,就已经能够看出各种现在很火的统计机器学习、仿生神经网络等让机器从历史经验进行未来预测的思想!

我读这本书并不快,但第一次也只是匆匆略过,现在想抽时间再读一遍,准备记下好的观点和自己对应的思考。总之,这是一本连相关专业学生都无法当科普书来读的科普书。 阅读全文

大部分截图来自原书,贴出书的官方主页: 《Operating Systems: Three Easy Pieces
(作者Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau)。感谢原作者这么好的书。

本篇笔记是书的第三部分(Persistence),讲述了操作系统和外存系统相关的内容。

第一节 I/O Device

1.1 IO 总线

一般情况下, IO设备的性能较差(慢),所以用Peripheral IO Bus,为什么不用像显卡一样用的PCI呢?因为1)越快的总线越短,这样空间不够插;2)越快的总线制作成本越高,如果存储设备照总线的性能差的远,没必要用高性能总线。 阅读全文

大部分截图来自原书,贴出书的官方主页: 《Operating Systems: Three Easy Pieces
(作者Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau)。感谢原作者这么好的书。

本篇笔记是书的第一部分(Virtualization)的下半部分,讲述了操作系统是怎么通过地址空间的抽象,将内存资源进行虚拟化的。

第一节 地址空间

1.1 内存虚拟化

多进程OS的资源共享策略 阅读全文

截图来自原书,贴出书的官方主页: 《Operating Systems: Three Easy Pieces
(作者Remzi H. Arpaci-Dusseau and Andrea C. Arpaci-Dusseau)。感谢原作者这么好的书。

本篇笔记是书的第一部分(Virtualization)的上半部分,讲述了操作系统是怎么通过进程的抽象,将CPU计算资源进行虚拟化的。

第一节 进程的抽象

1.1. 策略和机制

Policy在mechanism(策略和机制)在操作系统中通常是分开设计的。比如如何切换上下文是一个low-level的mechanism,指底层的方法或者协议。当前时刻应该让哪个进程运行更好是一个high-level的policy的问题,指一些“智能”的调度。 阅读全文

谁来定义虚拟化?

一个比较抽象的词,很难给出一个比较明确的定义,而且我也一直认为没有人可以对一个抽象的概念给出绝对正确的定义。如果一个公司想争夺一种技术的定义权,我会毫不吝啬的给它扣上“技术独裁者”的帽子。

但是理解一个词在当前这个时代、这个世界的用法还是很有必要的,比如“虚拟化”这个词,对虚拟化开始重点关注以来,对“虚拟化”这个词的理解的确是在逐渐变化的,今天就来说一说我目前为止的理解。

从虚拟机说起

关注虚拟化方向之前,我对虚拟化这个词的理解是经历了几个阶段的。最开始可能“虚拟机”啊,有了虚拟机,大家就能方便地在Windows下用Linux系统啦。后来云计算火起来了,云服务器的底层技术是什么啊,是虚拟机和虚拟化啊,所以感觉虚拟化真是很牛逼。后来Docker火了,Docker是什么,人家都说是“轻量级的虚拟化”,哇,虚拟化这么牛逼,虚拟机、云服务器、Docker都用了虚拟化啊。 阅读全文

0. 环境

iOS 10 + MacOS 10.12 + Python 2.7

1. 思路

APP界面中弹出的题的位置和答案的位置都是固定的,因此我们可以将手机屏幕想办法投到电脑屏幕上,通过OCR识别指定区域,实时打开搜索引擎界面搜索问题,甚至匹配答案。

2. 关键步骤

2.1 投屏

我是iPhone 5s + Mac电脑,可以用Mac的Quicktime Player播放器的屏幕录制功能(安卓据说可以用ADB)。 阅读全文

0. GCC的attribute关键字

这是GCC的一个特性,gcc可以使用attribute关键字,格式如下:

其中attribute_name中有两类constructordestructor类似C++中类的构造和析构的概念,只不过是相对main()函数来说的。简单说,__attribute__((constructor))定义的函数在main前执行,__attribute__((destructor))定义的函数在main后执行。 阅读全文