初秋西安,最美终南山,一众Linux大咖齐聚西安邮电大学,问道Linux,共话内核技术的产学研用。
Linux内核一路走来,从91年发布第一个版本到现在26年来,内核的版本可能达到近千个,迭代速度非常快。面对外界日新月异的技术变化,随着智能计算开始从云端向嵌入式端迁移,Linux 毫无争议的成为从端到云的人工智能基石,如何深入探讨Linux内核技术,创新驱动业务发展,9月18日,西安邮电大学计算机学院教授陈莉君、Linux内核专家宋宝华、中兴电信级嵌入式操作系统总工谢宝友、阿里巴巴内核团队负责人秦承刚等在西安邮电大学(长安校区东区)计算机学院分别分享了自己多年的心得体会。
下午,会议在张国强的主持下开始。
西安邮电大学计算机学院书记彭程首先对来校参加本次研讨会的教育同行、著名企业代表表示热烈的欢迎,对本次研讨会的顺利召开表示热烈的祝贺。他表示:
西安邮电大学是一所以工为主、以信息科学技术为特色、工、管、理、经等多学科发展的高校,是我国特别是西北地区信息产业高级人才的重要培养基地。计算机学院成立于2009年,前身是成立于1994年的计算机系,在20多年的发展历程中,为我国邮电通信和信息产业发展培养了众多的人才。”
学校的Linux研究是于1999年由陈教授带领学生分析Linux内核开始,目前发展势头良好,秉承自由、开放、分享的文化理念,为众多学生提供了系统交流、知识共享、注重实践、校企接轨的平台,消除产学研瓶颈。他最后希望以此次研讨会为契机,继续深化合作,扩大交流,继续保持亲密的朋友关系.
同时,他代表计算机学院对校内各部门的积极参与配合表示衷心的感谢,预祝本次研讨会圆满成功。最后,他祝各位专家、老师、企业界的朋友们西安之旅愉悦快乐。
西安邮电大学计算机学院教授陈莉君分享的主题是《Linux内核之旅》,主要聚集Linux内核从哪里出发、到哪里去的问题。
他首先表示,Linux使用起来简单但是又复杂,你一定要用起来,这方面建议大家读一些有名的书,要有一个化繁为简的层次学习途径,阅读源码要借助工具,熟悉工具可以提高生产力。
Linux内核一路走来,从91年发布第一个版本到现在26年来,内核的版本达到了800多个,现在可能有近千个版本,迭代的非常快。我们从几个方面、几个指标来分析下:一是系统调用数、二是配置选项、三是代码规律、四是函数平均复杂度。
系数调用数这个数量在不断的增加,操作系统给我们提供的服务越来越强了,这个就像平台一样。通过系统调用给我们提供服务功能,现在大概有400个系统调用,让我们使用它的时候功能就变得强大了。
配置选项是什么呢?大家学语言的时候有一个条件编译,这个达到了8000多个选项,编译的是可选择性。实际上一个软件很多时候的功能是不需要的,我就可以不选择它,这个就是起这样的作用。
代码量的变化,现在最新代码有上千万行了,这样庞大的软件如何管理起来?而且是全球的工程师参与,大家知道分布式的管理工具把全世界的开发者管理起来了。如果你对这样一个大的工程搞明白了,以后你出去任何一个工程都是它的子工程。
函数个数的变化,由几万个函数一起形成一个非常庞大的调用关系,Linux内核是单模块的结构,互相之间完全是调用关系。它的内在规律SLOC,Linux内核的源代码行数呈现增长的趋势,平均每个主要版本增加4万多行源代码。
因为Linux内核是一个庞大的软件,修订一点可能都要重新编译。怎么解决呢?提供模块机制可以单独编译,程序员对自己开发的东西就有了掌控权,可以在编译的时候发现问题。当你增加新的功能、启动程序、文件系统的时候,可以去单独的调试、单独的编译。
谈及虚拟文件系统机制,他表示这个机制隐藏了差异性,并且拥有巨大包容性。该文件系统,Linux从70年代诞生以来提出这个框架以后,这种机制三四十年来保持不变,但支持了无数个新的文件系统。为什么呢?它对外的接口是保持不变的,任何一个新的成员想加入的时候,按照它的机制,就像一个很有个性的人,想加入这个团体的时候,先把你的个性放下,按照团体的要求加入进来,大家之间的合作就非常的协调。所以虚拟文件系统,到现在Linux已经支持了三四十种文件系统,看底下这线完全是开放的,你只要按照它的框架去做,都可以加入这个大家庭。这就是机制设计的非常巧妙和厉害之处,它的软件框架可以做到几十年不变。现在最大的文件系统,大数据从CEPH文件系统同样支持,同样可以挂到它的下面。
Linux内核专家宋宝华演讲的主题为《Linux性能剖析的可视化》,议题主要是给大家分享Linux性能的可视化以及他们为什么要做Linux这样一个工具。
他认为关于Linux方面的很多问题,对于Linux的玩家来讲是非常简单的事情,但对于不太懂Linux的用户来说,却是一个非常复杂的事情,隔行如隔山,Linux现在被很多的企业使用,问题是很多的人在Linux的时候是完全找不到感觉的,并不是每个人都像陈老师这样研究Linux的,Linux对他们来讲只是一个平台,而工具的作用是什么?工具就是打通复杂事物与简单大脑的连接,我不懂这个是什么,但是有一个工具可以把这个复杂的事情以简单的形式呈现给我,这样它就可以提高生产力。
他总结道,目前国内的Linux玩家有三类。第一类是Linux专家,第二类是熟悉Linux的人,第三类是不熟悉Linux,但是用Linux的人。这其中,第三类大于第二类,第二类大于第一类。所以他们在碰到问题的时候是不一样,一个比较熟悉Linux的人需要一个图形帮帮我,纯粹只是玩Linux的人,你可能帮他都没有用,他要的是你救救我吧,这个Linux真是玩死我了。这是LEP的出发点,所以我们的出发点是直观、可视、可互、易于使用,把最终的结果呈现给你。按照第二类和第三类用户也可以找到方向。当然第一类也可能觉得很好用。
具体来看,LEP从电路板上或者Linux的电脑上,采集到了一些比较原生态的原始数据,再通过网络的形式发到上面,然后把数据解析好以后,浏览器在可视化的形式上呈现出来,可视化的结果就是你可以直接在图片上看内存负载均衡不均衡,可以直接在图片上看到性能的内存消耗和内存的变迁。
中兴电信级嵌入式操作系统总工谢宝友的演讲聚焦“Linux故障分析方法”。主要讲一些比较典型的查故障的方法,以及在分析故障的时候,我们如何利用内核里面已有的功能。还有性能问题。
他总结了做linux故障分析时需要注意的几点:
第一,做内核的人就是给各个产品线上做技术支持,做技术支持时非常重要的一点就是要搞清楚组织对象、人员关系和职责,搞清楚以后才会知道你协调资源的时候找谁,谁说了算。
第二,比较重要的是问清楚事情的来龙去脉。一般找我们支持的都是比较难的问题。这个问题中间有不同的利益相关人,他们做了什么事情,他们为什么以前没有解决掉,这都是有原因的,这一点是很重要。
第三,是把握住事情的关键时间点。做产品都有发布时间,一件事情,肯定是多个事情并发的,你要知道事情的重要性、关键时间点,然后你自己安排它的轻重缓急。
第四,是为客户留下充裕的缓冲时间。技术的东西都是有风险的,产品线、项目组可能会有其他的安排,你要给它留下充裕的缓冲时间,虽然说这个故障解决了,但你花的时间太长了,错过了那个关键时间点,这个时候你只有苦劳没有功劳。
查故障的一些技术性问题,对于假死场景,他表示查找假死故障的时候,要把中断这一点利用好。内核也给我们提供了很好的调试工具sysrg,它能够看到什么东西,哪些东西来查什么样的故障,这是非常有用的。大家要把sysrg的原理搞明白,它是怎么样做的,怎么样把信息取出来,能不能把里面的故障找出来,一个月时间应该够了。
海森堡bug分析。这是所有搞内核人最头疼的问题,这种问题一般是静态问题,和程序运行的时序紧密相关,稍微在那里面加一点点东西故障不复现了,以前一个月,现在可能两个月三个月。其实这样也可以查,首先看在哪一行代码里面加了什么东西,你把前后的代码乱序的问题或者内存缓存的问题,走查代码你找不到的时候,增加延迟,在那个地方稍微加一些函数,有可能故障更好的复现。如果增加延迟以后故障能够复现,基本上就是和你相应的静态问题有关了,这时候查走查代码就可以查准。
第一个案例的经验是,一定要找准故障第一现场,重点怀疑我们自己对内核的修改,以及厂商对内核的修改。
第二个案例是对栈溢出故障,经验教训是进程堆栈保留了程序运行的轨迹,应当充分重视对它的分析,同时也需要熟练掌握内核代码。
第三个案例我的经验教训是面对不熟悉的领域,即使遇到开源故障,只要善于想办法,总是能够解决问题的。
第四个案例经验教训是,在条件允许的情况下,尽量使用仿真器,同时需要深入理解内核代码,要对中断、信号处理异常等都要熟悉,否则你拿着代码也不知道应该怎么看。
第五个案例是内存故障,经验教训是走查代码有时候是最快的办法,必要时需要手工加一些调试代码。在内存管理中我写过一个工具,加了一些调试代码,把分配和释放的地方都管理起来,后来故障不复现了。所以对内存故障走查代码是最好的。
阿里巴巴内核团队负责人秦承刚的分享主题聚焦“阿里巴巴的资源隔离技术”。首先他谈了下做操作系统研发的两点体会,第一是感觉自己很牛,因为自己做的事情基本上就是这家公司最有技术含量的,硬件我们今天不具备自主的研发能力,而内核驱动以及再往上到操作系统级别,公司内部所有的疑难杂症都会落到我们的团队来,我们做的一点创新工作,可能直接影响到这家公司所有的业务线。大家知道阿里巴巴作为一家比较知名的互联网公司,有几万个服务器,涵盖了整个互联网行业内所有的形态,这样让我们有机会发现更多的问题,并且去做更多的事情,这是第一个体会,我们感觉自己很自豪。
第二个体会,我们总感觉是像是一个背锅的人,好多问题并不是内核的问题,但最终都要我们来寻求解决方法。是因为大家知道在阿里巴巴这家公司里面,技术上最牛的人基本上集中在了我们基础软件和操作软件,他们遇到问题也非常愿意找我们一起做排查。因此我们要花大量的时间帮助业务解决各种各样的疑难杂症。不久之前跟华为的操作系统团队做过一次交流,他们团队很搞笑,他们给自己设计了一个标志是背后背了一个大锅,因为不管你在什么公司都有这样的体会。
我们隶属于阿里巴巴的技术团队,系统软件研发单独成立了一个事业部,事业部包括操作系统研发,操作系统研发主要是内核、包括资源调度等等所有最顶层的软件。我们在内核领域目前已经持续做了四五年左右的时间,从2010年做到现在七年左右的时间,在这七年里面积累了很多工作,也形成了自己的内核版本Alikernel。
我们可以在第一时间拿到世界上最牛的硬件,包括CPU、存储和网卡类的硬件,今天公司业务发展特别的快,在国际市场,跟第一梯队的巨头竞争,就要求我们的技术发展要特别快,内核对他们来讲就需要提供很快速、很稳定的支持。能够让业务开发部门基于内核去开发自己更新的业务。假如说我们还是在3.10.0上进行,就必须要做大量的工作,这些工作对我们来讲是没有任何价值的。所以我们下定决心要向硅谷的公司看齐,用最新版本来做。
当前,最新的版本是4.9,我们把工作重心从以前的3.10.0上转到4.9上面,目的是为了缩短跟世界最先进水平之间的差距。阿里在内核上做了这么多年的工作,到今天来讲依然不过时的工作重点,比如对于容器的支持。
阿里的操作系统称之为AliOS,一方面是生产线上操作生产镜像,另外一方面提供基础的镜像,维持了三方软件的支持与优化工作,还为各种不同的业务线提供了不同的工具链条。
我们在OS上面有两个创新的项目,这些都是面对容器环境而生的一种优化版本的操作系统。我们内部也是一样,几乎所有的业务都已经容器化了,与此同时,他们对于操作系统提出了不同的需求,所以我们目前在逐步的迭代OS中。我们还在做一个系统盘云化的项目,因为今天在阿里内部做一件很大的事情,镜像存储分离,由我们资源管理系统对它进行资源调配,所有的存储数据跑到另外一个集群上面,中间通过高速网络进行连接,所有网状每一个应用都有自己的云盘。因此对于操作系统而言,本身在服务器上需要一个云盘来做操作系统的系统盘,镜像分离以后希望把这个系统云端化,这样可以给我们项目带来很大的提升,并且可以节约成本。因为阿里巴巴每年要买很多台的服务器。
在容器支持上,我们内部前些年采用了内部虚拟化的技术,后来发现如果加入以后会使我们的资源有很大的浪费,于是后面做了一个项目,并把这个做了一个改造。现在基本上把所有的应用都跑在了上面。就像刚才讲的,我们在内部的层面做了很多工作,能够把容器看成就是自己的VM一样,比如在内核当中增加了很多namespoce隔离,其次还做了很多QoS保证。在内部由于没有安全的问题,在云上面有一些业务,不仅要部署在内部,还要部署在公有云上面,为外部用户提供一些服务。我们希望内部的这套容器系统可以同时兼容VM,另外,对KVM也做了很大的优化工作。希望速度可以跟容器相媲美,可以在毫秒级别拉起一个KVM的镜像,并且VM还可以兼容容器的镜像,这样我们的业务只要发布一个镜像,可以在内部跑,也可以在公有云上跑。