从Linux内核升级的必要性说开去

4709人阅读 评论(0) 收藏 举报
Linux内核更新超级频繁,但是有必要时刻升级吗?
个人感觉没有必要,但是你要时刻关注新特性列表,然后把自己的内核升级到离最新版本差一两个月发布的版本而不是最新版本,以保证稳定性,因为一两个月的时间足够多的慧眼会发现足够多的问题,既然自己不是Alan Cox那个梯队的大牛,最好不要在自己的生产版本上使用最新内核,当然,做试验或者Just play例外。
       为什么要升级内核?是的,很多人并不同意这种观点,可能他们认为使用内核提供的最持久最稳定的接口就已经足够,多数的定制特性需要自己在用户空间开发,当然这也符合UNIX的哲学,并且,他们认为用户态写自己的so而不是bash,python脚本会提高自己软件的竞争力,因为你看不到源代码,一个so就能实现OpenVPN的负载均衡,你又不知道他是怎么做的,所以这种神秘感的背后,人们会认为其技术及其高深。反之,如果使用了内核提供的特性,他们便会认为这种技术谁都可以使用,并不是自己独占独享的,做出来的东西便失去了竞争力。
       这种观点是彻头彻尾错误而且及其错误且幼稚的!
       关键不是你保留了多少别人不知道的技术细节,关键在于你能多快推出一个可以使用的五脏俱全的最简版本,并且能以多快的频率持续更新,持续优化,而这一切很大的分量上并不是你自己闭门顿悟的,而是来自使用者的反馈。快,才是根本!
       怎么才能快?简单,能不自己写的就直接拿来,能利用的现成特性就直接用,这样就节省了自己很大的工作量。要把心思花在如何简单地扩展功能满足需求上,而不是花在钻研某个技术细节上。难道你用C写so的时候,不也是调用了人家C库以及第三方(甚至是你的同事写的)库提供的API么?这不也是拿来?你隐藏的仅仅是如何组装这一切的细节,而这只是一条路而已,没人在乎你是如何将组件组装成功能的,用户在乎的是可以使用。
       举例来讲,我在Linux 2.6.32内核上吭哧几个星期也搞不定如何让多个OpenVPN进程共享一块TUN网卡,事实上我改写过TUN驱动,但是没有经过稳定性压力测试,所以能不能用还不知道,我所完成的可能仅仅是可行性预研罢了,后来由于没有项目或者个人原因推动,这种成果也只能停留在纸面上。但是那毕竟消耗了我的时间和精力,虽然我没有占用我的工作时间(到了后期就不一样了),那个时候老婆和女儿又长期不在身边,就我自己在家,我下班后或者周末有的是时间,但是毕竟因为搞这个东西让我直到现在还欠了几部关于古罗马的纪录片没有看!我花了很长时间研究如何实现UDP服务的并发,《UNIX网络编程》上的方案也看过,对于OpenVPN这样的服务而言根本不切实际,我想过通过fork让子进程继承父进程的UDP描述符,但是会有惊群问题,我知道有SO_REUSEPORT这个option,但是Linux的实现并不能满足我的需求(这是实现问题,而不是接口问题),于是我又花了很长实现写出了UDP多端口的负载均衡内核模块,同时想出了利用iptables的random DNAT方案,然而只要我将内核版本升级到3.9.6这个版本或者以上,所有问题都解决了,我只需要在UDP socket上设置一个SO_REUSEPORT选项即可,同时我也不再需要写代码了。
       高版本的内核具有三方面的效用,更高效,更多新的特性,曾经bug的修复,但是对于新引入的特性,可能会引入新的bug,不过你仅仅需要慎重使用新特性就可以了。举例来讲,我实际中会使用到的功能,比如TCP的Fast open,网络的命名空间,多队列的TUN网卡,这些在2.6.32内核上就不支持(命名空间有是有,但是接口使用时太不方便)。你是想花一月时间自己写一个多队列的TUN驱动呢?还是希望有一个直接可以用的呢?诚然,高版本内核自带的TUN驱动不是你写的,不能代表你的实力,不能给你带来竞争力,但是你的目的决不仅仅是用上一个多队列的TUN而已,你的目标可能是搞一个另类的OpenVPN,别人不曾想到的那些易用的功能,你自己提炼出来的可能的新的需求,这些才是竞争力,而不是其实现。我通过阿皮亚大道到达罗马,而你辗转阿尔卑斯山,是的,你比我更能体现什么是力量和毅力,但是,我先到了。
       升级内核有什么问题呢?没有免费的午餐,升级内核也不例外。升级后,所有的应用软件还能正常吗?这就是说,两个版本的内核的API规范变了吗?一般而言,兼容性是内核API的本质特征之一,可是却不是绝对的,万事都不绝对。因此,不到出问题的时候,你可能永远都不知道它有问题,你能很容易证明一件事情是错误的,但是却很难证明它是正确的。既然这样,那还怕什么,升级是唯一的选择,因为即便你不升级,你也不能证明现在的内核和应用程序之间的配合就一定没有问题,虽然它们至少经过了测试,但是你难道不能在新内核上做同样的测试吗?不能因为惧怕错误而停止前进。
       也许你可以坚持所有东西都自己开发以保持自己的原创性以及竞争力,同时小心翼翼守护自己的战果,生怕被别人抢去,并心甘情愿为以上所有这些付出成本,因为每个人都是这么干的。但是我却坚持我的观点,四处搜罗线索,最小化工作量满足最大的需求,东西可以不是我做的,但是一定是我交到你手上的。Linux内核是多么大的一座宝库,随时都有新的东西供你使用,你可以使用它的最新的接口实现新的想法,你也可以抽取它的内部算法,迄今为止,我使用过很多从Linux内核拿来的算法,比如嵌入式list,hlist,比如路由查找的hash算法,trie算法,红黑树,AVL树,radix树等容器,还借鉴其CFS以及O(1)调度算法实现过一个消息输出系统,从Linux内核说开去,任何的开源代码其价值不仅仅是最终形成的软件本身的自由使用分发,它内部实现本身就是一座宝库,你可以从中得到很多的东西。不过,仅仅拿来是无耻的,必须保持一颗时刻分享的心。升级内核的意义就在于,在你眼前,很多的好玩的东西让你可以所见即所得,不管是工作中,还是平时的周末折腾。当然如果你是一个企业的总监级别的人,或者你有深深的包袱,可以将我所说的当成废话一堆,因为你可能有更重要的因素要考虑,比如客户升级之类的,比如兼容性之类的,而不仅仅是图个纯技术性的痛快。但是即便对于这些高大上的所谓圈子正中央的人,如果你已经摆脱了包袱,也请考虑一下我的观点,时刻保持最新。
PS:我为何学不会Python
学不会吗?也许。不想学吗?不。人们都说Python简单,但是我为何好几次都没有系统地学习它。因为我把关注点集中在问题本身而不是如何实现它上了。我想通过买一个树莓派把家里的电视机改成网络播放器,同时用Python实现管理UI,通过这么一个动作来学习Python,我本以为做这么一个UI可以让我掌握Python,然而,我一心想早日通过我的电视机给小小放爱探险的朵拉,于是我在网上找到了现成的代码,复制粘贴,少量修改,任务很快完成了,Python没有学会...我很沮丧,可是小小却很高兴。
查看评论

Ubuntu 16.04安装sogou 拼音输入法

安装完Ubuntu 16.04后,要更换为国内的软件源:           sudo gedit /etc/apt/sources.list   #用文本编辑器打开源列表 在文件开头添加下面的阿...
  • ljheee
  • ljheee
  • 2016-10-29 20:36:15
  • 44145

升级Linux内核

升级Linux内核,包括Linux内核版本的介绍、下载、编译、升级,以及Linux内核升级过程中出现的错误及其解决方法。...
  • guoxiaojie_415
  • guoxiaojie_415
  • 2016-01-25 12:25:33
  • 3021

从Linux内核升级的必要性说开去

Linux内核更新超级频繁,但是有必要时刻升级吗?个人感觉没有必要,但是你要时刻关注新特性列表,然后把自己的内核升级到离最新版本差一两个月发布的版本而不是最新版本,以保证稳定性,因为一两个月的时间足够...
  • dog250
  • dog250
  • 2014-07-19 17:27:21
  • 4709

linux内核编译过程的最终总结版

一、实验目的 学习重新编译Linux内核,理解、掌握Linux内核和发行版本的区别。   二、实验内容 在Linux操作系统环境下重新编译内核。实验主要内容: A. 查找并且下载一份内核源代...
  • fjt19900921
  • fjt19900921
  • 2012-12-18 22:04:15
  • 21269

从时间说开去

非常羡慕那种需要很少睡眠,思维敏捷,做事雷厉风行的人。之所以羡慕,是因为我不具备。 我做为一个需要很多睡眠并且睡眠质量不高的人,做事也一般是三思而后行,遇事也慢人半拍,对于我这样一个人,怎样合理安排...
  • huangyuanmu
  • huangyuanmu
  • 2013-11-21 10:27:03
  • 684

从《明朝那些事儿》说开去

这两天翻书,翻出来了那7本《明朝那些事儿》,于是又有了些感慨。想着前几年在看这个书的时候,甚至达到了废寝忘食的地步,甚至于疏于带孩子而跟老婆吵架。作者当年明月能把那么黑暗的明朝史,写的这么正能量,着实...
  • huangyuanmu
  • huangyuanmu
  • 2013-11-28 09:45:59
  • 562

如何更方便的查看Linux内核代码的更新记录

Linux内核的更新非常的快,如何快速的了解这些更新呢?最一般的办法就是把新旧版本的内核源码下载下来,然后利用BCompare或别的什么工具进行源码对比,但这明显比较费力耗时,而本文将介绍一种更快捷简...
  • lee244868149
  • lee244868149
  • 2015-03-16 11:08:39
  • 2088

CentOS6.5升级内核到3.10.28

本人升级的目的是想在CentOS6.2上运行docker,官方建议内核版本在3.8.0及以上,于是就自己从Linux内核官方网站上下载源码,自己编译。 1. 准备工作 确认内核及版本信息 [root@...
  • taiyang1987912
  • taiyang1987912
  • 2015-01-15 17:35:27
  • 35875

从一次python程序的性能优化说开去

一门编程语言入门是容易的,至少大家都知道从hello world开始。但这次性能优化的经历告诉我,“换语言”这件事是有门槛的。 这次性能优化是针对数据入库流程中的一个环节(brief)做的。 我们...
  • shiludeng
  • shiludeng
  • 2018-03-03 23:32:20
  • 33

从一道互联网面试题(搬香蕉)说开去

Table of Contents 1 问题描述2 问题分析3 程序代码 1 问题描述 A、B两座城市相距1000Km,我们有3000个香蕉要从A城市运往B城市,已知一头大象一次最多能运1...
  • huangkangying
  • huangkangying
  • 2014-08-16 18:30:26
  • 1857
    个人资料
    持之以恒
    等级:
    访问量: 725万+
    积分: 8万+
    排名: 17
    文章存档
    最新评论