译至: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. Swift系列十 - inout的本质

    inout是可以用来在函数内部修改外部属性内存的. 一.inout回顾 示例代码: func test(_ num: inout Int) { num = 20 } var a = 10 test(& ...

  2. linux(centos 7)下安装JDK,Tomcat,mysql 运行Maven 项目

    一.在Linux中安装JDK 1. 将JDK上传到root下(任何位置均可以). 如图: 2. 用解压命令解压JDK tar -xvf (此处为jdk文件名) 如果是rpm包,执行rpm -i jdk ...

  3. android设置时钟

    <TextClock        android:id="@+id/timeText"        android:layout_width="match_pa ...

  4. TVM在ARM GPU上优化移动深度学习

    TVM在ARM GPU上优化移动深度学习 随着深度学习的巨大成功,将深度神经网络部署到移动设备的需求正在迅速增长.与在台式机平台上所做的类似,在移动设备中使用GPU可以提高推理速度和能源效率.但是,大 ...

  5. L3级自动驾驶

    L3级自动驾驶 2020年开年 3月9日,工信部在其官网公示了<汽车驾驶自动化分级>推荐性国家标准报批稿,并拟于2021年1月1日开始实施. 按照中国自身标准制定的自动驾驶分级标准,在千呼 ...

  6. Linux 2 的 Windows 子系统上发布 CUDA

    Linux 2 的 Windows 子系统上发布 CUDA 为响应大众需求,微软 宣布 在 2020 年 5 月的 建造 大会上推出了 建造 ( WSL 2 ) – GPU 加速功能.这一特性为许多计 ...

  7. Redis6.x学习笔记(五)哨兵

    前言 最近学习Redis6.x,特做笔记以备忘,与大家共学.课程是从私塾在线下载的,他们把架构师课程都放出来了,大家可以去下载学习,不要钱的,地址是http://t.hk.uy/eK7,课程很不错,值 ...

  8. swagger 注解使用

    @Api() 用于类:表示标识这个类是swagger的资源 tags–表示说明 value–也是说明,可以使用tags替代 但是tags如果有多个值,会生成多个list @ApiOperation() ...

  9. JUC 并发编程--05, Volatile关键字特性: 可见性, 不保证原子性,禁止指令重排, 代码证明过程. CAS了解么 , ABA怎么解决, 手写自旋锁和死锁

    问: 了解volatile关键字么? 答: 他是java 的关键字, 保证可见性, 不保证原子性, 禁止指令重排 问: 你说的这三个特性, 能写代码证明么? 答: .... 问: 听说过 CAS么 他 ...

  10. 【NX二次开发】Block UI 目录

    Block UI 目录  基本   标签/位图   切换开关   枚举   字符串   多行字符串   操作按钮   列表框   分割线   对象颜色选择器   RGB颜色选择器   绘图区   图层 ...