15.7 研发心得——最好版本的台前幕后

15.7 终于如期地发布了……好吧,也就晚了2个工作日……毕竟这么好的版本,多等两天也可以的,对吧。需要多解释一句的是,我们之所以也没有按照往常的套路——拖到周五发,是因为周五刚好是情人节,毕竟程序员找个女朋友不容易,所以就拖了两天……这应该是个好借口吧 :P

发完系统第一件事情当然就是写《研发心得》咯,不知道从什么时候开始,《研发心得》成了发布标配,上午发系统,晚上就要《研发心得》,我只能微笑着说……嗯,挺好的!不过虽说是研发心得,但是别人看了我的心得以后都说像软文。我的想法是这样的:像软文就像软文嘛,让各位支持deepin的朋友看得舒舒服服的同时还能了解新功能,多好!

不过这次我准备换个风格,重点是真实。所以,这次的心得我准备说说 15.7 这个版本的台前幕后。

台前&幕后

“这是我用过的最好的deepin版本”。

我预测应该有很多用户会跟我有同样的想法,毕竟,对于发了这么多版本的我来说,15.7 是第一个版本让我有重新完整安装一次这样冲动的版本。三年多以来,每逢系统发布前,我都会挑一个良辰吉日加上一个好时间,这个时间其实主要取决于版本发布的延期情况而定,隆重地安装一下即将发布的新版本的ISO,说是为了测试一下其实是骗人的,毕竟我也测试不出什么bug来……主要是装一下心里面爽啊,你们要明天才能下载,我今天就用上了,呵呵呵……

虽说每次的ISO我都安装过,但是我从来没有舍得把我现在在用的系统格式化掉重新安装,因为这个老家伙从deepin切换仓库到Debian我重新安装了一次系统开始就一直陪伴着我,没有必要的话,我是想一直让它继续往上升级的。直到这次15.7发布,我感觉它又是一次值得纪念的发布才想着来一次完整重装,不过冲动归冲动,我还是按捺住了心中那团火——还是没有重新安装,因为思来想去,升级上来的也是一样的嘛 :)

这次升级可以分为两大部分,一部分是DDE的优化,另一部分是仓库同步Debian上游。从一个用户的角度出发,我觉得吸引我的地方,或者说值得用户期待的地方主要有这么几个:

更快的启动速度

这个主要得益于“林姐”亲自操刀的文件预热技术warm-sched,它主要的原理是这样的,大家知道操作系统在启动的过程中,会进行大量的IO操作,这个在CPU性能不是问题的平台上就是启动慢的罪魁祸首了,大家还知道Linux内核其实本身是有文件缓存机制的,被缓存的文件访问会非常非常快,所以如果我们在系统加载的适当时候能进行一定的预热,那么系统加载的时间当然就会大大缩短了。

不过这个会导致的一个问题就是,用户登录的速度变得飞快(从原来的10s+变成3s),但是系统好像在deepin水波纹的时间似乎更长了,其实不用”似乎“,真的会这样,文件预热技术不是神话,它没办法吃掉那部分加载文件的时间,它能做到的只是在合适的时间点预热下一个阶段需要的文件。

”这不是拆东墙补西墙么?“你可能会这么问,但是我要告诉你还真不是,如果没有预热,系统加载文件的过程是”乱序“的,这里的乱序是指文件存放不一定是顺序存放在磁道上的,乱序的文件访问会导致磁盘访问的过程中转来转去的,效率低下;相反,warm-sched不仅只是对文件预热,加载的过程可以保证磁盘的顺序访问,文件多了的话,这部分优化还是比较可观的……

我记得以前有位同事总是喜欢开玩笑说”苍蝇也是肉啊“,当时在饭桌上没少让人倒胃口,但是这句话用在性能优化、以及上面这个例子上算是再合适不过了。

更少的资源占用

首先是电量,如果你是笔记本的话,应该能感受到笔记本续航的提升,deepin测试人员实测的数据是以前3小时续航能力的笔记本,待机会多出30分钟+的时间,也就是提升差不多有17%,跟使用powerstat这个工具测试的效果基本相差不大。那是不是原来待机4个小时的笔记本,也只会多出30分钟的续航时间呢?并不是的,因为这是一个功耗比例上的变化,这次优化以后理论上可以增加的待机时间就是 原来的待机时间x17% 了,如果你的电池健康程度够的话,应该能有更大的优化效果。

不过,这些都是在使用电池的情况下的数据,因为默认情况下deepin系统只有在拔掉电源的情况下才会自动进入节能模式,如果你想在连接电源的情况下也开启节能模式,我是说假如你真这么环保的话,你可以在控制中心的电源模块手动打开节能模式;相反,如果你像我一样不在乎耗电,只追求卓越的性能,你也可以随时把节能模式关掉,大丈夫就是这么帅,不怕编译的时候机器烫手;总之,由着你的性子来!

另外一个能明显感受到的变化是开机内存的减少,这里所说的开机内存是指在没有任何开机启动项的情况下,DDE达到稳定状态的一个内存值,由原来的 1.1G 占用降低到 830M 左右,在使用独显的情况下,内存占用会更低,简直令人发指!好处是什么呢?更低的内存占用意味着DDE变得更加轻量,应用程序可以占用更多的系统资源,例如你是chrome这个内存占用大户的用户,15.7 可以让你在系统不变卡的情况下多开十来个标签页呢,是不是很开心?

不过做这些优化的过程中最让我感到意外的是DDE对电量消耗的“助攻”竟然没有大家预想的那么多,进程抽风性地CPU占用高、间歇性地进程状态切换等居然连硬件功耗的零头都占不到,不过该改的地方一个都不少,所以,DDE 的CPU占用高的问题在15.7中也可以不用再见了。

更新的软件和驱动

这个就不用多说了,搭载了Debian上游最新的一波升级,你想要的“更新的软件”、“更新的驱动”统统都给你,就是这么大方!而且,这次你收到的不仅仅是一次更新带来的快感,更是deepin更新会变得更加快、准、狠的承诺。在15.7的需求中我们争论了好多次,一方说已经有太多用户吐槽我们软件不够新、基础库不够新,用户需要新的软件;另一方说更新太快容易导致用户环境不稳定,我们毕竟是一个面向普通用户的发行版;争论不休,都可以开一个深度辩论赛了……最后终于达成一致,我们希望能更快速的将软件更新推送给用户,不再一次性积累大批量的更新,同时保证一定的节奏,确保快速更新的同时不会挂挂挂。

另外,值得一提的是论坛用户和老板不停的要求、催促和威逼利诱下,我们终于——终于把PRIME方案引入到了深度显卡驱动管理工具中,现在如果你是双显卡(N+i)用户,你只要小手一点,就可以方便地在几个预设方案中轻松切换了……嗯,不辛苦,用户和老板高兴就好 :)

一点感悟

上面说了这么一大堆,其实当时为了准备这些优化的内容的时候,心里面还是比较慌的,因为系统优化这事儿做起来远没有听起来那么爽,尤其是在没有既定方法的情况下要定一个优化目标出来,还是相当无助的,而且一旦你陷入 盲目—烦躁—焦虑 的怪圈中,就很难再痛快地出来,这就是这次15.7所面临的第一个挣扎。

我跟几个程序员都交流过,程序员大多都有比较强的焦虑感,再加上程序员多有洁癖,动不动这不清真那不科学,更容易掉进上面这个怪圈,在这个怪圈里面,你要么有一天实在承受不了了,咔嚓——破罐子破摔,从此成为浩瀚宇宙中的一粒尘埃;要么有一天你想通了:“还想个毛,就是干”,然后挑一件事后跟别人扯淡都羞于提起的小事,慢悠悠地开始做,做完了你会发现你的心理负担变轻了不少,然后再挑一件小事,接着干……越干目标越近,焦虑感也越来越少……最终,完成发版大业。

所以,当时我们不知道到底优化目标定成什么样子,那就捡最笨的方法,跟其他几个操作系统:Ubuntu、Win7、Win10做一个横向对比,看看其他几家的情况,至少做到在单一侧面都不是最差的吧?(做到任一侧面都是最好的,就留作下次优化的目标吧,毕竟大家都等着咱们发版呢。)定完了就朝着目标开始研究怎么使用优化的工具:perf、valgrind、heaptrack、google-perftools等,大家都不怎么有经验?那就学一个培训一个,各自有任务去练习……等优化的patch都集成完了,对比下优化目标,不够或者还不满意就再来……所有15.7可见的优化都是这么一点点的“苍蝇肉”拼出来的。

刚好最近在Twitter上看到的一段话,可以把我上面想说的非常明白的表达了出来,把这段“心得”分享给大家:

真的,诸位,有什么难事千万别耗着,别等着,那只会让人在无尽的焦虑中煎熬,你就先大吼一句:“去你妈的。”然后两眼血丝地去推进,去做事,做着做着就有出路了。

comments powered by Disqus