聊聊systemd


一、systemd的简介

systemd是linux的初始化启动系统,从当年的sysv init到upstart再到现在的systemd,可以说启动系统在不断的优化启动效率。当年的sysvint在启动系统的时候,使用的是串行启动的方式,也就是每个服务必须在等待前面的服务系统启动完毕再进行启动。这样就大大增加了启动时间。upstart使用的是半并行的事件触发机制,也就是说只要不需要依赖的都独立出来并行启动,这种方式比之前的sysvinit的方式快了很多,但是在某种程度上来说,还是局部串行的,也就是存在依赖的处理程序还需要一个接一个的进行启动。有没有办法将需要依赖的程序也并行起来独立启动呢?这个时候就诞生了systemd。

二、linux系统的启动过程

既然是初始化启动程序,必须先从开机说起,开机后首先是进行post上电自检,也就是检测cpu,磁盘,内存条,主板等有没有坏掉,然后是bios读取设备的设置并把系统管理控制权交给MBR,MBR读取Bootloader管理器(我们一般使用Grub)引导程序的相关信息,然后进行初始化内核,并进行第二次硬件自检,当内核文件

而Grub作为引导程序,会在配置文件里面说明引导管理程序,这里我们用的是systemd,在systemd启动管理里面会去启动相应的系统挂载和服务。在upstart系统系统中会依次启动/etc/rc[0-6].d的文件,而在systemd系统中执行的是.target文件,这两种方式的区别是第一种的runlevel是串行依次执行的,第二种是可以并行执行的。这里的target代表的是一个包含多个unit组,也就是含有不同资源的包。

unit一共分成12种:

Service unit:系统服务

Target unit:多个 Unit 构成的一个组

Device Unit:硬件设备

Mount Unit:文件系统的挂载点

Automount Unit:自动挂载点

Path Unit:文件或路径

Scope Unit:不是由 Systemd 启动的外部进程

Slice Unit:进程组

Snapshot Unit:Systemd 快照,可以切回某个快照

Socket Unit:进程间通信的 socket

Swap Unit:swap 文件

Timer Unit:定时器

传统的runlevel和target的对照表

Traditional runlevel      New target name     Symbolically linked to...

Runlevel 0           |    runlevel0.target -> poweroff.target

Runlevel 1           |    runlevel1.target -> rescue.target

Runlevel 2           |    runlevel2.target -> multi-user.target

Runlevel 3           |    runlevel3.target -> multi-user.target

Runlevel 4           |    runlevel4.target -> multi-user.target

Runlevel 5           |    runlevel5.target -> graphical.target

Runlevel 6           |    runlevel6.target -> reboot.target

三、systemd的优化

优化启动方式的三个方向:socket通信依赖,文件系统依赖,D-bus依赖

socker通信依赖:

因为绝大多数的服务依赖是socket依赖,可能某一个通信服务需要另一个服务开启才能通信,这样一来假如这个需要通信依赖没有开启就去通信的话就会报错。那么有没有办法同时开启这些服务,在这些服务完全开启后再进行通信。这里systemd的办法是将请求服务先存放到linux系统的缓存里面,当真正完全开启后再去请求缓存进行通信。这样就避免了不同服务同时开启后带来的请求失败的错误,从而可以让有socket依赖的服务也能够并行开启

文件系统依赖:

在系统的启动过程中,有很大部分时间是在进行文件系统检测,这些活动执行时系统是处于空闲状态的,因为有些服务必须要挂载了才能使用。所以有没有可能在这个时候同时启动这些需要文件系统挂载后才能执行的服务?systemd里面的设计就是创建一个临时的挂载点,按需挂载,服务要什么挂载,就挂载什么。等到文件系统的检测和挂载全部完成后再切换到真正的挂载点。这样就实现了有依赖文件系统的服务也能在文件系统检测挂载时同时启动

D-bus依赖:

D-bus是一个高效的进程间通信机制,也用于应用程序和内核通信。当我们A,B要进行通信时,A启动了,B没有启动,那么这个时候”bus activation“功能就开启了,A会去拉起服务B,并且请求会被D-bus缓存。服务A等待服务B就绪。这样也就解决了进程通信依赖造成的无法同步的问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容

  • 最近在研究Docker的源码.读到ApiServer的启动过程时,发现其有一个新的概念,叫做service act...
    AlstonWilliams阅读 1,107评论 1 4
  • muahao阅读 2,054评论 0 3
  • systemd攻略 转自http://www.jianshu.com/p/d5305104d03a或者这个http...
    x1596357阅读 2,825评论 0 3
  • systemd攻略 相关文档 arch 的 systemd 说明页面 (简体中文) fedora 的 system...
    muahao阅读 11,550评论 0 12
  • 启动流程:POST --> Boot Sequence --> Bootloader --> kernel +in...
    尛尛大尹阅读 1,001评论 0 1