docker笔记(2)——“docker daemon”,“image”和“container”

使用“service docker start”命令实际上是启动docker daemon程序,可以用“ps”命令查看一下:

[root@localhost ~]# ps -ef | grep docker
root     24791     1  0 Mar18 ?        00:00:03 /usr/bin/docker -d --selinux-enabled
root     24969 24950  0 03:25 pts/0    00:00:00 grep --color=auto docker

-d”选项表明开启daemon模式。

Docker中最重要的概念是imagescontainersimages可以比做虚拟机软件(VirtualBox或者VMware)的虚拟磁盘镜像文件(VirtualBox的格式是*.vdiVMware*.vmdk)。从images可以创建一个或多个containers进程,这个可以比做从虚拟磁盘镜像文件创建出虚拟机程序。

使用docker run命令可以创建一个containers,并且在containers中运行命令,如下所示:

[root@localhost ~]# docker run --rm -ti ubuntu /bin/bash
root@88129ebf9b61:/# ls

新的containers运行的是一个ubuntu镜像,并且进入bash交互模式。

docker笔记(1)—— RHEL 7.0安装docker

官方RHEL 7.0安装docker的文档在这里。由于这个需要用户注册,所以在这里我介绍另一种方法:使用CentOSdocker rpm包。

(1)CentOS的软件包在这里:http://cbs.centos.org/repos/virt7-testing/x86_64/os/,你可以配置到yum源(软件仓库)的配置文件里,类似这样:

[centos-extra]
name=centos extra
baseurl=http://cbs.centos.org/repos/virt7-testing/x86_64/os/
enabled=1
gpgcheck=0

(2)运行“yum install docker”命令。

(3)安装成功后,运行“docker version”命令:

[root@localhost yum.repos.d]# docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.3.3
Git commit (client): a8a31ef/1.5.0
OS/Arch (client): linux/amd64
FATA[0000] Get http:///var/run/docker.sock/v1.17/version: dial unix /var/run/docker.sock: no such file or directory. Are you trying to connect to a TLS-enabled daemon without TLS?

可以看到有“FATA[0000]......”提示,原因是没有启动docker daemon程序,使用“service docker start”可以启动docker程序。再次执行“docker version”命令:

[root@localhost bin]# docker version
Client version: 1.5.0
Client API version: 1.17
Go version (client): go1.3.3
Git commit (client): a8a31ef/1.5.0
OS/Arch (client): linux/amd64
Server version: 1.5.0
Server API version: 1.17
Go version (server): go1.3.3
Git commit (server): a8a31ef/1.5.0

可以看到“FATA[0000]......”提示没有了。

(4)接下来的步骤可参考这里

绿皮小火车

随着现在高铁,动车以及飞机的日益普及,小时候经常乘坐的绿皮小火车基本已经销声匿迹了。今年春节,我有幸又坐了一次绿皮小火车。

这趟绿皮小火车的管理比较松散,可以直接上车,然后再补票。其次由于需要站站停靠,所以运行时间也要多将近一倍,但相应的票价也便宜,为同样里程票价的一半。火车上的开水间使用的还是烧煤的锅炉,打热水需要自己拿钥匙打开锅炉房,这个也是我第一次见到。

如果你对火车运行时间没有要求,并且也不介意小火车上简陋的环境,我建议有机会可以试着体验一次这种绿皮小火车,因为它会带给你不一样的感觉和记忆。

Concurrency(并发)和Parallelism(并行)的解释

今天看到一个对Concurrency(并发)和Parallelism(并行)这两个术语的一个解释,感觉很精确。记录在此,以供日后查阅(原文在这里):

Concurrency and parallelism are two related but distinct concepts.

Concurrency means, essentially, that task A and task B both need to happen independently of each other, and A starts running, and then B starts before A is finished.

There are various different ways of accomplishing concurrency. One of them is parallelism--having multiple CPUs working on the different tasks at the same time. But that's not the only way. Another is by task switching, which works like this: Task A works up to a certain point, then the CPU working on it stops and switches over to task B, works on it for a while, and then switches back to task A. If the time slices are small enough, it may appear to the user that both things are being run in parallel, even though they're actually being processed in serial by a multitasking CPU.  

Concurrency(并发)是指系统上的多个task(任务)之间由于没有任何依赖关系,所以可以同时运行。以两个taskAB),两核CPUAB)系统为例,如果在一个时间点上,task ACPU A上运行,而task BCPU B上运行,我们就可以称这两个taskParallelism(并行)运行的。对单核CPU来说,由于在一个时间点上只能执行一个task,所以这两个task只能是Sequential(串行)运行的。

一句话总结,Concurrency(并发)描述了task之间的逻辑关系(能否同时运行),而Parallelism则描述了task运行时的真正状态(是否真的在同时运行)。

Perf笔记(二)

Perf_events所处理的hardware event(硬件事件)需要CPU的支持,而目前主流的CPU基本都包含了PMUPerformance Monitoring Unit,性能监控单元)。PMU用来统计性能相关的参数,像cache命中率,指令周期等等。由于这些统计工作是硬件完成的,所以CPU开销很小。

X86体系结构为例,PMU包含了两种MSRsModel-Specific Registers,之所以称之为Model-Specific,是因为不同modelCPU,有些register是不同的):Performance Event Select RegistersPerformance Monitoring CountersPMC)。当想对某种性能事件(performance event)进行统计时,需要对Performance Event Select Register进行设置,统计结果会存在Performance Monitoring Counter中。

perf_events工作在采样模式(samplingperf record命令即工作在这种模式)时,由于采样事件发生时和实际处理采样事件之间有时间上的delay,以及CPU流水线和乱序执行等因素,所以得到的指令地址IP(Instruction Pointer)并不是当时产生采样事件的IP,这个称之为skid。为了改善这种状况,使IP值更加准确,Intel使用PEBSPrecise Event-Based Sampling),而AMD则使用IBSInstruction-Based Sampling)。

PEBS为例:每次采样事件发生时,会先把采样数据存到一个缓冲区中(PEBS buffer),当缓冲区内容达到某一值时,再一次性处理,这样可以很好地解决skid问题。

执行一下perf list --help命令,会看到下面内容:

The p modifier can be used for specifying how precise the instruction address should be. The p modifier can be specified multiple times:

       0 - SAMPLE_IP can have arbitrary skid
       1 - SAMPLE_IP must have constant skid
       2 - SAMPLE_IP requested to have 0 skid
       3 - SAMPLE_IP must have 0 skid

For Intel systems precise event sampling is implemented with PEBS which supports up to precise-level 2.

现在可以理解,经常看到的类似“perf record -e "cpu/mem-loads/pp" -a”命令中,pp就是指定IP精度的。

Perf笔记(一)

Perf_events是目前在Linux上使用广泛的profiling/tracing工具,除了本身是内核(kernel)的组成部分以外,还提供了用户空间(user-space)的命令行工具(“perf”,“perf-record”,“perf-stat”等等)。

perf_events提供两种工作模式:采样模式(sampling)和计数模式(counting)。“perf record”命令工作在采样模式:周期性地做事件采样,并把信息记录下来,默认保存在perf.data文件;而“perf stat”命令工作在计数模式:仅仅统计某个事件发生的次数。

我们经常看到类似这样的命令:“perf record -a ...... sleep 10”。在这里,“sleep”这个命令相当于一个“dummy”命令,没有做任何有意义的工作,它的作用是让“perf record”命令对整个系统进行采样,并在10秒后自动结束采样工作。

MiB(Mebibyte)和 MB(Megabyte)

上周五和同事讨论问题时,自己才知道不仅有MBMegabyte),还有MiBMebibyte)。说来惭愧,以前看到同事ppt提到MiB,还以为是笔误呢。简单来讲,1MiB包含1024^2 bytes,自从MiB出现后,1MB更倾向于表示1000^2 bytes。同样道理,现在也有KibibyteGibibyte

参考资料:
What is the difference between 1 MiB and 1 MB and why should we care?
Mebibyte

往事如烟(五)——《杨家将》

我从小就对历史和古典文学很感兴趣,很小就听说过《杨家将》。但是首先家里没有相关的书,此外就算有书,由于是学生,一切以学习为主,大人也未见的会让读。

第一次接触到《杨家将》,是小学的一次“十一”假期,几年级记不清了。当时电视台播了3集,一集叫《战幽州》,还有一集叫《金沙滩》,有一集没看到名字,拍的特别精彩。看了这几集电视剧,才知道当时有个“扳倒井酒”广告的镜头都是取自于这部电视剧。后来在哥哥家的一本老的《大众电视》杂志上看到这个版本《杨家将》的介绍,不过介绍是4集,分别叫《战幽州》、《双龙会》、《舍子记》和《金沙滩》,也许我看到的版本把4集合成3集了。

第二次接触到《杨家将》,就是一年寒假,电视台播放了张绍林导演的32集电视连续剧《杨家将》。这部电视剧我从头到尾一集没有落下,拍的真不错。我记得一开学,男生们讨论的都是这个话题,还有同学在作文里都写到《杨家将》。前两年,我在某视频网站又找到了这部电视剧,看了几集,觉得依然很经典。就是放在现在,也比那些雷人历史电视剧好到不知多少倍。

后来,广播电台又播放田连元先生的评书《杨家将》。因为上学,只有周日才能听到,觉得很精彩。前两年,在网上下载到田先生这个版本,不过这个版本没有讲完(我也只听了40多讲,一共102讲),可能田先生也不会更新了,很是可惜。

将来有机会,也会考虑读一下不同版本的《杨家将》吧,算是为小时的自己圆一个梦。

2015春节读书小记

今年春节,读了两本书。写一篇小文,仅做为读后感。
第一本是马伯庸著的《马伯庸笑翻中国简史》。这本书是我第一次读到从“金,木,水,火,土”五德的角度讲述中国历史的书,角度很新颖,对这个角度感兴趣的朋友,可以考虑读一下。书不厚,只有200页,静下心读的话,一天就够了。
第二本是冯玉祥先生的《我所认识的蒋介石》。关于冯玉祥,蒋介石二人,我不敢妄加评论。抛开这本书的作者和所指人物(蒋介石)不谈,我倒是觉得上至国家公务员,下至一个普通公司的领导,都可以考虑读一下这本书,其中关于如何对待人民,如何领导团队等等观点,相信会有一些感悟和启发吧。