时间 2015-04-20 21:10:00 InfoQ 原文  http://www.infoq.com/cn/articles/docker-kernel-knowledge-cgroups-resource-isolation 主题 Cgroups Docker 上一篇中,我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建一个相对隔离的shell环境,也可以称之为一个 简单的“容器”.本文我们则要开始讲解另一个强大的内核工具——cgroups.他不仅可以限制被…
cgroups资源限制 上一节中Docker背后的内核知识(一),我们了解了Docker背后使用的资源隔离技术namespace,通过系统调用构建了一个相对隔离的shell环境,也可以称之为简单的“容器”.这一节将讲解另一个强大的内核工具——cgroups.它不仅可以限制被namespace隔离起来的资源,还可以为资源设置权重.计算使用量.操控任务(进程或线程)开启和暂停等等.在介绍完基本概念后,将详细讲解Docker中使用到的cgroups内容. cgroups是什么cgroups(Contr…
Docker背后的内核知识 当谈论Docker时,常常会聊到Docker的实现方式.很多开发者都知道,Docker容器本质上是宿主机上的进程.Docker通过namespace实现了资源隔离.通过cgroups实现了资源限制,通过写时复制机制实现了高效的文件操作.但更进一步深入namespace和cgroups等技术细节时,大部分开发者都会感到茫然无措.所以在这里,先带领大家走进Linux内核,了解namespace和cgroups的技术细节. namespace资源隔离 想要要实现一个资源隔离…
参考URL: https://linux.cn/article-5057-1.html 实现代码(网络和用户空间只是看懂了) 实际上,Linux内核实现namespace的主要目的就是为了实现轻量级虚拟化(容器)服务.在同一个namespace下的进程可以感知彼此的变化,而对外界的进程一无所知.这样就可以让容器中的进程产生错觉,仿佛自己置身于一个独立的系统环境中,以此达到独立和隔离的目的. 需要说明的是,本文所讨论的namespace实现针对的均是Linux内核3.8及其以后的版本. Names…
http://www.infoq.com/cn/articles/docker-resource-management-cgroups 随着Docker技术被越来越多的个人.企业所接受,其用途也越来越广泛.Docker资源管理包含对CPU.内存.IO等资源的限制,但大部分Docker使用者在使用资源管理接口时往往只知其然而不知其所以然. 本文将介绍Docker资源管理背后的Cgroups机制,并且列举每一个资源管理接口对应的Cgroups接口,让Docker使用者对资源管理知其然并且知其所以然.…
Libcontainer 是Docker中用于容器管理的包,它基于Go语言实现,通过管理namespaces.cgroups.capabilities以及文件系统来进行容器控制.你可以使用Libcontainer创建容器,并对容器进行生命周期管理. 容器是一个可管理的执行环境,与主机系统共享内核,可与系统中的其他容器进行隔离. 在2013年Docker刚发布的时候,它是一款基于LXC的开源容器管理引擎.把LXC复杂的容器创建与使用方式简化为Docker自己的一套命令体系.随着Docker的不断发…
PS:欢迎大家关注我的公众号:aCloudDeveloper,专注技术分享,努力打造干货分享平台,二维码在文末可以扫,谢谢大家. 推荐大家到公众号阅读,那里阅读体验更好,也沉淀了很多篇干货. 前面两篇文章我们总结了 Docker 背后使用的资源隔离技术 Linux namespace. Docker 基础技术之 Linux namespace 详解 Docker 基础技术之 Linux namespace 源码分析 本篇将讨论另外一个技术--资源限额,这是由 Linux cgroups 来实现的…
原文: http://www.sizeofvoid.net/goroutine-under-the-hood/ 文章写的非常好, 对内部原理解释的非常清楚, 是我喜欢的风格, 感谢作者的精彩文章. ================================================== Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实…
http://www.sizeofvoid.net/goroutine-under-the-hood/ o语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述.希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识. 1. 操作系统与运行库 2. 并发与并行 (Concurrency and Paral…
内核知识第八讲,PDE,PTE,页目录表,页表的内存管理 一丶查看GDT表. 我们通过WinDbg + 虚拟机可以进行双机调试.调试一下看下GDT表 我们知道,GDT表中.存储的是存储段信息. 保存了一系列的段和内存的属性. 但是微软并没有使用. 我们可以通过ring3的段寄存器. 当作GDT表的下标.进行查表. 查询GDT表. 例如我们用OD随便打开一个ring3的exe,然后看下段和虚拟地址.: 虚拟地址: 0040256f  段选择子: cs:1B 那么此时段选择字当下表.虚拟地址当作偏移…
内核知识第六讲,内核编写规范,以及获取GDT表 一丶内核驱动编写规范 我们都知道,在ring3下,如果我们的程序出错了.那么就崩溃了.但是在ring0下,只要我们的程序崩溃了.那么直接就蓝屏了. 那么有那些规范? 1.最基本的检查要有. 比如检查指针是否为NULL,基本的校验错误必须有 2.对内存进行操作的时候,要进行内存判断.下面提供内存判断的API BOOLEAN MmIsAddressValid( IN PVOID VirtualAddress ); 给定一个缓冲区,然后检查其内存是否有效…
本文转自:http://mp.weixin.qq.com/s/aAHbybdbs_GtY8OyU6h5WA 专题 | 深度强化学习综述:从AlphaGo背后的力量到学习资源分享(附论文) 原创 2017-01-28 Yuxi Li 机器之心 选自arXiv 作者:Yuxi Li 编译:Xavier Massa.侯韵楚.吴攀   摘要 本论文将概述最近在深度强化学习(Deep Reinforcement Learning)方面喜人的进展.本文将从深度学习及强化学习的背景知识开始,包括了对实验平台的…
官方文档地址:https://www.docker.com/get-started 中文参考手册:https://docker_practice.gitee.io/zh-cn 笔记原作者:陈艳男 B站主页,更多笔记下载 什么是 Docker Docker是一款开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或 Windows机器上.他基于虚拟化技术为每个镜像创建独立的容器,相互之间不干扰,可以做到秒级启动程序. 最新官网首页:https…
内核知识第12讲,SSDT表.以用户模式到系统模式的两种方式. 一丶IDT解析. 我们知道.IDT表中存放着各种中断信息.比如当我们调用int 3的时候,则会调用IDT表中的第三项来进行调用. 而函数地址则是操作系统给的. 因为中断是CPU和操作系统通信的一种方式. 查看IDTR  (IDT表)第三项. IDT首地址给出了,其中表项是7ff 我们每一项是8个字节,所以 7ff/8 = 255 项.也就是IDT表中是0-256 其中重要的是有个int 3 我们对其 u,则可以看int 3的指令的.…
docker 限制容器能够使用的内存,CPU,I/O 资源概述,内存是非可压缩资源,cpu是可压缩资源. 内存用超了,就发送Out Of Memory Exception,容器会被kill掉.所以内存是不可压缩资源. cpu用超了,就在那里等待就好,容器不会被kill掉.所以CPU是可压缩资源. 一,控制容器所能使用的内存,内存分2部分,一部分是ram,一部分是swap -m/--memory bytes: 指定ram的大小 --memory-swap bytes:指定swap的大小.前提是先指…
1.前提说明 1.CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 2.前提条件:内核要求 目前,CentOS 仅发行版本中的内核支持 Docker. Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上. Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位.系统内核版本为 2.6.32-431 或…
最开始写这篇文章的时候,凭着自己对汇编的一点理解就堆出了这些内容,经 egmkang的指点,才发觉自己是井底之蛙,花了半天的功夫,去学习顺序点等内容.针对上次写的程序,我决定添一些内容,把程序2后面的汇编的东西整出来,整理下思路,希望大家看得懂. 下面是第一稿的内容,原封不动 C++中的cout是最常见的,假如cout后面有多个输出的话,他们的输出顺序是什么呢?决定他们输出顺序背后的原理是什么呢?先看下面的代码(1): #include<iostream> using namespace st…
访问共享资源的代码区域称为临界区,临时以某种互斥机制加以保护.中断屏蔽.原子操作 自旋锁和信号量是Linux设备驱动中可采用的互斥途径. 在单CPU范围内避免竞态的一种简单方法是在进入临界区之前屏蔽系统的中断. CPU一般都具备屏蔽中断和打开中断的功能. 中断屏蔽的使用方法: Local_irq_disable();  //屏蔽中断--->和它不同的是local_irq_save除了禁止中断操作以外还可以保存目前CPU的中断位信息 ...... 临界区 ...... Local_irq_enab…
Block IO:指的是磁盘的读写,docker 可以通过设置权重,限制bps和iops的方式控制容器读写磁盘的带宽 注:目前block IO限额只对direct IO(不使用文件缓存)有效. 1.Block IO权重:--blkio-weight,这个--blkio-weight的权重值在  10~1000之间 和容器cpu的使用机制是一致的,所有容器都可以平等的读写磁盘,可以通过--blkio-weight参数来改变容器的优先级 --blkio-weight和-c类似,设置的都是资源使用的权…
默认情况下,所有容器可以平等的使用host上的CPU资源并没有限制 1.docker可以通过-c或者--cpu-shares设置容器使用的权重.如果不指定,默认值为1024. 与内存的限额不同,通过-c设置的cpu share并不是CPU资源的绝对数量,而是一个相对的权重值.某个容器最终能分到的CPU资源取决于它的cpu share占所有容器cpu share总和的比例. 直白点说:通过cpu share可以设置容器使用CPU的优先级. 例如:我们运行两个容器,一个限制CPU的权重为1024,一…
Docker - How to cleanup resources 有时你可能需要清理Docker中不用的资源,特别是在学习Docker过程中创建的镜像.容器.网络.存储卷等. delete volumes 删除挂载的存储卷 $ docker volume rm $(docker volume ls -qf ) delete networks 删除创建的网络 $ docker network ls $ docker network ls | grep "bridge" $ docker…
一.安装 & 启动 1.安装Docker [root@tokyo ~]# yum install docker 2.启动Docker服务 (1)旧式的 sysv 语法 [root@tokyo ~]# service docker start ##启动 [root@tokyo ~]# chkconfig docker on ##开机启动 (2)CentOS7中支持的新式 systemd 语法 [root@tokyo ~]# systemctl start docker.service [root@…
一.运行docker Linux内核版本需要在3.8以上,针对centos6.5 内核为2.6的系统需要先升级内核.不然会特别卡 在yum的ELRepo源中,有mainline(4.5).long-term(4.4)这2个内核最新版本,考虑到long-term更稳定,会长期更新,所以选择这个版本.(在 http://hkg.mirror.rackspace.com/elrepo/kernel/el7/x86_64/RPMS/ 能查看最新内核版本) 1.查看当前版本: [root@localhos…
前面我们已经分享过几篇Kafka的文章,最近简单梳理了下Kafka内核相关的知识,涵盖了Kafka架构总结,副本机制,控制器,高水位机制,日志或消息存储,消息发送与消费机制等方面知识.文末含对应的Kafka内核思维导图,供参考. 1.架构总结 1)Kafka实际上也是一个主从架构,有一个Controller角色即控制器,协调管理整个集群:2)有几个Kafka术语肯定是不陌生的:broker,topic,partition,segment,生产者producer,消费者consumer: 2.消费…
Web App:1.开发成本较低使用web开发技术就可以轻松的完成web app的开发2.升级较简单升级不需要通知用户,在服务端更新文件即可,用户完全没有感觉3.维护比较轻松和一般的web一样,维护比较简单,它其实就是一个站点Webapp说白了就是一个针对Iphone.Android优化后的web站点,它使用的技术无非就是HTML或HTML5.CSS3.JavaScript,服务端技术JAVA.PHP.ASP.当然,因为这些高端智能手机(Iphone.Android)的内置浏览器都是基于webk…
版本 linus树 Linux内核最初创始人--Linus Torvalds管理一个Linus树,linus树也称为主线(mainline).一般指的upstream,"上游",也指这个linus树或者各种开发树. linus树是以2.6.x这样的三个数字来表示.比如Linux 2.6.18-164.el5xen 的linus树中的内核版本就是2.6.18 stable树 这个是针对某个具体的内核版本进行bug修复,使其更加稳定的树.这个树的版本号是在linus树的版本号后加一个数字.…
1.先是在Mac上安装. 按照这两个就可以很简单的完成 https://docs.docker.com/docker-for-mac/ https://docs.docker.com/docker-for-mac/install/ 2.因为在一款做笔记软件上做的笔记,比较懒,就直接截图贴图了.…
镜像文件上传到私有仓库harbor后,镜像的物理存储位置在哪里? 这些信息记录在docker-compose.yml里,通过观察发现 镜像存储在了宿主机的 volumes: - /data/registry:/storage:z 这个位置, 所以删除 harbor不会删除数据.因为数据被持久化到了宿主机的制定目录下了 [root@ harbor]# cat docker-compose.yml version: ' services: log: image: goharbor/harbor-lo…
Docker 是一个开源项目,基于 Go 语言实现,是一套轻量级的操作系统虚拟化解决方案.用户操作 Docker 的容器就像操作一个快速轻量级的虚拟机一样简单. Docker通常用于如下场景: web应用的自动化打包和发布: 自动化测试和持续集成.发布: 在服务型环境中部署和调整数据库或其他的后台应用: 从头编译或者扩展现有的OpenShift或Cloud Foundry平台来搭建自己的PaaS环境. Docker有三个组件和三个基本元素. 三个组件分别是: Docker Client 是用户界…
目录 一.容器核心技术 1.容器规范 2.容器 runtime 3.容器管理工具 4.容器定义工具 5.Registry 6.容器 OS 二.说说容器 1.什么是容器 Containers vs. virtual machines 2.为什么使用容器 3.容器的优势 对于开发人员 对于运维人员 一.容器核心技术 一谈到容器,我们都会想到 Docker. Docker 现在几乎是容器的代名词.确实,是 Docker 将容器技术发扬光大.同时,我们也需要知道围绕 Docker 还有一个生态系统.Do…