Matt Mckall:Linux的性能检测和问题诊断 [2008Linux开发者研讨会演讲]
时间:2008-02-19 来源:linux论坛
大家早上好,非常感谢能请我发言。下面我为大家介绍一下我正在做的一些嵌入式的Linux,同时我负责Linux的消费电子的论坛,同时我也是Linux基金会技术委员会的成员。
首先我给大家展示几个说明,第一个就叫做BLoatwatch,它是一个工具,那么因为这种代码的大小往往会限制对于设备进行一些应用,那么这个代码的大小往往会限制使用,所以现在就是对于这种嵌入式的开发人员来说面临这样的问题,所以我一直在现在这个领域就是如何来使得我们的内核变得更小,特别是有什么方式找到在哪些方面可以缩短内核。对于Linux内核来说我们也是同样的问题,那么我们现在在每天世界各地都会有不同的内核,那么内核是在不断的变化的。
同时内核现在的增长速度是比较稳定的,而且现在有很大的变化,也就是说内核当中会有一部分比其他的增长速度快。所以这样我们就需要有一个方式来监督或者是检测内核时时大小的变化情况,所以我给大家做一个展示。那么这个是我来开发出的,叫做Bloatwatch。
大家可以看到这是我们的一个内核的历史的情况,而且可以随着时间的变化,在某一个点上变化会比较大,增长的速度比较快,那么这些比较平缓的就代表变化是比较平的。那么我们可以看到这里面是我们的内核,主要是从两年半到三年,右边这边是到今天为止内核的变化,所以我们内核的大小往往会突然变化一下,有时候突然变大,有时候突然变小,所以我觉得这个工具可以帮助大家解决看每一个内核,然后认真看这个内核是什么样的情况,我给大家举一个例子,我看一下刚推出来的这个.24的情况,那么.24可以看到每一部分的组成。
比如说像特别是当内核没有固定的模块的时候,我们可以看到其中比如说像驱动器,那么其中占的是多少,然后还有文件系统占了多少,然后还有内核本身占了多少,那么这边就是电源管理等等,也就是说你可以把内核分成很多部分,然后对每一部分进行管理。也就是说可以看整个内核当中每一个子部分,然后其中有不同空间的分布,这边是内核当中最大的一个数据的结构,还有功能,那么可以看到这里面我列出来的就是一个驱动器当中,代码当中最大的,那么就是我们所说的RDE 的硬件。这个我们可以把它继续来转换。所以也就是说每一个都可以看到具体的分布。同时我们也可以把它进行比较,也就是说可以把这个内核和另外一个内核进行比较。比如说我们可以把.24和.25来进行比较。
这边我们可以看到是一些子系统的比较,那么这里面写的就是其他的,那么这个是一个架构,还有包括一些某些代码,还有内核,还有包括像驱动器,可以看到驱动器占的是非常小的,那么我们同时还可以看到在几周之内他的一个变化,增加了多少,那么这样的话我们就可以来分析为什么说,在这个架构当中这个内核增加了 16K。那么同时我们可以看到其他的一些版本,比如说像内存的管理的变化情况,那么我们也可以点击这里,那么这一部分增长了13K,还有叫做IO的情况,那么它是增长了10K。那么可以看到这方面是增长了9K,那么为什么呢,我们就发现这个其中我们增加了一个BMPTE,我当时和增加了BMPTE这个人讨论了一下,我们就说让他能不能解决这个问题等等。
所以这个之后就变成了8K,所以这个就是使这个系统帮助我们来时时的检测内核的大小,然后看一下哪里进行回归。以及它的大小。那么这是一个自动的程序。它是以网络为基础的,有网络的界面,就是说如果有一个内核的配制的话,那么可以根据这个来建立自己的检测。那么我有一个公共的,主要是用X86。那么可以看到这个,而且这个原代码也是可以获得的,所以我也是希望能够看到更多的人来采用这种代码,同时我们还有其他的一些系统,我们希望也有人能够帮助我给这个工具来添加一些新的功能等等。
那么这个Bloatwatch方面大家有没有什么问题,关于我之前介绍的大家有没有什么问题。
像这种内核大小是一个问题,但并不是唯一的问题,同时还有包括像Linux的内存的管理是非常复杂的,每一个应用程序都有共同的,像都有一些共享的,比如是页面交换,还有分页技术等等。而且可能会占用很大的内存,那么所以有的时候大家对于能用多少会不知道,那么大家会问对于网络浏览器来说,数据库中有多少可用的,那么这种空间问题是很难用机器两回答的,我这个分页的影射,也就是会把所有的内核如何来使用这种虚拟的内存的信息来进行收集。
比如说像对于这种虚拟的来说呢,我们可以看到它的一些物理的内存是多少,哪些是虚拟的内存,哪些是共享的,同时对于这些内核来说它现在的状态是什么,有哪些页岩是积极的等等。所以这是负责有用的一个工具,让你知道现在这个内核是什么样的状况,那么这个代码是可以在我们上周刚发布的中间获得,大家可以看一下。
我想给大家做一个简短的展示,因为我的笔记本电脑早上有一些问题,我不知道大家能不能够看清楚,大家能看到这是红色的吗,所以可以看到左边的这个窗口就是我们所说的我的一个网络浏览器,它的一个内存的空间,那么你可以看到有一个3G,然后上面我们可以看到它的应用的程序。还有我们这个网络的浏览器,那么另外一部分内存就是含数库。也就是说如果我这个网络浏览器积极的运作的话,这个页面会进入内存,下面的数字会发生变化,那么就会知道哪个含数库比较热,也就是说页面变化比较快,还可以进行缩减。所以这个就是说,我们用这种页面的分页的影射来做的功能之一。同时可以看到对于内核变化整个内存的情况。也可以看到像这个内存呢,它就是不断的比如说清空,还有随着应用程序的应用,它的内存大小的变化,我觉得这个非常有帮助,帮助你能够知道在Linux的内存管理方面获得一个时时的数据。
那么另外一点我会介绍的就是我们所说的,就是一个进程中的内存的使用率。我想非常简单的回答一个问题,就是我们这个进程到底有多大?我觉得呢我所提出的一个答案呢,就是比如说像我从前面那个分页影射当中可以得到一个答案,我觉得最有用的一个答案,就是比如说有一个多应用程序共享的一个页面的话,我们就会根据共享它的一个进程的数目来分割,每一个共享页面的大小。那么也就是说如果十个共享的话,那么其中一个就是占到1/10,那么这就是我们所说的内存的使用率,这个理念是非常有意思的。那么比如说像吴峰光,他给我发过一个邮件,他提出一个代码帮助我进行这方面的建设。
我们可以根据所有的这种分页影射,同时我们可以把它应用在用户的界面。那么这就是我给大家介绍的情况,如果大家有问题的话可以问我。谢谢大家。
首先我给大家展示几个说明,第一个就叫做BLoatwatch,它是一个工具,那么因为这种代码的大小往往会限制对于设备进行一些应用,那么这个代码的大小往往会限制使用,所以现在就是对于这种嵌入式的开发人员来说面临这样的问题,所以我一直在现在这个领域就是如何来使得我们的内核变得更小,特别是有什么方式找到在哪些方面可以缩短内核。对于Linux内核来说我们也是同样的问题,那么我们现在在每天世界各地都会有不同的内核,那么内核是在不断的变化的。
同时内核现在的增长速度是比较稳定的,而且现在有很大的变化,也就是说内核当中会有一部分比其他的增长速度快。所以这样我们就需要有一个方式来监督或者是检测内核时时大小的变化情况,所以我给大家做一个展示。那么这个是我来开发出的,叫做Bloatwatch。
大家可以看到这是我们的一个内核的历史的情况,而且可以随着时间的变化,在某一个点上变化会比较大,增长的速度比较快,那么这些比较平缓的就代表变化是比较平的。那么我们可以看到这里面是我们的内核,主要是从两年半到三年,右边这边是到今天为止内核的变化,所以我们内核的大小往往会突然变化一下,有时候突然变大,有时候突然变小,所以我觉得这个工具可以帮助大家解决看每一个内核,然后认真看这个内核是什么样的情况,我给大家举一个例子,我看一下刚推出来的这个.24的情况,那么.24可以看到每一部分的组成。
比如说像特别是当内核没有固定的模块的时候,我们可以看到其中比如说像驱动器,那么其中占的是多少,然后还有文件系统占了多少,然后还有内核本身占了多少,那么这边就是电源管理等等,也就是说你可以把内核分成很多部分,然后对每一部分进行管理。也就是说可以看整个内核当中每一个子部分,然后其中有不同空间的分布,这边是内核当中最大的一个数据的结构,还有功能,那么可以看到这里面我列出来的就是一个驱动器当中,代码当中最大的,那么就是我们所说的RDE 的硬件。这个我们可以把它继续来转换。所以也就是说每一个都可以看到具体的分布。同时我们也可以把它进行比较,也就是说可以把这个内核和另外一个内核进行比较。比如说我们可以把.24和.25来进行比较。
这边我们可以看到是一些子系统的比较,那么这里面写的就是其他的,那么这个是一个架构,还有包括一些某些代码,还有内核,还有包括像驱动器,可以看到驱动器占的是非常小的,那么我们同时还可以看到在几周之内他的一个变化,增加了多少,那么这样的话我们就可以来分析为什么说,在这个架构当中这个内核增加了 16K。那么同时我们可以看到其他的一些版本,比如说像内存的管理的变化情况,那么我们也可以点击这里,那么这一部分增长了13K,还有叫做IO的情况,那么它是增长了10K。那么可以看到这方面是增长了9K,那么为什么呢,我们就发现这个其中我们增加了一个BMPTE,我当时和增加了BMPTE这个人讨论了一下,我们就说让他能不能解决这个问题等等。
所以这个之后就变成了8K,所以这个就是使这个系统帮助我们来时时的检测内核的大小,然后看一下哪里进行回归。以及它的大小。那么这是一个自动的程序。它是以网络为基础的,有网络的界面,就是说如果有一个内核的配制的话,那么可以根据这个来建立自己的检测。那么我有一个公共的,主要是用X86。那么可以看到这个,而且这个原代码也是可以获得的,所以我也是希望能够看到更多的人来采用这种代码,同时我们还有其他的一些系统,我们希望也有人能够帮助我给这个工具来添加一些新的功能等等。
那么这个Bloatwatch方面大家有没有什么问题,关于我之前介绍的大家有没有什么问题。
像这种内核大小是一个问题,但并不是唯一的问题,同时还有包括像Linux的内存的管理是非常复杂的,每一个应用程序都有共同的,像都有一些共享的,比如是页面交换,还有分页技术等等。而且可能会占用很大的内存,那么所以有的时候大家对于能用多少会不知道,那么大家会问对于网络浏览器来说,数据库中有多少可用的,那么这种空间问题是很难用机器两回答的,我这个分页的影射,也就是会把所有的内核如何来使用这种虚拟的内存的信息来进行收集。
比如说像对于这种虚拟的来说呢,我们可以看到它的一些物理的内存是多少,哪些是虚拟的内存,哪些是共享的,同时对于这些内核来说它现在的状态是什么,有哪些页岩是积极的等等。所以这是负责有用的一个工具,让你知道现在这个内核是什么样的状况,那么这个代码是可以在我们上周刚发布的中间获得,大家可以看一下。
我想给大家做一个简短的展示,因为我的笔记本电脑早上有一些问题,我不知道大家能不能够看清楚,大家能看到这是红色的吗,所以可以看到左边的这个窗口就是我们所说的我的一个网络浏览器,它的一个内存的空间,那么你可以看到有一个3G,然后上面我们可以看到它的应用的程序。还有我们这个网络的浏览器,那么另外一部分内存就是含数库。也就是说如果我这个网络浏览器积极的运作的话,这个页面会进入内存,下面的数字会发生变化,那么就会知道哪个含数库比较热,也就是说页面变化比较快,还可以进行缩减。所以这个就是说,我们用这种页面的分页的影射来做的功能之一。同时可以看到对于内核变化整个内存的情况。也可以看到像这个内存呢,它就是不断的比如说清空,还有随着应用程序的应用,它的内存大小的变化,我觉得这个非常有帮助,帮助你能够知道在Linux的内存管理方面获得一个时时的数据。
那么另外一点我会介绍的就是我们所说的,就是一个进程中的内存的使用率。我想非常简单的回答一个问题,就是我们这个进程到底有多大?我觉得呢我所提出的一个答案呢,就是比如说像我从前面那个分页影射当中可以得到一个答案,我觉得最有用的一个答案,就是比如说有一个多应用程序共享的一个页面的话,我们就会根据共享它的一个进程的数目来分割,每一个共享页面的大小。那么也就是说如果十个共享的话,那么其中一个就是占到1/10,那么这就是我们所说的内存的使用率,这个理念是非常有意思的。那么比如说像吴峰光,他给我发过一个邮件,他提出一个代码帮助我进行这方面的建设。
我们可以根据所有的这种分页影射,同时我们可以把它应用在用户的界面。那么这就是我给大家介绍的情况,如果大家有问题的话可以问我。谢谢大家。
相关阅读 更多 +