译至: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内置方法进行代码混淆

    0x00 动态加载模块 在python脚本中,直接使用import os.import subprocess或from os import system这种方法很容易被规则检测,即使使用其它执行命令的 ...

  2. Ajax向服务器端发送请求

    Ajax向服务器端发送请求 Ajax的应用场景 页面上拉加载更多数据 列表数据无刷新分页 表单项离开焦点数据验证 搜索框提示文字下拉列表 Ajax运行原理 Ajax 相当于浏览器发送请求与接收响应的代 ...

  3. 解决Maven资源过滤

    <build> <resources> <resource> <directory>src/main/java</directory> &l ...

  4. ThinkPHP无限级分类(递归)

    代码演示 没什么可说的直接看代码 <?php namespace app\controller; class Category { //模拟假数据 protected static functi ...

  5. Non-Maximum Suppression,NMS非极大值抑制

    Non-Maximum Suppression,NMS非极大值抑制概述非极大值抑制(Non-Maximum Suppression,NMS),顾名思义就是抑制不是极大值的元素,可以理解为局部最大搜索. ...

  6. PyTorch全连接ReLU网络

    PyTorch全连接ReLU网络 1.PyTorch的核心是两个主要特征: 一个n维张量,类似于numpy,但可以在GPU上运行 搭建和训练神经网络时的自动微分/求导机制 本文将使用全连接的ReLU网 ...

  7. 深度学习框架集成平台C++ Guide指南

    深度学习框架集成平台C++ Guide指南 这个指南详细地介绍了神经网络C++的API,并介绍了许多不同的方法来处理模型. 提示 所有框架运行时接口都是相同的,因此本指南适用于所有受支持框架(包括Te ...

  8. ng : 无法加载文件 C:\Users\szz\AppData\Roaming\npm\ng.ps1,因为在此系统上禁止运行脚本的解决方案

    当安装好Angular CLI后想要查看该版本时在终端键入: ng version 后出现下图的错误提示 解决方案: 在win10 系统中有一个搜索框 输入 Windos PowerShell (一定 ...

  9. mybatis学习——properties属性实现引用配置文件

    Mybatis核心配置文件中有很多的配置项,配置文档的顶层结构如下: *注意:配置项的顺序不能颠倒,如果颠倒了它们的顺序,在MyBatis的自启动阶段会发生异常,导致程序无法运行. propertie ...

  10. pandas的数据结构介绍(一)—— Series

    pandas两个主要数据结构之一--Series 类似于一维数组,由一组数据和与其相关的一组索引组成 obj = Series([4, 7, -5, 3], index=['d', 'b', 'a', ...