作者 | 马超

责编 | 胡巍巍

出品 | CSDN(ID:CSDNnews)

1月9日,腾讯正式开源其云原生操作系统内核TencentOS Kernel(GitHub地址:https://GitHub.com/Tencent/TencentOS-kernel),笔者看到,在GitHub上发布几小时后,该项目已经获得了近百个Star。

在十年前,业界普遍流传着一句话叫做“代码正在吞没世界”,后来又说“互联网世界的一切源自开源”。而直到最近,人们才真正醒悟,原来云原生才是背后的那个大BOSS,凡是不使用云的都将落后,都无法做到敏捷,跟不上时代。

TencentOS Kernel恰恰是开源+云原生的典范,其定制于Linux社区长期支持的4.14.105版本,在资源调度弹性、容器支持、系统性能及安全等层面,都做了深度优化。

该系统的开源,可以帮助行业大幅提升云上资源的利用效率、降低运营成本,同时获得更加安全可靠的业务运行环境。

腾讯开源惊喜不断

在2019年腾讯Techo开发者大会上,腾讯正式宣布将通过“自下而上”与“自上而下”相结合的方式,推进开源工作。

腾讯还建立对外开源管理办公室,对开源项目进行指导和帮助,为开发者提供社区合作交流机会,建设以开源为核心的技术生态圈。

笔者刚刚在GitHub上做了一下统计,截止1月9日下午,腾讯在GitHub上发布的总项目数达到93个,Star数超27万;而且其开源项目很多都堪称重磅,比如腾讯把以性能RPC开发框架TARS及轻量化服务方案TSeer,捐赠给Linux基金会,而微信Web服务框架WeUI,一经发布就广受好评。

腾讯在操作系统方面,也是动作不断,比如TencentOS Kernel的兄弟——Tencent OS Tiny,这个才刚刚问世的IoT操作系统,凭借其低功耗、低资源占用、模块化、安全可靠等特点,目前在GitHub上获得3700颗Star。

云原生TencentOS Kernel初体验

在目前超大规模计算的时代,提升效率、降低成本是最基本的诉求。而云原生最大的特点,就是可持续交付和微服务化,将容器打造成微服务的运行载体。

但是,现在的通用Linux系统内核,并不是为容器+微服务的云原生架构所设计,在很多方面,甚至不太合适云原生,但是TencentOS Kernel做了很多直面痛点的优化工作:

ARM64架构的内核热补丁方案: 内核热补丁技术是一种无需重启服务器,即可实现修改内核运行时代码的技术。基于该技术,可以在不影响业务正常运行的情况下,修复内核Bug或者安全漏洞,以提高运营效率、底层平台的稳定性和可用性,并使得业务运营体验有效提升。

目前,面向互联网的云服务,每天都会面对数量众多的攻击事件,及时针对内核漏洞进行热补丁升级,是云服务安全运营的最低要求。

可是,当下其它Linux内核,针对在云计算中被广泛应用的ARM架构设备,还缺乏热补丁支持,不过TencentOS Kernel填补了这个空白。

TencentOS Kernel基于Kpatch框架,开发了ARM64热补丁特性。Kpatch在内核中,是基于ftrace实现内核函数的替换,类似于ftrace的动态探测点,不过不是统计某些运行数据,而是修改函数的运行序列:在函数运行某些额外的代码之后,略过旧函数代码,并跳转至新函数。

而在用户态中,则通过Kernel源码编译内核,打上补丁后再次编译内核,通过分析两次目标文件的变动情况,生成diff.o,并通过解析diff.o生成最终的patch.ko,有关这个方面的实现,令人拍案叫绝,笔者后续计划专文详述此部分原理。

升级资源隔离特性

由于容器是特殊的进程,不同容器之间,并不能像同一操作系统下的进程间,那样进行共享,安全隔离始终是容器平台的核心问题。

而其它版本的Linux内核提供的隔离特性,远远不能满足容器隔离的实际需求内核中,/proc文件系统中,大部分信息没有实现namespace功能,隔离性根本无从谈起。

TencentOS Kernel从容器角度出发对于cpuinfo、stat、loadavg、meminfo、vmstat、diskstats、uptime等进行了隔离增强,保证容器中的应用,能获得正确的系统状态信息。

TencentOS Kernel还提供进程GDB禁止功能,阻止跨进程获取内存,加载动态库等,保障业务进程的数据安全。

并且针对容器内外进程PID对应关系的痛点,做出了优化,在内核参数kernel.watch_host_pid = 1时,容器内可以通过读取/proc/self/hostinfo文件,来获取容器内进程在容器外的真实pid。

更重要的是,TencentOS Kernel待Push的版本中,还特别提到,将提供包括NVMe IO隔离等特性,这将彻底解决IO控制组在多队列设备场景资源利用率低,不支持按比例隔离等问题,保证了不同场景下的IO隔离效果。

CPU弹性调度算法

TencentOS Kernel针对容器的特性,实现了专门的调试算法,在离在线业务混布场景下收益十分显著。

笔者看到,其离线调度算法也即将Push,在不影响在线业务质量的前提下,整机的CPU利用率最高提升了3倍,部分业务场景下可将整机CPU利用率提升至90%。

性能方面,TencentOS Kernel针对计算、存储和网络子系统均经过独有的优化,例如PAGE CACHE LIMIT功能,限制Page Cache的使用率,尽量使系统剩余的内存能够满足业务的需求;TencentOS Kernel还新增多个sysctl/proc控制接口,内核启动参数等来优化用户体验。

后记

IT业与传统行业最大的不同,就是其背后还隐藏着侠义江湖的影子,笔者相信腾讯此次怀着巨大诚意开源的TencentOS Kernel,也必将能从开源社区中,得到中肯的意见与支持。

开源是武林高手下场比武,这种不断交流切磋的过程,必将提高各门派的武功水准。在此笔者也由衷希望,腾讯今后能开源更多优质的项目,推动行业良性发展。

热 文 推 荐 

☞逃离泄露事件,阿里云安全默认防御大揭秘 | 问底中国 IT 技术演进

☞支付宝集五福下周一开始;iPhone 面世 13 周年;Laravel 6.10.0 发布 | 极客头条

☞作为多年 PHP 的开发者,在使用了 Go 语言之后......

2019 互联网大事记:谁是最后的赢家?

☞中国程序员在美遭抢劫电脑遇害,数百人悼念

☞2019,不可错过的NLP“高光时刻”

☞详解CPU几个重点基础知识

☞在以太坊上开发 Dapp 的瓶颈和门槛有哪些? | 博文精选

你点的每个“在看”,我都认真当成了喜欢

腾讯开源开年红!TencentOS 内核正式开源相关推荐

  1. 华为愿出售5G技术渴望对手;苹果将向印度投资10亿美元;华为全联接大会首发计算战略;腾讯自研轻量级物联网操作系统正式开源……...

    戳蓝字"CSDN云计算"关注我们哦! 嗨,大家好,重磅君带来的[云重磅]特别栏目,如期而至,每周五第一时间为大家带来重磅新闻.把握技术风向标,了解行业应用与实践,就交给我重磅君吧! ...

  2. java虚拟机开源_IBM J9 Java虚拟机正式开源

    原标题:IBM J9 Java虚拟机正式开源 近几年选择参加java培训的人越来越多,荣新教育小编带你学java,每天学一点,一年成为java编程高手.OpenJ9 是一个高性能的企业级 Java 虚 ...

  3. “易+”开源网易易盾 GameSentry 正式开源,做游戏安全保障的尖兵利刃

    The First Line Of Defense - GameSentry 哨兵是守护安全的第一道防线,不停的监视着每一个外敌可能进行渗透的角落.网易易盾的 GameSentry 作为游戏安全战场上 ...

  4. 腾讯,干掉 Redis 项目,正式开源、太牛逼啦

    项目简介 Tendis是腾讯互娱CROS DBA团队 & 腾讯云数据库团队自主设计和研发的分布式高性能KV存储数据库,兼容Redis核心数据结构与接口,可提供大容量.低成本.强持久化的数据库能 ...

  5. 腾讯,干掉 Redis 项目,正式开源、太牛逼啦!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 项目简介 Tendis是腾讯互娱CROS DBA团队 &a ...

  6. 腾讯向开放原子开源基金会捐赠TencentOS tiny、TKEStack两大项目!

    10月15日,腾讯正式宣布,将旗下两大开源项目--轻量级物联网实时操作系统TencentOS tiny和企业级容器编排引擎TKEStack(均待更名)捐赠给开放原子开源基金会.未来这两个项目将在基金会 ...

  7. 微软正式开源WSL 2的内核源码

    微软在今年5月举办的 Build 2019 上宣布了第二代 Windows 的 Linux 子系统 -- WSL 2.与第一代相比,WSL 2 重新设计了架构,使用真正的 Linux 内核,支持在 W ...

  8. php围棋源码,腾讯围棋AI技术 PhoenixGo 正式开源,源码、模型全公开

    5 月 11 日,腾讯微信团队研发的 PhoenixGo 正式开源,这也是国内第一个开源的围棋 AI 项目. PhoenixGo 是腾讯微信翻译团队开发的人工智能围棋程序,旨在学习人工智能前沿技术.从 ...

  9. 腾讯开源物联网操作系统 TencentOS tiny,最小体积 1.8KB!

    作者 | 胡巍巍 责编 | 伍杏玲 出品 | CSDN(ID:CSDNnews) 2010年秋,笔者还在念书,有一天,几个男生在讨论"3Q大战",还有几天就18岁的我,表示很懵懂. ...

最新文章

  1. java随机生成不重复的数组_Java生成不重复的随机数组的方法
  2. 编译器错误信息: CS1595: 已在多处定义“ ”;一种可能出现的情况
  3. 使用Go语言从零编写PoS区块链(译)
  4. linux定时器回调处理过程,Linux内核系统定时器TIMER实现过程分析
  5. 上接游戏人生Silverlight(2) - 趣味钢琴[Silverlight 2.0(c#)]
  6. Struts2的ValueStack(值栈)介绍
  7. 剑指offer——面试题42-2:翻转单词顺序
  8. 哨兵系列卫星_空客“哥白尼哨兵-1C”卫星雷达天线首次展开双翼
  9. 视频教程-学透JavaScript-JavaScript
  10. 无线联网常见问题[1]-搜不到无线网络(请先耐心看完)
  11. [原创] 适合新手的转手绘教程[ JJ ]
  12. pandas计算同比环比增长
  13. 计算机专业如何改革创新的生力军,年轻干部如何真正成为改革创新的生力军?...
  14. uniapp签名使用canvas实现多张图片合成一张
  15. FPGA学习日志——VGA接口项目
  16. html怎么画虚线空心圆,PS怎么画虚线圆圈 一个工具轻松搞定
  17. 计算机学术为啥分要比专硕低那么多,专硕,凭什么是鄙视链最底端的一群人
  18. 小程序内部一键关注关联公众号 如何实现小程序无跳转关注公众号
  19. 公纵号发送提示信息(用户微服务--消息微服务)
  20. Navicat for MySQL 连接 MySQL 报2005错误

热门文章

  1. 题目1140:八皇后
  2. Launcher分析修改记录(1)----序
  3. ny 2 括号配对问题
  4. 矩池云上安装caffe gpu教程
  5. python画图实战_python实战学习之matplotlib绘图续
  6. python image清除_60秒掌握Python内置模块Turtle的用法——绘制漫天雪花
  7. opencv-python 鼠标事件和坐标点截图
  8. 前馈神经网络对mnist数据集实战
  9. python2 和 python3 在print时的细微差别 (sep等操作)
  10. cmi码型变换matlab程序_58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!...