译至:http://www.linuxjournal.com/content/diff-u-whats-new-kernel-development-1

Linux的一个问题是它的系统调用实现 。 正如Andy Lutomirski日前指出的,它非常的混乱。 他说,甚至确定哪些系统调用是为哪个架构所实现也是非常困难的,因为需要识别调用名和编号的映射关系,以及调用参数寄存器和系统调用参数之间的映射关系。一些用户程序如 strace 和 glibc 需要知道这类信息,但是他们收集这些信息的方式  -- 虽然很好完成了,但也是非常的凌乱。

安迪建议通过苦读内核代码,写一个文本文件作为系统调用的“主列表”,给出调用名,相应的调用号,支持的体系结构和其他的信息。 别的不说,这将允许像glibc这样的工具去消除它们那丑陋的实现并使用一个简单的库来从内核之外获取这些信息。

H·Peter Anvin喜欢这个主意,但表示,这将花费了很多工作来让它正确运行。 他提到,他一直主张沿同一路线一直一去,这可以追溯到他在klibc上工作。

其他人也喜欢安迪的想法 -- 特别是那些到需要自己去整理系统调用来实现用户代码的人。 大卫·豪威尔说,如果使用strace也可以依靠安迪的主列表,这将是极其美妙的。 而且, Michael Kerrisk说, 手册项目也有兴趣跟踪主列表的进度。

总有一种特殊情况受益于进程调度的调整。 近日,来自Oracle的哈立德·阿齐兹提交了一些代码,允许用户进程要求额外的时间片。 通常,内核本身控制这种资源分配,因为不然的话该系统将依赖于用户应用程序的友好性或良好的编码。

但是,哈立德的数据库同事也注意到一个问题,大量的线程争用同一互斥量。 如果这些线程中的一个获取了互斥量并准备放弃时,调度器可能会遍历所有其他进程的队列,但它们中没有一个可以实际运行的,因为他们都在等待同一个互斥量。这就很麻烦了,持有互斥量的进程被设置为放弃但却不能放弃,因为它已被抢占。 哈立德说,情况会好的多,让持有互斥量的进程延迟抢占,让它有足够长的时间去放弃互斥量。 然后所有的其他进程能轮到它自己来做实际工作,而不是花自己宝贵的时间片在不可用的锁上忙等。

哈立德说,他的代码显示相对于之前的情况下加速了3-5%。 但是,仍然一些意见不愿意接受他的代码到内核中。

特别是,H. Peter Anvin指出,哈立德的代码允许用户空间程序将内核自有的抢占式多任务变换成协同式多任务模式,在该模式中所有的进程都必须必须同意谁能够得到时间片,何时一些进程能在损害其他进程的同时积极地获取时间片。

Davidlohr Bueso指出,自愿抢占模型允许进程自愿放弃自己的时间片给另一个进程,可以与现有的内核实现更好地工作。没有来自敌对的进程的危险。

针对哈立德的设计有各种替代品的建议,但哈立德始终指出,他的方式是最快的。 不过, Thomas Gleixner说,“这是一个可怕的想法。你正在创造的是以水晶球软件为基础的时间绑定的优先级,上层提供的是我见过的最糟糕的用户空间接口。”

显然,这是真正的问题。 给用户空间的代码可以抢占正常调度进程的能力意味着内核和其他用户空间进程无法预测系统的行为,甚至无法适当地调试问题。

托马斯一度说道,“你正在试图做的事基本上是创建一个ABI,我们要永远支持和维护这个ABI。这绝对是一些严重的问题。” 他补充说,“如果我们因为你的数据库负载而允许你的特殊情况,那么我们就没法去争辩,为什么我们不应该为实时的工作负载做同样的事情,其中SCHED_FAIR守护线程可以短暂持有锁来获得一些在SCHED_FIFO实时计算线程里的重要的数据。当然RT的人想避免锁竞争如你所做,只是为了不同的理由。“

埃里克·W·毕得曼也反对哈立德的代码,他说道:“你允许任何任务延长其时间片,这意味着我会有这样一个问题,在sched_preempt_using_job任务运行时,为什么really_important_job错过了时间保证?” 他说:“你的改变似乎已经极难调试非本地的影响。”

似乎很多人有兴趣去实现像哈立德提出的功能,但看起来也有人关注安全问题,关注可调试性和可维护性,这使整个事情变得很不确定。 但是,哈立德仍然可能解决这些问题,并想出了一个补丁来实现数据库的需要,而没有那些乱七八糟的。

diff -u:内核开发的新项目的更多相关文章

  1. Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目

    一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...

  2. git实战-多分支开发-2022新项目

    现在开发中大多数公司中都在使用Git这个代码版本管理工具,几乎可以说是已经成为标配,刚入职不久的这家新公司也不例外. 去公司没多久,开始搭建项目,然后创建开发分支,有多少个后端人员就创建多少个开发分支 ...

  3. swift开发新项目总结

    新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案   1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编      考虑到新项目 ...

  4. 用Kotlin开发Android应用(II):创建新项目

    这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...

  5. Android Studio开发第二篇创建新项目

    创建新项目很简单,File-New-New Project,这个没什么好说的跟Eclipse都差不都. 第二步SDK选择,有手机平板还有Wear,TV,汽车Auto,谷歌眼镜等几个种平台,这里就先选择 ...

  6. Android新项目GBSS:第1篇 搭建开发环境

    最近接手一个Android新项目,之前也没做过这方面的开发,算是边学边干,这两天看了一下Android开发的书,大致入门了一点,今天把所需要的软件都下了下来,准备开工,先列一下开发环境: 所有的软件都 ...

  7. 基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)

    系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...

  8. 项目开发中Maven的单向依赖-2022新项目

    一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...

  9. 如何参与Linux内核开发(转)

    本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...

随机推荐

  1. 我的Python书被台湾的出版社引进版权了,书的名字也更吸引人了

    我去年出了一本Python书,基于股票大数据分析的Python入门实战,在这本书里,我是用股票范例讲述Pythorn的爬虫,数据分析和机器学习知识点,如下是京东的连接. https://item.jd ...

  2. .Net Core gRPC 实战(一)

    gRPC 是一种与语言无关的高性能远程过程调用 (RPC) 框架. gRPC 的主要优点是: 现代高性能轻量级 RPC 框架. 协定优先 API 开发,默认使用协议缓冲区,允许与语言无关的实现. 可用 ...

  3. 查询rman备份信息常用指令

      查询rman备份信息常用指令 ----登陆到rman $rman target / ----以精简的格式查看备份信息 RMAN> list backup of database summar ...

  4. Jmeter- 笔记10 - 在GUI生成html报告

    步骤1.在聚合报告,浏览一个存放jtl文件的路径,输入不存在的jtl文件,确定后会出现如下图弹窗,不用理会,关掉 步骤2.运行脚本 步骤3.打开工具 -> Generate HTML repor ...

  5. 5分钟就能学会的简单结构 | MLP-Mixer: An all-MLP Architecture for Vision | CVPR2021

    文章转自:微信公众号「机器学习炼丹术」 作者:炼丹兄(欢迎交流,共同进步) 联系方式:微信cyx645016617 论文名称:「MLP-Mixer: An all-MLP Architecture f ...

  6. synchronized使用及java中的原子性问题

    1.Synchronized关键字使用 class X { // 修饰非静态方法 synchronized void foo() { // 临界区 } // 修饰静态方法 synchronized s ...

  7. Python分析离散心率信号(上)

    Python分析离散心率信号(上) 一些理论和背景 心率包含许多有关信息.如果拥有心率传感器和一些数据,那么当然可以购买分析包或尝试一些可用的开源产品,但是并非所有产品都可以满足需求.也是这种情况.那 ...

  8. 嵌入式Linux设备驱动程序:发现硬件配置

    嵌入式Linux设备驱动程序:发现硬件配置 Embedded Linux device drivers: Discovering the hardware configuration Interfac ...

  9. 「题解」USACO15FEB Fencing the Herd G

    本文将同步发布于: 洛谷博客: csdn: 博客园: 简书: 题目 题目链接:洛谷 P3122.USACO 官网. 题意概述 给你平面上的一些点和直线,有两种操作: 新加入一个点 \((x,y)\): ...

  10. 【NX二次开发】Block UI 分割线

    设置控件可见 this->separator0->GetProperties()->SetLogical("Show",true);