GFS: Evolution on Fast-forward

转载自ACM Queue – GFS: Evolution on Fast-forward

A discussion between Kirk McKusick (known for his work on BSD Unix, including the original design of the Berkeley Fast File System) and Sean Quinlan (served as the GFS tech leader for a couple of years and continues now as a principal engineer at Google) about the origin and evolution of the Google File System.

The discussion starts, appropriately enough, at the beginning—with the unorthodox decision to base the initial GFS implementation on a single-master design. At first blush, the risk of a single centralized master becoming a bandwidth bottleneck—or, worse, a single point of failure—seems fairly obvious, but it turns out Google’s engineers had their reasons for making this choice.

可能和我们想象中Google的分布式系统设计原则完全对立的一个决定,是如何产生的呢?这段对话就是从这个有趣的话题开始的。

整个对话在两个对文件系统有着深刻理解的业界专家之间展开,从分布式体系的设计思路及其演进、吞吐和延迟的取舍、性能瓶颈的解决策略,以及GFS和 BigTable之间相辅相成的内在联系。印象中这还是Google第一次在公开场合提及大量GFS的运作方式和实现策略的细节,强烈推荐给做分布式系统的技术人员!


GFS: EVOLUTION ON FAST-FORWARD
A DISCUSSION BETWEEN KIRK MCKUSICK AND SEAN QUINLAN ABOUT THE ORIGIN AND EVOLUTION OF THE GOOGLE FILE SYSTEM.

During the early stages of development at Google, the initial thinking did not include plans for building a new file system. While work was still being done on one of the earliest versions of the company’s crawl and indexing system, however, it became quite clear to the core engineers that they really had no other choice, and GFS (Google File System) was born.

继续阅读GFS: Evolution on Fast-forward

深入探究MODVERSIONS的实现原理

最近在分析Linux内核模块与内核之间的版本耦合关系时,在实验中发现了一些有趣的结果:在同一Linux版本基础上经过不同裁剪的内核,甚至是在跨度不大的两个内核版本间,内核模块可以自由互用,而且内核本身似乎具备检查这种兼容性的能力。这与之前所知的情况是不同的。在我久远的记忆中,Linux的是依靠内核模块构建时自动产生的“vermagic”标识检查是否与当前内核版本一致的,如果不一致则拒绝加载。除非在insmod/modprobe时指定参数强制忽略vermagic,但这样做的代价是如果使用错误版本的内核模块就可能导致内核崩溃。

继续阅读深入探究MODVERSIONS的实现原理

【Linux小技巧】秘密追踪——谁用了我的大宝?>v

如果宿舍里就你买了一瓶大宝,而且用了之后效果还挺不错。隔不久,你就发现最近这瓶大宝似乎用的有点快了,敢情是哪个哥们儿想买之前先试用一下?不巧的是,你恰好非常好奇这哥们儿是谁,想要搞一次秘密追踪。啥?指纹鉴别?噢,请原谅我没有那么专业的器材…… 不过土办法、馊主意我们还是有的:只要往大宝里掺和一点稀释过的辣椒水,隔天就等着找猴子屁股吧。^_+

扯太远了,其实本篇是想和大家分享一个在Linux下利用辣椒水的思路实现追踪程序被调用情况的小技巧。因为前段时间在分析Linux中各种内核模块被加载的方式、时间和源头。为此,我写了一个小小的Shell脚本:

继续阅读【Linux小技巧】秘密追踪——谁用了我的大宝?>v

在Linux中实现虚桩式内核模块

最近在把以前做的一个驱动程序在线加载技术移植到SuSE的AutoYaST安装系统中时遇到了一点小麻烦。AutoYaST采用SuSE自己编写的Linuxrc作为其初期引导部分,有别于大部分常规的initrd引导部分,Linuxrc是直接用C语言编写的,而且几乎没有提供什么扩充的灵活性。如此一来,就无法像以往移植到其它环境中那样单纯修改引导脚本就可以搞定。虽说直接修改Linuxrc的源码也可以达到这个目的,但这样就增加了后期维护的复杂度。唉,还真是个头疼的问题……

仔细分析了一下AutoYaST的设计,发现它至少还是允许增补驱动程序的,但仅仅支持最简单的用配置文件写死的insmod方式…… 好吧,只要还给了这个勉强算得上可扩充的途径,我一样能把驱动在线加载模块集成进来。由于只能固定调用某个驱动,所以必须从内核模块下手。把现有程序改造成内核模块显然是不现实的,好在Linux内核中还提供了这样一个调用用户态程序的接口:call_usermodehelper(),你可以在kmod.h中找到它。功能很简单,调用一个用户态程序,并且可以选择是否阻塞直到它执行完成。

继续阅读在Linux中实现虚桩式内核模块

Linux下可以替换运行中的程序么?

今天被朋友问及“Linux下可以替换运行中的程序么?”,以前依稀记得Linux下是可以的(而Windows就不让),于是随口答道“OK”。结果朋友发来一个执行结果:(test正在运行中)

# cp test2 test
cp: cannot create regular file `test': Text file busy

看起来是程序被占用,无法覆盖。于是自己又再做了几个实验:

(1)先rm删除正在运行的test,然后cp test2 test就没有错误了。
(2)先mv改名正在运行的test,然后cp test2 test也没有问题。

继续阅读Linux下可以替换运行中的程序么?

Linux启动时间的极限优化

在上次完成嵌入式应用的Linux裁减后,Linux的启动时间仍需要 7s 左右,虽然勉强可以接受,但仍然没有达到我个人所追求的目标——2s 以内。况且,在实际的商用环境中,设备可靠性的要求可是“5个9”(99.999%,即OOS时间低于5分钟/年),这就意味着每减少一秒钟Linux启动(设备复位)时间,对可靠性都是一个明显的提升。

言归正传,如何着手对Linux的启动时间进行优化呢?

继续阅读Linux启动时间的极限优化

从POST到Linux的一体化远程控制

  在上次初尝Remote KVM甜头的基础上,本着充分挖掘其实用价值的考虑,最近对这一技术又进行了深入的研究和尝试。

  在网上查阅了各种相关资料后,才知道上次所实现的串口终端功能的正式学名叫做“SREDIR (Serial Redirection,串口重定向)”,它是AMI在其最新的AMI BIOS 8系列中引入的一项新技术,可以看作是一个简化版的“Remote KVM”。主要实现了对字符界面显示输出及键盘输入的重定向到串口,它对于服务器群或者Blade Server来说是非常实用的功能。

  下面就让我来介绍一下如何利用这项技术实现从POST到Linux的全程串口控制。

继续阅读从POST到Linux的一体化远程控制

嵌入式应用Linux裁减的初次尝试

  前段时间因为嵌入式应用开发的需要,对Linux进行了一次大幅度的裁减。由于是初次接触Linux启动的核心部分,所以基本上还是对网上各种裁减方案的拼凑和整理,包含自己理解的部分实在很少。总的来说效果不算理想,后面还有很长的路要走。

这里就大致说说目前这个Linux裁减方案的“雏形”吧。

继续阅读嵌入式应用Linux裁减的初次尝试

路由器也能作虚拟主机?

Keywords: Wireless Router, Host Service, ASUS WL-700gE, Linux, Web Server

  看来我又一次低估华硕的创意了!

  还记得昨天提到的“关机也能BT——华硕的无限创意” ,这款产品特别的功能勾起了我的好奇心,今天在网上了解了一些详情后,发现原来它的功能还远不止“关机BT”那么单纯呢!

继续阅读路由器也能作虚拟主机?