欢迎来到皮皮网网首页

【和平精英源码】【fscan源码分析】【spring源码篇】5.4内核源码_内核源码下载

来源:站酷psd源码 时间:2024-11-24 15:59:16

1.linux中 Redhat Centos ubuntu Fedora 的区别
2.centos和debian哪个好?
3.runc hang 导致 Kubernetes 节点 NotReady
4.如何从硬盘安装FREEBSD
5.GKI: 通用内核映像
6.深入理解 slab cache 内存分配全链路实现

5.4内核源码_内核源码下载

linux中 Redhat Centos ubuntu Fedora 的区别

       1.都说redhat是linux的代名词,也就是说redhat的linux被大多数人认可。

       å¯æ˜¯ï¼šRedHat.Enterprise.Linux.5 与 redhat linux 9.0 还有redhat fedora core 三者之间的具体关联和区别是什么? centos又是从哪冒出来的,我们公司用的就是centos,这个好吗,好在哪里?

       redhat成名的原因:历史悠久,年就开始做linux;公司运营,提供完整的解决方案,更专业,而不像debian是社区形式的;独创rpm包,使linux安装软件变得非常简单,免去编译的麻烦。

       redhat在发行的9.版之后,就不再延续以前的开发代号,而是以RedHat.Enterprise.Linux命名(简称rhel)即redhat企业版,现在已经开发到5,rhel好像是从3开始,需要客户购买license,即想获得系统的后续更新与服务是需要付费的(可以免费更新天,而且如果不想享受更新,系统也是可以免费使用的。),而其个人桌面免费版交给redhat社区在做,这个社区是可以获得redhat公司支持的,这个社区发布的版本就是fedora(直译也是一种男士帽子),一年两个版本,现在已经发行到,fedora一直是rhel的一个实验场,每个版本所采用的软件,内核与库版本几乎都是最新的,因而配置起来有些困难,不过基于redhat的基础,使用fedora的人仍然占很大的比例。centos是将rhel再次编译,去掉redhat标志,并有社区发布的linux版本,所以,centos与rhel几乎是没有区别的,主要的区别就是不用付费即可使用,从rhel的角度来说,centos是非常适合企业使用的。

       2.据我所知,redhat是linux的发行厂商,除此之外还有ubuntu,内核内核debian,suse,redflag等,既然linux是免费的,为什么会有这么多公司专门做linux的发行版本呢,不赚钱为什么还要做呢?而且我觉得他们肯定能从中获取利益的,但我不知道这其中的猫腻。明白的朋友给我多讲讲这个。

       å¦‚果发行版本是可以盈利的,那linux内核的作者linus能得到什么好处呢?

       linux内核的每次升级都是linus这个最初的作者一直在搞的吗?每次升级花费的人力物力,对这个作者有何经纪上的回报吗?

       linux盈利方式:linux个人桌面版是可以免费获得并使用的,但像redhat企业版,redflag红旗企业版,是需要购买服务的,企业版主要针对的是银行,政府,或者大型企业这种对于稳定性和安全行要求较高的行业,比起昂贵的unix,linux还是有销路的。个人桌面版也并不是无利可图的,至少很多linux社区不会赔钱,因为为社区工作的人都是分布在世界各地的,开发linux也是利用业余时间来做的,不为了获得报酬,只为了一份执着而工作,社区的linux版本发布后,用户可以购买linux安装光盘,虽然光盘很便宜(比起微软的系统),但由于成本几乎为0,所以还是有盈余的。再有,现在市面上有很多预装ubuntu的笔记本销售,比如dell,那么戴尔肯定要付给ubuntu费用的,当然,这个费用要比预装vista低得多。

       çŽ°åœ¨linux的内核应该是GNU在做,而不是linus。

       3.上面说了这么多发行版本的linux,请问哪几种比较好,好在哪里?是不是根据linux的用途不同,选择linux的版本也应有所不同呢?麻烦具体说说各个版本的长处与缺点。

       redhat企业版(rhel),适合企业使用,出色的稳定性和兼容性表现在每个版本都使用了比较成熟的库与内核,并且对一些大型的EDA软件都预先进行了测试安装,比如cadence,所以比较适合做服务器和工作站,但不适合当个人桌面,因为不购买license,就不能享受到丰富的更新,而且由于内核与库都比较保守,有点跟不上linux的发展速度,以至于很多娱乐软件安装起来非常困难。centos与rhel类似。

       fedora,前面已经说了,这个版本每次发行都比较冒进,以至于很多驱动程序都不能很好的配置,但最新的fedora还是很保守和稳定的。yu软件源基于rpm包管理,安装软件很方便。

       ubuntu,基于debian,桌面环境以gnome为主,是目前最流行的linux个人桌面,它的优点是配置起来非常简单,安装完系统之后,只要硬件不是太新,基本不用进行其他配置,硬件都可以识别并安装好驱动。而且其apt更新源服务器中的软件非常丰富,只要打一条命令,就可以自动从网络下载安装所需软件。ubuntu安装方便,甚至于可以使用wubi将linux安装在windows分区。ubuntu还有很多衍生版本,包括Kubuntu(桌面采用KDE,较为华丽),xubuntu(采用xfce,要求配置较低),eubuntu(面向儿童和教育),用户可以根据需求,偏好,和硬件配置进行选择。

       suse,被誉为最漂亮的linux发行版本,当然,其本质和其他版本都是一样的,只是在窗口美工上开发者下了一定功夫,而且获得华丽的同时当然也需要付出更高的系统资源占用。其他的linux版本通过一些改造,完全是可以实现suse的效果的。

       redflag,中科院开发的linux版本,主要面向政府用户,其个人桌面版免费,这个版本的美工上与windows非常接近,是使用者的入门难度降低,但实际上桌面也是基于KDE的,很平常。

       puppy,一个非常小巧的linux版本,安装镜像多M,却包括了图形桌面,浏览器,办公等常用的软件,系统运行时都存在与内存中,据说安装在U盘中的puppy,在系统启动后,可以将U盘拿掉,系统依然可以运行。

       4.我对linux的简单了解,各个发行版本使用的linux内核都是同一个。只不过可能随着各版本的发行时间不同,采用的内核版本会不同。不知道理解的对吗?

       linux的内核目前还在飞速的发展,现在常见的是2.X版本,X为奇数,为不稳定版,x为偶数为稳定版,比如rhel采用的2.4和目前最新的,很多个人桌面采用的2.6。不同的linux发行版本采用的内核不尽相同,比如fedora一般都是采用最新的内核。

       5.之所以会有这么多问题,是因为我此时的大脑对linux的理解非常混乱,对于操作系统的理解只有正版的windows和盗版的windows的简单理解。暂时先不谈盗版问题,就正版而言,我知道linux部分版本是收费的,大部分可能是免费的,为什么会出现收费与免费两种现象? 作为企业级的服务器应用,免费版本的linux是否可以应付得了,免费的是不是比收费的性能安全上要差好多????具体说说免费和收费的linux,谈谈二者之间的区别。

       å‰é¢å·²ç»æåˆ°ä¸€äº›äº†ï¼Œè‡³äºŽå…è´¹ç‰ˆï¼Œå¦‚果采用较为保守的成熟的版本,稳定性应该是可以保证的,安全方面,不是很了解,从我单位使用的rhle来看,与普通linux个人桌面并无大的区别。

       6.OpenSource与Free:收费的linux版本,是不是就不算开源的操纵系统了呢?收费的linux肯定不会开源,是不是?因为如果开源了,人家都知道你的源代码了,开发商就没办法收费卖他们的发行版本的linux了。不知道理解的对吗?请具体说说"开源与免费"

       æ‹¿redhat来说,他们既有收费的rhel,也有反编译rhel得到的并且是开源的centos,使用那个完全取决于用户自愿。这样来看,开源与免费的区别仅在于开源的东西,在遵守gnu协议的基础上,任何人都可以得到程序的源代码,并可以自己修改,并可以再发布;而免费的就只能免费使用,而不可修改了。

       7.如果可以的话,再介绍一下linux的学习方法,和linux好的入门书籍。在日常工作当中,linux的应用会有很多角色,我主要是想学习LAMP架构下的WEB开发,不知道应该侧重学习linux哪些应用?哪些是LAMP程序员必须熟练掌握的LINUX技术,在求职应聘LAMP程序员的职位,一般面试考核linux方面都是哪些技能?

       ï¼ˆä¸æ‡‚)

       è¯·å‚考

centos和debian哪个好?

       DebianVSCentOS哪个更好

       é€šè¿‡ä»¥ä¸Šæˆ‘个人认为:从安全上说CentOS,rhel,oracle-LinuxDebian

       ä»Žæ€§èƒ½ä¸‹é™è¯´ä¹Ÿæ˜¯CentOS,rhel,oracle-LinuxDebian

       å…¶æ¬¡ï¼Œé€šè¿‡è§‚察debain内核源码和CentOS内核源码大小,我们可以看到Debian内核才M,而CentOS内核则达到了M为什么呢?还是我先前一篇文章中

       åˆ†æžè¿‡çš„,Debian是自由内核,里面去除了很多no-free固件驱动,功能代码,而CentOS

       åˆ™æ˜¯ç»§æ‰¿äº†rhel的特点,得到世界很多硬件厂商的权利支持,不管是free还是no-free的全部包含在内核源代码中,而且在虚拟化(kvm)部署中也是处于领导地位的,其中也不乏一些还来得及被Debian,或者标准内核采纳的代码,这样就导致了:

       ç¡¬ä»¶æ”¯æŒç‰¹åˆ«æ˜¯è™šæ‹ŸåŒ–CentOS,rhel,oracle-LinuxDebian(freebsd)

       è¿˜æœ‰ï¼Œä¸€ä¸ªå°±æ˜¯é€šè¿‡ç¼–译内核我们发现,默认情况下,CentOS开启的内核

       é€‰é¡¹éƒ½æ˜¯éžå¸¸ä¿å®ˆçš„,而Debian则很时髦,有什么新玩意就上,比如Debian开启了内存分配slub内核尺寸优化Os而CentOS还是使用久经考验的slab和O2..........

       é»˜è®¤å†…核配置性能测试DebianCentOS,rhel,oracle-Linux

       æœ€åŽæˆ‘们来说说,他们各自的应用软件支持数量,从官方发布的安装dvd(只有一张3.4G)上可以看出CentOSrhel是专门来做服务器,vps来用的,包含的软件相对debain安装dvd(8å¼ dvd)来说是少只又少。我曾经就yuminstallnginx结果我失败了

       æˆ‘以为我打错。结果真的没有,要自己二外去加源,我知道有很多第三方的软件源可以使用,但是单从官方支持上说是很少了,这也表明了CentOS重要用途,还是以服务器为主,桌面勉强可以吧!而Debian呢有4万多种软件,涵盖了开发,桌面,服务器软件,等等几乎你说能用到的所有软件都有,而且apt包管理也比yum强很多,以此,我个人判断:

       å¼€å‘方环境,通用性DebianCentOS,rhel,oracle-Linux

       å¥½äº†æ¥ä¸ªæ€»ç»“吧,如果不是狂热的系统定制优化狂人,我的建议是:

       1,如果你是开发者,和狂热的性能追求者或者是vps中的服务器请使用Debian!

       2,如果你是vps供应商,电子商务,使用了很多像hp,ibm等大品牌服务器,而且要求很高的稳定性,安全性,我建议你使用rhel家族,最少用%左右的性能损失,不是很大的易用性损失,换来安全稳定还是值得的!

       centosdebian哪个对arm支持好

       CentOS和Debian都支持ARM架构,但它们在对ARM的支持方面有所不同,具体取决于您的需求。一般而言,Debian是更早支持ARM架构的发行版之一,并且社区支持也更好,因此在ARM设备上的兼容性可能更好。另一方面,CentOS在ARM架构上的支持也越来越好,特别是在RaspberryPi等设备上的支持方面表现不错。因此,您需要根据您的具体需求来选择CentOS或Debian。

debian比较centos哪个快

       debianå¿«

       å®ƒè¿˜åŒ…括在其官方存储库之外的非GPL软件。以遵守其提供免费软件的准则。

       1。主要软件版本

       DebianStableWheezy已拥有这些软件版本。

       Apache-2.2.

       PHP-5.4.4

       MySQL-5.5.

       PostgreSQL-9.1.9

       2。升级

       å°†Debian从一个稳定版本升级到下一稳定版本很容易。操作也比较简单。

       3。稳定性

       Debian被认为是比许多其他发行版更稳定的Linux发行版。对于企业而言。这是一个不错的选择。因为该版本中的错误导致的开销更少。它还为修补安全漏洞提供了时间。因此这些发行版通常比其他Linux发行版的发行版更安全。

       4。易用性

       é€šå¸¸è®¤ä¸ºDebianLinux发行版比初学者更适合Linux专家。它从一开始就假定您对Linux开发有一定的了解。安装程序为用户提供了对其配置的更高程度的控制和自定义。

       ä»¥ä¸Šå°±æ˜¯Debian和CentOS的区别。对于需要完全控制的有经验的用户。Debian可能更好;对于想要更稳定和安全的Linux发行版的企业。CentOS可能更好。

为什么选择CentOS而不是Debian?

       æˆ‘们运行着一些全球最大的互联网的营运,因此我们对可靠性和稳定性非常重视,是我们的第一要务。为此,我们只使用Linux来支撑顾客的系统。但是,我们应该使用哪一个Linux的发行版?答案是,CentOS。为什么呢?\x0d\\x0d\作为一个庞大的系统运营商,在很长的一段时间里,我们需要在多种大型系统中找到一个可靠的,可预测的系统,我们需要从世界上最强大的软件供应商和开源项目中获得强有力的支持。对于那些最常用的系统,我们需要文档,工具和全球性资源。\x0d\\x0d\正因如此,RedHat/CentOS系列发行版正是我们的选择。他们能够满足以上所有需求,而且问题相对较少、长期稳定,这使得我们能够为成千上万的运行了不同配置、服务和应用的系统提供世界级的维护。\x0d\\x0d\RedHat’sEnterpriseLinux\x0d\(RHEL)是黄金标准的企业发行版。它每五年左右更新一次,在系统的稳定性,前瞻性和安全性上有着极大的优势。每当新的主版本发行后,比如\x0d\5.x亦或最近的6.x,所有版本和代码都将保留不变,只有安全问题或是主要的bug,例如后门,端口之类的问题,会通过发布新的子版本来修复。\x0d\\x0d\CentOS是RHEL发行版对应的开源版本,通常在RedHat的发布后就会很快发行。我们使用CentOS的原因在于RHEL发行版的标准支持服务费用非常高,大约每台服务器美元左右,对于我们很多拥有数十台甚至上百台服务器的用户来说,这是必须要控制的成本。\x0d\\x0d\RHEL/CentOS系统有两个潜在的问题。\x0d\\x0d\首先,一旦确定了主版本,,除了安全问题和严重故障会被修复以外,其他内容将不会做任何改变。这虽然对稳定性有\x0d\好处,但是对许多服务不利。比如MySQL和PHP服务,它们在这五年的CentOS/RHEL主版本发布周期中会进行繁重的开发和大量的修改。例\x0d\如,MySQL5.0是当前RHEL/CentOS主版本所默认使用的版本,但是当前MySQL已经更新到5.1和5.5版本了。\x0d\\x0d\幸运的是,这个问题被Yum软件包管理器轻易地解决了。如此以来,那些主要的软件,例如当前RHEL/CentOS中实际的组件,包括内核和所有工\x0d\具等仍然来自发行版,但是那些附加的软件,例如Nginx,Apache,PHP,Java和MySQL等等来自更新的软件源例如Fedora;\x0d\或者直接从开发商获取更新的版本例如MySQL。在我们这里,我们有自己专用的安装镜像来全自动的处理所有这些事情。\x0d\\x0d\其次,CentOS的发行会滞后于RedHat的发行,包括关键的补丁和修复。这在RHEL6.x的发行周期中尤为显著。但是根据我们的经验,这没什么好担心的,对我们来说永远不会成为问题。\x0d\\x0d\很多人询问我们为什么不用基于Debian的系统,例如Debian或者Ubuntu服务器。如果在别无选择的情况下,我们的确会支持这个建议,但是根据我们的经验来看,这些系统并不如RHEL/CentOS来的稳定和可靠。\x0d\\x0d\我们认为,这在某种程度上是由于他们过快的发展和各个版本、组合之间较少的测试且不成熟所导致的。然而尽管他们非常流行,但是主要的服务商和项目都\x0d\仍然首选RHEL/CentOS系统,因为这样他们就可以为企业顾客提供服务,(对Oracle和MySQL更是如此)。除此之外,基于Debian的系统有许多内核和稳定性问题,尤其是在我们的云计算服务中。\x0d\\x0d\对我们而言,唯一使用Debian/Ubuntu的原因是:\x0d\\x0d\“它们能够为一个系统提供必要的特殊服务时,尤其是当一些驱动程序或者一些IO子系统需要一种新的内核的时候”。例如,ext4文件系统或在最近的内核中日志的改变等;现在,所有这一切都包含在了RHEL/CentOS6.x中。\x0d\\x0d\当然,多数Linux开发者都使用的是Ubuntu的桌面版,而且可以理解的是,他们更倾向在开发生产时使用相同的系统,并且还能使用很多有趣的工具。但总体上来说,我们依然认为RHEL/CentOS是一个更优越的部署平台,并且已经有十多个客户成功地转向使用CentOS作为生产环境并且没有任何问题,但这仍然是艰巨的任务。\x0d\\x0d\总的来说,你将更乐于看到一个良好管理的CentOS系统。我们有成千上万台服务器使用CentOS平台,而每年平均只有一台服务器崩溃。我们也很难想象它竟如此罕见,所以,挑一个优秀、迅捷、可靠的平台吧!

CentOSDebianUbuntu哪个系统好?

       æ–‡ç« ç›®å½•CentOSDebianCentOS与Debian哪个好?Ubuntuä¹°VPS时有CentOS、Debian、Ubuntu三种操作系统可以选择,Linux下哪种系统更好是很多新人都会遇到的问题,在此,我们分析一下Ubuntu、CentOS及Debian各自的性能及使用经验。做服务器的很少会用Ubuntu,所以我们最后分析这个。先来看看使用率较高的CentOS和Debian。CentOS很多商业性公司服务器都是使用CentOS系统,CentOS简约,命令行下的人性化做得比较好,稳定,有着强大的英文文档与开发社区的支持。相对debian来说,CentOS略显体积大一点,是一个非常成熟的Linux发行版。DebianDebian更适合于作为服务器的操作系统,它比Ubuntu要稳定得多。Debian整个系统基础核心非常小,不仅稳定,而且占用硬盘空间小,占用内存小。M的VPS即可以流畅运行Debian,而CentOS则会略显吃力。但是由于Debian的发展路线,使它的帮助文档相对于CentOS略少,技术资料也少一些。CentOS与Debian哪个好?在国内服务器中,使用CentOS的要多于Debian,而国外则Debian稍多些。选择Debian是因为它是最大的社区发行版,有着严格的组织来维护,有着成千上万个超级黑客在贡献,而且有着最大的软件仓库,现在已经达到多个,有着大量的文档资源。而CentOS的更新比较慢,软件库软件版本过于陈旧,虽说稳定但是无法发挥出VPS的硬件特性。虽然也有社区,但是它没有固定的组织来管理,没有收入来源。另外,Debian

       6涉及到WEB服务器的软件包都更新到了比较新的稳定版本,并且借助apt命令直接安装非常快捷。选择CentOS大多是因为系统的稳定和可靠性,Debian发展过快,各个版本、组合之间测试较少稍显不成熟,系统有许多内核和稳定性问题。Debian很时髦,有什么新玩意就上,而CentOS开启的内核选项都是非常保守。所以,从安全、稳定角度出发,主要的服务商和项目都仍然首选CentOS系统。下面看一些具体的比较:从安全上说CentOSDebian从性能下降说CentOSDebian硬件支持特别是虚拟化CentOSDebian默认内核配置性能测试DebianCentOS发开环境通用性DebianCentOS最后,如果你是开发者和狂热的性能追求者或者是VPS中的服务器建议用Debian,如果是VPS供应商、电子商务网站,要求很高的稳定性、安全性,则建议采用CentOS。另外,对于初玩者,如果VPS配置太低(OPENVZ内存在M以下,或者XEN架构内存在M以下)建议采用Debian,否则建议采用CentOS,以获取更多的在线帮助与支持,让自己入门更轻松。UbuntuUbuntu近些年的使用率有所增加,它用户界面漂亮、管理系统完善、软件源支持强大、技术社区丰富,对硬件的兼容性也不错。然而,服务器更需要的并非这些,所以决定了它更适合于桌面操作系统,在自己电脑上安装或许要比服务器中更适合一些。对于Linux,ubuntu系统资源消耗且不稳定只能被比喻成鸡肋。服务器需要的只是一个简约、稳定、易用的系统而已!Ubuntu比较鸡肋还有一个原因就是对NGINX的支持太弱,而Nginx性能要远远高于Apache。所以,对于新手,基本应该选择CentOS系统而非Debian和Ubuntu。在确定选择CentOS后,我们还需要确定是用位系统还是位系统。在此,笨鸟的建议是,如果你用的VPS是非常牛的配置,那你用位比较合适;但如果服务器一般,还是老老实实的用位吧!

runc hang 导致 Kubernetes 节点 NotReady

       Kubernetes 1..3 OS: CentOS 7.9. Kernel: 5.4.-1.el7.elrepo.x_ Docker: ..6

       线上告警提示集群中存在 2-3 个 K8s 节点处于 NotReady 的状态,并且 NotReady 状态一直持续。源码源码问题的下载解决可以通过两种方法,我们先来看看 A 方案。内核内核

       针对 docker hang 住这样的源码源码现象,通过搜索资料后发现了以下两篇文章里也遇到了相似的下载和平精英源码问题。这两篇文章都提到了是内核内核由于 pipe 容量不够导致 runc init 往 pipe 写入卡住了,将 /proc/sys/fs/pipe-user-pages-soft 的源码源码限制放开,就能解决问题。下载查看问题主机上 /proc/sys/fs/pipe-user-pages-soft 设置的内核内核是 。所以将它放大 倍 echo > /proc/sys/fs/pipe-user-pages-soft,源码源码然而 kubelet 还是下载没有恢复正常,pleg 报错日志还在持续,内核内核runc init 程序也没有退出。源码源码考虑到 runc init 是下载 kubelet 调用 CRI 接口创建的,可能需要将 runc init 退出才能使 kubelet 退出。通过文章中的说明,只需要将对应的 pipe 中的内容读取掉,runc init 就能退出。尝试了几个后,runc init 果然退出了。再次检查,节点状态切换成 Ready,pleg 报错日志也消失了,观察一天也没有出现节点 NotReady 的情况,问题(临时)解决。

       对解决方案 A 的疑问,虽然问题解决了,但是仔细读 /proc/sys/fs/pipe-user-pages-soft 参数的说明文档,发现这个参数跟本次问题的根本原因不太对得上。pipe-user-pages-soft 含义是fscan源码分析对没有 CAP_SYS_RESOURCE CAP_SYS_ADMIN 权限的用户使用 pipe 容量大小做出限制,默认最多只能使用 个 pipe,一个 pipe 容量大小为 k。这里就有疑问:为什么容器 root 用户 pipe 容量会超过限制。

       定位问题最直接的方法,就是阅读源码。先查看下 Linux 内核跟 pipe-user-pages-soft 相关的代码。线上内核版本为 5.4.-1,切换到对应的版本进行检索。在创建 pipe 时,内核会通过 too_many_pipe_buffers_soft 检查是否超过当前用户可使用 pipe 容量大小。如果发现已经超过,则将容量大小从 个 PAGE_SIZE 调整成 2 个 PAGE_SIZE。通过机器上执行 getconf PAGESIZE 可以获取到 PAGESIZE 是 字节,也就是说正常情况下 pipe 大小为 字节,但是由于超过限制,pipe 大小被调整成 字节,这就有可能出现数据无法一次性写入 pipe 的问题。

       找到问题根本原因的第一步,往往是在线下环境复现问题。由于线上环境已经通过方案 A 做了紧急修复,因此,需要找到一种必现的手段。功夫不负有心人,在 issue 中找到了相同的问题,并且可以通过以下方法复现。执行命令之后,立刻就出现 runc init 卡住的情况。通过 lsof -p 查看 runc init 打开的文件句柄情况,可以看到 fd4、fd5、spring源码篇fd6 都是 pipe 类型,其中,fd4 和 fd6 编号都是 ,是同一个 pipe。如何来获取 pipe 大小来实际验证下「疑问 2」中的猜想呢?Linux 下没有现成的工具可以获取 pipe 大小,但是内核开放了系统调用 fcntl(fd, F_GETPIPE_SZ)可以获取到,代码如下。编译好之后,查看 pipe 大小情况如下。重点看下 fd4 和 fd6,两个句柄对应的是同一个 pipe,获取到的容量大小是 = 2 * PAGESIZE。所以的确是因为 pipe 超过软限制导致 pipe 容量被调整成了 2 * PAGESIZE。

       对解决方案 A 疑问的探索,对解决方案 B 的考虑,线上应该如何做修复呢?是否需要把 docker 所有组件都升级呢?如果把 dockerd/containerd/runc 等组件都升级的话,就需要将业务切走然后才能升级,整个过程相对比较复杂,并且风险较高。因此考虑是否可以单独升级 runc?因为在 Kubernetes v1. 版本中还没有弃用 dockershim,因此运行容器整个调用链为:kubelet → dockerd → containerd → containerd-shim → runc → container。不同于 dockerd/containerd 是后台运行的服务端,containerd-shim 调用 runc,实际是调用了 runc 二进制来启动容器。因此,只需要升级 runc,对于新创建的容器,就会使用新版本的 runc 来运行容器。

       通过测试环境验证,的Tp dapp源码确不会出现 runc init 卡住的情况了。最终,逐步将线上 runc 升级成 v1.1.1,并将 /proc/sys/fs/pipe-user-pages-soft 调整回原默认值。runc hang 住的问题圆满解决。

       总结,本次故障的原因是,操作系统对 pipe-user-pages-soft 有软限制,但是由于容器 root 用户的 UID 与宿主机一致都是 0,内核统计 pipe 使用量时没有做区分,导致当 UID 为 0 的用户 pipe 使用量超过软限制后,新分配的 pipe 容量会变小。而 runc 1.0.0-rc 正好会因为 pipe 容量太小,导致数据无法完整写入,写入阻塞,进而 runc init 卡住,kubelet pleg 状态异常,节点 NotReady。修复方案是 runc 通过 goroutine 及时读取 pipe 内容,防止写入阻塞。

如何从硬盘安装FREEBSD

       1)isoemu(引导ISO镜像用)

       2)虚拟光驱,用DAEMON Tools

       å…·ä½“步骤:

       1: 前提:你的系统已经安装里windows的操作系统以及可以上网

       2: 下载辅助软件ISOEMU,以及freebsd5.4的5.4-RELEASE-i-bootonly 只包含启动文件

       5.4-RELEASE-i-disc1 安装盘1 5.4-RELEASE-i-disc2 安装盘2,这三个安装文件这里可

       ä»¥ä¸‹è½½ftp: //ftp.freebsdchina.org/pub/FreeBSD/releases/i/ISO-IMAGES/5.4/

       3: 用虚拟光驱把disc1镜像文件里面的5.4-RELEASE文件夹(MB左右)提取复制到主分区(ä¼°

       è®¡é€»è¾‘分区还不支持,最好是放在你的启动分区,支持NTFS格式),disc1的packages提取出来放

       åˆ°5.4-Release,然后虚拟disc2镜像文件,复制里面的packages文件夹(MB左右)到刚才从

       disc1复制出来的5.4-RELEASE文件夹里面,提示文件名相同按覆盖就是.

       4: 修改刚才复制过来的5.4-RELEASE\packages的INDEX文件,用写字板打开,查找替换目

       æ ‡"||1"替换成"|"查找"||2"替换成"|",之后保存.

       5: 把下载了的isoemu解压到根分区(不需放在文件夹),即含有boot.ini文件的那个分区(里面

       åŒ…含了一个说明文件,详细说明了各个文件的用途和使用方法),之后编辑isoemu.ini找

       åˆ°"isogrub.iso"改为你的启动镜像文件名,我这里用"freebsd.iso",保存退出.

       6: 把5.4-RELEASE-i-bootonly启动镜像文件复制到安放了isoemu的分区,并改名

       ä¸º"freebsd.iso"与上面对应

       7: 修改boot.ini文件,在下面加入一行c:\ieldr="Load IsoEmu Final SV"

       8: 准备功夫完成,现在可以重新启动机器,选择启动load IsoEmu Final SV,isoemu就开始自动

       åŠ è½½freebsd.iso文件读取启动信息,接着就是熟悉的引导内核的界面.

       ä¸‹æ¥çš„步骤相信大家都熟悉,不知道的可以去看看HANDBOOK .你可以选择从硬盘安装,如果不想

       å¤åˆ¶ä¸‹è½½é‚£ä¹ˆå¤šæ–‡ä»¶æˆ–者你是局域网可以选择从网上安装,可以省略步骤2,3,只启动

       SYSINSTALL系统安装程序从其他媒介安装系统

       ä¸ä¼šå®‰è£…çš„,可以看看我以前的安装方法

       åˆ†åŒºçš„时候可以按下面的说明来

       æˆ‘经常建立的文件系统的次序是M的root,1G的swap,M的

       /var/tmp,3G的/usr,其余的空间留给/home。

       å…¸åž‹åœ°ï¼Œä½ åº”该把交换区大小定为2倍的内存大小。如果你没有很多内存,那样的话,你将需

       è¦æ›´å¤šçš„交换区空间。不建议将交换区定在小于M,当你确定交换区大小的时候,你要考虑

       åˆ°å°†æ¥å¯èƒ½è¦æ‰©å……内存。内核的VM(虚拟内存)换页算法性能是准对交换区至少是内存大小2倍

       çš„条件进行优化的。配置太小的交换区会导致VM页面扫描的低效率,当内存扩充后,随之也会

       å¯¼è‡´é—®é¢˜ã€‚最后在一个有多个SCSI硬盘的大系统上(或者有多个IDE磁盘工作在多个IDE 控制器

       ä¸Š),我们强烈建议在每个驱动器上配置交换分区,每个交换分区的大小应该是几乎一样的,

       å†…核能处理任意大小的交换区,但是内部数据结构放大到最大分区的4倍大小。保持交换分区

       åŒæ ·çš„大小允许内核优化地将交换空间交叉分布在N个磁盘上。不要担心这样做有点过份,交

       æ¢åŒºæ˜¯UNIX的救星,甚至于你虽然通常不用那么多交换区,在被迫重新启动之前,它也可以给

       ä½ æ—¶é—´åŽ»ä»Žä¸€ä¸ªå‡ºè½¨çš„程序中把系统恢复过来。

       æ€Žæ ·ä¸ºä½ çš„/var分区定大小主要依赖于你将怎样使用这台机器。这个分区主要存放邮箱,打印

       ç¼“冲区和日志文件。有些人甚至于把/var/log作为一个独立的分区(但是除非有特别的情况,

       è¿™æ ·åšä¸å€¼å¾—,只会浪费一个分区ID)。如果你这台机器主要用做邮件或打印服务器,或者运

       è¡Œä¸€ä¸ªå¤§è®¿é—®é‡çš„WEB 服务器,你应该考虑把这个分区建的更大一点,可能1G或更多。很容易

       ä½Žä¼°æ—¥å¿—文件的存储需求。

       ç¡®å®š/var/tmp的大小依赖于你将需要怎样使用你的临时文件。M是建议的最小的尺寸。注意

       sysinstall将建立一个/tmp目录,但是通常把/tmp作为/var/tmp的连接是个好注意。为临时文

       ä»¶å»ºç«‹ä¸€ä¸ªåˆ†åŒºæœ‰ä¸¤ä¸ªé‡è¦çš„原因: 首先,它减少了系统崩溃后文件系统损坏的可能性,再就

       æ˜¯å‡å°‘一个出轨程序填满[/var]/tmp时影响其他重要子系统(mail,logging等等) 的机会。填

       æ»¡[/var]/tmp是经常发生的问题。

       åœ¨ä»¥å‰/tmp和/var/tmp是不同的东西,但是引入/var(和 /var/tmp)是被程序员引起的大迷惑

       ï¼Œä»Šå¤©çš„程序间或使用一个或另一个,它们两者变的没有区别。所以把它们变成一个临时目录

       æ˜¯æœ‰é“理的.然而,当你处理/tmp时,有一件事情是你不想做的,就是把/tmp驻留在根分区上

       ï¼Œå¯¼è‡´æ ¹åˆ†åŒºè¢«å¡«æ»¡æˆ–崩溃后重启时文件系统损坏.

       /usr分区存放大量用于支持系统的文件,子目录/usr/local存放大量从ports(7)安装的文件.

       å¦‚果你不那么多使用ports,也不将系统源代码 (/usr/src)存放在机器上,你可以为/usr节省

       1G的磁盘空间.相反,如果你安装大量的ports(特别是窗口管理和Linux仿真)建议你至少2G的

       /usr,如果你还要将系统源代码放在机器上,我们建议你3G的/usr,不要低估所需的空间,它

       ä¼šæ…¢æ…¢çˆ¬èµ·æ¥ï¼Œè®©ä½ å¤§åƒä¸€æƒŠï¼Ž

       /home分区存放用户自己的数据,可以把余下的空间留给这个分区.

       ä¸ºä»€ä¹ˆè¦åˆ†åŒº? 为什么不建一个大的/分区就行了? 那样我就不需要考虑分区大小问题。有几

       ä¸ªåŽŸå› æ˜¾ç¤ºè¿™ä¸æ˜¯ä¸ªå¥½æ³¨æ„ã€‚首先,每个分区都有不同的操作特征,分开它们有利于文件系统

       å‡†å¯¹è¿™äº›ç‰¹å¾è°ƒæ•´å®ƒè‡ªå·±ï¼Žä¾‹å¦‚,根和/usr分区主要是读操作,只有少量的写,而大量的读和

       å†™å¯ä»¥å‘生在/var在/var/tmp。把小的但是具有更繁忙的写操作的分区分开,就不会影响读操

       ä½œå±…多的分区.再就是,把写操作居多的分区靠近磁盘外侧(例如,不是在一个大分区前,而

       æ˜¯åˆ†åŒºè¡¨åŽ)有利于对你经常需要的分区增加性能。你可能也需要在大分区中的I/O性能,但是

       å®ƒä»¬æ˜¯é‚£æ ·çš„大以至于把它们移到磁盘外侧也不会显著增加性能,但是把/var移到磁盘外侧会

       æœ‰æ˜¾è‘—的不同.

       5.4默认使用xorg,而且安装过程不会提示安装和设置桌面环境,完成安装重启系统,再运行

       sysinstall程序进行安装桌面,也可以通过port来安装,由你喜欢.另外还要运行xorgcfg -

GKI: 通用内核映像

       革新Android内核管理:通用内核映像 (GKI) 的崛起

       Android世界的新篇章正在书写,GKI——通用内核映像的出现,如同一剂良药,解决了困扰已久的内核碎片化问题。GKI以AOSP通用内核为基础,构建出一个单一、强大的二进制文件,消除了SoC和板级支持的冗余,为系统独立更新提供了稳定而高效的接口。它的核心特点在于:

基础稳固: GKI基于ACK,针对多平台和长期支持(LTS)版本,壁纸接口源码广泛测试确保功能的稳定性和兼容性,不包含专有代码,致力于提供持久的性能和维护效率。

逐步引入: GKI自Android v5.4开始分阶段推出,与Treble无缝对接,设备只需将启动映像和系统映像刷入特定分区,即可享受GKI带来的兼容性提升。

兼容与扩展: GKI要求所有产品内核共享KMI,供应商有机会扩展,但必须保证兼容性。目标是提升性能,减少维护负担,确保用户空间的稳定性。

       进入GKI 2.0时代,Android S及更高版本和5.x及以上内核的设备受益于GKI,无需供应商映像改动即可享受内核更新。GKI基于ACK的KMI分支,以-的形式标识,如android-5.4,严格控制KMI的稳定性和功能扩展。

       例如,新功能添加必须通过稳定接口,驱动程序与GKI内核的协同运行至关重要。构建过程中,供应商需确保模块兼容,KMI只包含公开维护的稳定符号,新接口的引入意味着稳定,但不允许随意改动。

       构建时需使用AOSP提供的Clang工具链,通过预提交测试确保KMI的稳定性。对GKI配置的管理必须谨慎,以保持ABI稳定性。GKI内核由Google提供并用于兼容性测试,boot分区包含通用组件和GKI模块,采用v3启动头文件。后续引导加载程序和DTB需分开存放,确保系统启动的高效和兼容性。

       对于GKI合作伙伴,特别是芯片厂商,可能需要树外补丁。在提交时,务必遵循贡献准则,首先尝试将更改迁移到android-mainline,然后扩展到其他分支。源代码改动需关联Buganizer问题,确保配置更改不会影响已冻结的KMI配置。

       在处理核心内核变更时,务必有明确的理由和影响分析。补丁应与驱动程序关联,并明确其目的和益处。如果无法直接发送到Linux上游,务必提交问题说明原因。更新KMI时,需考虑供应商模块的符号更新,利用extract_symbols脚本处理符号变更。

       GKI的出现,标志着Android内核管理步入了一个全新的阶段,它将助力开发者和设备制造商创造更高效、稳定且兼容的系统环境,为用户带来前所未有的体验。

深入理解 slab cache 内存分配全链路实现

       本文基于内核5.4版本探讨slab cache内存分配的全链路实现。在深入理解slab cache架构图之后,我们将从内核源码角度拆解实现细节。首先,slab cache如何进行内存分配?以内核从task_struct_cachep中申请task_struct对象为例,解析内存分配流程。

       内核使用fork()系统调用创建进程时,需要管理task_struct结构,为此设置专属slab cache(task_struct_cachep)。接下来,我们将聚焦于如何在slab cache中分配内存。

       内核通过fork.c文件中的dup_task_struct函数为进程申请并初始化task_struct对象。同时,kmem_cache_alloc_node函数指示slab cache从指定的NUMA节点分配对象。

       slab cache的快速分配路径

       slab cache初始进入快速分配路径(fastpath),首先尝试从cpu本地缓存(kmem_cache_cpu->freelist)获取对象。在获取kmem_cache_cpu结构时,需确保它是当前执行进程的cpu缓存。在配置了CONFIG_PREEMPT的情况下,允许优先级更高的进程抢占当前cpu,导致进程调度到其他cpu执行。此时,用于快速分配的对象可能与当前cpu的缓存不一致,内核通过循环判断tid一致性以防止此情况。

       内核从cpu缓存slab中获取第一个空闲对象。若无空闲对象或NUMA节点不匹配,则进入慢速分配路径(slowpath)。

       slab cache的慢速分配路径

       在慢速路径(slowpath)中,内核关闭中断并重新获取cpu本地缓存,防止进程在中断关闭前被抢占。随后,检查本地cpu缓存的slab容量,确保有空闲对象。若本地缓存为空,跳转至new_slab分支,进入慢速路径。若非空,内核再次检查kmem_cache_cpu->freelist,以防止进程中断后其他进程释放对象到缓存中。若此时有空闲对象,则直接从kmem_cache_cpu->freelist分配。若无空闲对象,则检查slab本身的freelist。

       分配内存流程

       内核在redo分支确认本地cpu缓存无空闲对象后,开始分配内存。首先在本地cpu缓存查找,若无空闲对象,则转至NUMA节点缓存的partial列表。在partial列表中查找可分配的slab,将其提升为本地cpu缓存,并更新kmem_cache_cpu->freelist,分配内存对象。

       若所有列表均为空,内核将跨NUMA节点查找,并尝试申请新slab。在成功申请slab后,内核填充相关属性,初始化freelist链表,并根据配置选择顺序或随机方式初始化。

       slab freelist初始化

       slab freelist初始化有两种方式:顺序或随机。顺序初始化根据内存地址顺序串联空闲对象,而随机初始化则以随机顺序连接。顺序初始化有助于直观理解,而随机初始化则用于安全考虑,避免预测。

       内核按照kmem_cache->size指定尺寸划分物理内存页,使用setup_object函数初始化内存区域并进行内存布局。在完成对象内存区域初始化后,slab freelist指针指向第一个初始化的空闲对象,重复此过程直至所有空闲对象串联,最后设置freelist的末尾为null。

       总结

       通过本文的探讨,我们深入了解了slab cache内存分配的完整流程,包括快速和慢速路径、slab对象初始化和内存页详细初始化。理解了这些关键点有助于深入掌握slab cache的内存管理机制。

Linux SPI-NAND 驱动开发指南

       Linux SPI-NAND 驱动开发指南概述

       1.1 目的

       本指南旨在详细介绍Sunxi SPINand mtd/ubi驱动,为驱动和应用开发者提供便利。

       1.2 适用范围

       适用于所有sunxi平台的NAND MTD/UBI驱动开发。

       1.3 参与人员

       包括NAND模块开发者和应用开发者在内的相关人员。

       关键概念

       MTD:Linux子系统中的内存技术设备,负责Flash驱动部分。

       UBI:基于MTD的子系统,管理NAND特性,屏蔽底层细节。

       坏块:由制造工艺和设备性质导致的不可用存储单元。

       开发流程

       3.1 结构设计

       NAND MTD/UBI驱动由5个核心组件构成,如图所示:

       3.2 源码位置

       驱动代码位于Linux 5.4内核的mtd/awnand/spinand目录下。

       关键数据定义

       flash设备信息:包含型号、ID、芯片内部结构等详细参数。

       chip操作接口:如读写、擦除、ecc处理和缓存管理等。

       操作请求结构:定义了操作的目标页面和数据结构。

       UBI ECC header:存储擦除计数器等信息。

       UBI VID header:逻辑和物理块映射的详细描述。

       接口说明

       3.4.1 MTD层接口:包括 erase、read、read_oob、write、write_oob、检查坏块和标记坏块等。

       3.4.2 物理层接口:针对芯片级别的读写、擦除和坏块操作。

       模块配置

       4.1 U-Boot配置:涉及特定菜单项,如图所示。

       4.2 内核配置:涉及UBI、NAND和SPI相关配置,如SPI设备、DMA和SID设置。

       4.3 env.cfg:在构建过程中,通过添加特定变量来定制驱动环境。