2012年5月3日

Linux Namespaces机制

摘要: LinuxNamespaces机制提供一种资源隔离方案。PID,IPC,Network等系统资源不再是全局性的,而是属于特定的Namespace。每个Namespace里面的资源对其他Namespace都是透明的。要创建新的Namespace,只需要在调用clone时指定相应的flag。LinuxNamespaces机制为实现基于容器的虚拟化技术提供了很好的基础,LXC(Linuxcontainers)就是利用这一特性实现了资源的隔离。不同container内的进程属于不同的Namespace,彼此透明,互不干扰。下面我们就从clone系统调用的flag出发,来介绍各个Namespace。当调 阅读全文
posted @ 2012-05-03 11:16 lisperl 阅读(25029) 评论(2) 推荐(4) 编辑
2012年5月2日

Linux Cgroups详解(九)

摘要: cpuset子系统cpuset子系统为cgroup中的任务分配独立CPU(在多核系统)和内存节点。Cpuset子系统为定义了一个叫cpuset的数据结构来管理cgroup中的任务能够使用的cpu和内存节点。Cpuset定义如下:structcpuset{structcgroup_subsys_statecss;unsignedlongflags; /*"unsignedlong"sobitopswork*/cpumask_var_tcpus_allowed; /*CPUsallowedtotasksincpuset*/nodemask_tmems_allowed; /*Me 阅读全文
posted @ 2012-05-02 12:25 lisperl 阅读(9291) 评论(0) 推荐(2) 编辑
2012年4月28日

Linux Cgroups详解(八)

摘要: memory子系统memory子系统可以设定cgroup中任务使用的内存限制,并自动生成由那些任务使用的内存资源报告。memory子系统是通过linux的resourcecounter机制实现的。下面我们就先来看一下resourcecounter机制。resourcecounter是内核为子系统提供的一种资源管理机制。这个机制的实现包括了用于记录资源的数据结构和相关函数。Resourcecounter定义了一个res_counter的结构体来管理特定资源,定义如下:structres_counter{unsignedlonglongusage;unsignedlonglongmax_usage 阅读全文
posted @ 2012-04-28 11:59 lisperl 阅读(6947) 评论(0) 推荐(3) 编辑
2012年4月26日

Linux Cgroups详解(七)

摘要: ns子系统ns子系统是一个比较特殊的子系统。特殊在哪儿呢,首先ns子系统没有自己的控制文件,其次ns子系统没有属于自己的状态信息,这点从ns子系统的ns_cgroup的定义可以看出:structns_cgroup{structcgroup_subsys_statecss;};它只有一个cgroup_subsys_state成员。最后ns子系统的实现也比较简单,只是提供了一个ns_cgroup_clone函数,在copy_process和unshare_nsproxy_namespaces被调用。而ns_cgroup_clone函数本身的实现也很简单,只是在当前的cgroup下创建了一个子cgr 阅读全文
posted @ 2012-04-26 17:37 lisperl 阅读(6102) 评论(0) 推荐(2) 编辑
2012年4月25日

Linux Cgroups详解(六)

摘要: freezer子系统freezer子系统用于挂起和恢复cgroup中的进程。freezer有一个控制文件:freezer.state,将FROZEN写入该文件,可以将cgroup中的进程挂起,将THAWED写入该文件,可以将已挂起的进程恢复。该文件可能读出的值有三种,其中两种就是前面已提到的FROZEN和THAWED,分别代表进程已挂起和已恢复(正常运行),还有一种可能的值为FREEZING,显示该值表示该cgroup中有些进程现在不能被frozen。当这些不能被frozen的进程从该cgroup中消失的时候,FREEZING会变成FROZEN,或者手动将FROZEN或THAWED写入一次。F 阅读全文
posted @ 2012-04-25 12:31 lisperl 阅读(7958) 评论(0) 推荐(2) 编辑
2012年4月24日

Linux Cgroups详解(五)

摘要: devices子系统使用devices子系统可以允许或者拒绝cgroup中的进程访问设备。devices子系统有三个控制文件:devices.allow,devices.deny,devices.list。devices.allow用于指定cgroup中的进程可以访问的设备,devices.deny用于指定cgroup中的进程不能访问的设备,devices.list用于报告cgroup中的进程访问的设备。devices.allow文件中包含若干条目,每个条目有四个字段:type、major、minor和access。type、major和minor字段中使用的值对应Linux分配的设备。typ 阅读全文
posted @ 2012-04-24 15:33 lisperl 阅读(8079) 评论(0) 推荐(1) 编辑
2012年4月23日

Linux Cgroups详解(四)

摘要: 子系统的实现cpu子系统cpu子系统用于控制cgroup中所有进程可以使用的cpu时间片。附加了cpu子系统的hierarchy下面建立的cgroup的目录下都有一个cpu.shares的文件,对其写入整数值可以控制该cgroup获得的时间片。例如:在两个cgroup中都将cpu.shares设定为1的任务将有相同的CPU时间,但在cgroup中将cpu.shares设定为2的任务可使用的CPU时间是在cgroup中将cpu.shares设定为1的任务可使用的CPU时间的两倍。cpu子系统是通过LinuxCFS调度器实现的。所以在介绍cpu子系统之前,先简单说一下CFS调度器。按照作者Ingo 阅读全文
posted @ 2012-04-23 17:27 lisperl 阅读(11212) 评论(3) 推荐(4) 编辑

Linux Cgroups详解(三)

摘要: Cgroup文件系统Cgroups用户空间管理Cgroups用户空间的管理是通过cgroup文件系统实现的。比如要创建一个层级:mount-tcgroup-ocpu,cpuset,memorycpu_and_mem/cgroup/cpu_and_mem这个命令就创建一个名为cpu_and_mem的层级,这个层级上附加了cpu,cpuset,memory三个子系统,并把层级挂载到了/cgroup/cpu_and_mem.创建一个cgroup:cd/cgroup/cpu_and_memmkdirfoo通过以上两个命令,我们就在刚才创建的层级下创建了一个叫foo的cgroup。你再cdfoo,然后l 阅读全文
posted @ 2012-04-23 11:13 lisperl 阅读(17986) 评论(5) 推荐(8) 编辑
2012年4月19日

LXC 网络配置实例(Redhat)

摘要: LXC为容器提供了独立的网络空间,这意味着我们可以为容器配置IP地址,MAC地址,route表等等,并通过LXC提供的几种方式连接到宿主进而连到互联网。下面介绍两种采用网桥方式连接到宿主机的配置情况。情况一:采用静态IP地址,即宿主本身的IP地址是由系统管理员手动配置的,容器的IP地址也是静态指定。宿主机的配置:vim/etc/sysconfig/network-scripts/ifcfg-eth0DEVICE=eth0ONBOOT=yesBOOTPROTO=noneUSERCTL=noBRIDGE=br0vim/etc/sysconfig/network-scripts/ifcfg-br0D 阅读全文
posted @ 2012-04-19 11:27 lisperl 阅读(14433) 评论(0) 推荐(1) 编辑
2012年4月18日

Linux Cgroups详解(二)

摘要: cgroups 数据结构设计我们从进程出发来剖析cgroups相关数据结构之间的关系。在Linux中,管理进程的数据结构是task_struct,其中与cgroups有关的:#ifdef CONFIG_CGROUPS /* Control Group info protected by css_set_lock */ struct css_set *cgroups; /* cg_list protected by css_set_lock and tsk->alloc_lock */ struct list_head cg_list;#endif其中cgroups指针指向了一个css_s 阅读全文
posted @ 2012-04-18 11:30 lisperl 阅读(13463) 评论(0) 推荐(4) 编辑
2012年4月17日

Linux Cgroups详解(一)

摘要: Cgroups是什么?Cgroups是controlgroups的缩写,是Linux内核提供的一种可以限制、记录、隔离进程组(processgroups)所使用的物理资源(如:cpu,memory,IO等等)的机制。最初由google的工程师提出,后来被整合进Linux内核。Cgroups也是LXC为实现虚拟化所使用的资源管理手段,可以说没有cgroups就没有LXC。Cgroups可以做什么?Cgroups最初的目标是为资源管理提供的一个统一的框架,既整合现有的cpuset等子系统,也为未来开发新的子系统提供接口。现在的cgroups适用于多种应用场景,从单个进程的资源控制,到实现操作系统层 阅读全文
posted @ 2012-04-17 16:05 lisperl 阅读(38911) 评论(5) 推荐(6) 编辑
2012年4月16日

LXC(Linux containers)配置文件简介

摘要: LXC配置文件的man page :http://manpages.ubuntu.com/manpages/natty/man5/lxc.conf.5.htmlLXC配置项都是以key=value的形式,#开始的一行代码注释。配置也可以在lxc-execute或者lxc-start的命令行以-s key=value设定这里介绍一下常用的配置:1.Cgroup部分(所有Cgroup子系统的配置参数均可以通过lxc-cgroup 命令进行动态获得或者调整)LXC采用Cgroup来对容器进行资源管理,因此Cgroup的各个子系统均可以使用。实际上使用LXC之前,必须执行mount none -t c 阅读全文
posted @ 2012-04-16 09:43 lisperl 阅读(19175) 评论(5) 推荐(2) 编辑
2012年4月15日

LXC(Linux containers)快速入门

摘要: 1.LXC是什么?LXC是Linux containers的简称,是一种基于容器的操作系统层级的虚拟化技术。2.LXC可以做什么?LXC可以在操作系统层次上为进程提供的虚拟的执行环境,一个虚拟的执行环境就是一个容器。可以为容器绑定特定的cpu和memory节点,分配特定比例的cpu时间、IO时间,限制可以使用的内存大小(包括内存和是swap空间),提供device访问控制,提供独立的namespace(网络、pid、ipc、mnt、uts)。3.LXC如何实现?Sourceforge上有LXC这个开源项目,但是LXC项目本身只是一个为用户提供一个用户空间的工具集,用来使用和管理LXC容器。LX 阅读全文
posted @ 2012-04-15 14:31 lisperl 阅读(56936) 评论(1) 推荐(5) 编辑
2012年4月13日

LXC(Linux containers)常用命令介绍

摘要: lxc-version 用于显示系统LXC的版本号(可以通过此命令判断系统是否安装了lxc)用法:lxc-version例如:lxc-versionlxc-checkconfig 用于判断linux内核是否支持LXC用法:lxc-checkconfig例如:lxc-checkconfiglxc-create用于创建一个容器用法:lxc-create -n name [-f config_file] -n 后面跟要创建的容器名字 例如:-n foo -f 后面跟容器配置文件的路径注:1.采用lxc-create创建的容器,在停止运行后,不会被销毁,要采用lxc-destroy命令才能销毁 2.容 阅读全文
posted @ 2012-04-13 17:47 lisperl 阅读(24306) 评论(0) 推荐(2) 编辑
2012年2月27日

Cgroup和LXC(Linux containers)安装详解(Centos 6.2)

摘要: 系统:Centos 6.2系统依赖:gcc:yum install gcclibcap-devel:yum install libcap-devel安装Cgroupyum install libcgroup安装LXC从sourceforge上下载源代码:sourceforge.net/projects/lxc/files/lxc解压进入解压后的目录执行以下命令./configuremakemake install注意:make install 后,默认是把lxc相关的命令拷贝到了/usr/local/bin,如果你没有把/usr/local/bin加入到PATH,你使用lxc命令时,系统会说找 阅读全文
posted @ 2012-02-27 12:55 lisperl 阅读(12957) 评论(2) 推荐(1) 编辑