diff -u:内核开发的新项目
译至: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:内核开发的新项目的更多相关文章
- Entity Framwork(EF) 7——在现在数据库的甚而上开发MVC 新项目
一.开发背景: 由于老系统已经无法满足实际业务需求,需在现有数据库的甚而上开发新的项目. 二.困难点: 而EF默认情况下是要删除现有数据库表格后重新创建,这是不允许的.当你创建数据库对象时系统会提示“ ...
- git实战-多分支开发-2022新项目
现在开发中大多数公司中都在使用Git这个代码版本管理工具,几乎可以说是已经成为标配,刚入职不久的这家新公司也不例外. 去公司没多久,开始搭建项目,然后创建开发分支,有多少个后端人员就创建多少个开发分支 ...
- swift开发新项目总结
新项目用swift3.0开发,现在基本一个月,来总结一下遇到的问题及解决方案 1,在确定新项目用swift后,第一个考虑的问题是用纯swift呢?还是用swift跟OC混编 考虑到新项目 ...
- 用Kotlin开发Android应用(II):创建新项目
这是关于Kotlin的第二篇.各位高手发现问题,请继续“拍砖”. 原文标题:Kotlin for Android(II): Create a new project 原文链接:http://anton ...
- Android Studio开发第二篇创建新项目
创建新项目很简单,File-New-New Project,这个没什么好说的跟Eclipse都差不都. 第二步SDK选择,有手机平板还有Wear,TV,汽车Auto,谷歌眼镜等几个种平台,这里就先选择 ...
- Android新项目GBSS:第1篇 搭建开发环境
最近接手一个Android新项目,之前也没做过这方面的开发,算是边学边干,这两天看了一下Android开发的书,大致入门了一点,今天把所需要的软件都下了下来,准备开工,先列一下开发环境: 所有的软件都 ...
- 基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)
系列文章 基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客? 基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目 基于.NetC ...
- 项目开发中Maven的单向依赖-2022新项目
一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...
- 如何参与Linux内核开发(转)
本文来源于linux内核代码的Document文件夹下的Hoto文件.Chinese translated version of Documentation/HOWTO If you have any ...
随机推荐
- SpringBoot + WebSocket 实现答题对战匹配机制
概要设计 类似竞技问答游戏:用户随机匹配一名对手,双方同时开始答题,直到双方都完成答题,对局结束.基本的逻辑就是这样,如果有其他需求,可以在其基础上进行扩展 明确了这一点,下面介绍开发思路.为每个用户 ...
- unity lua require dofile loadfile 区别
oadfile,加载文件,编译文件,并且返回一个函数,不运行 dofile其实就是包装了Loadfile,根据loadfile的返回函数运行一遍 require加载文件的时候,不用带目录,有lua自己 ...
- Django中数据库操作相关的错误
问题:字段修改属性发生错误 1> >python manage.py makemigrations You are trying to add a non-nullable field ' ...
- Spring-Cloud之Feign原理剖析
Feign 主要是帮助我们方便进行rest api服务间的调用,其大体实现思路就我们通过标记注解在一个接口类上(注解上将包含要调用的接口信息),之后在调用时根据注解信息组装好请求信息,接下来基于rib ...
- 六、.net core (.NET 6)程序部署到Docker上
使用Docker部署应用程序 首先确保已经安装Docker 桌面软件,如下图: 然后,把需要部署到Docker上面的项目,咱们先添加Docker的支持,启动项目右键 -> 添加 -> Do ...
- CAP 5.1 版本发布通告 - 你期待的 Redis 来了
前言 今天,我们很高兴宣布 CAP 发布 5.1 版本正式版,在这个版本里我们同样引入了更多令人激动的新特性和改进,同时也得到越来越多人的喜爱. 得益于社区的反馈和贡献者的支持,在过去的两个月里,我们 ...
- THINKPHP_(5)_THINKPHP6接收ajax下拉菜单提交的数据,存在的bug
反思: 国产总是不尽人意,但是要支持国产. ThinkPHP的6接收ajax的post数据,存在一个bug.即ajax传递的json数据,在thinkphp后端解析出来后,并非直接的json格式. 描 ...
- C# 强行锁定 第三方 外部 应用程序窗体窗口的分辨率尺寸大小 禁止鼠标拖拽改变窗口大小
我们也许会有一些奇怪的需求,比如说禁止一个外部程序的窗口大小更改. 如果我们没法修改外部程序的代码,那要怎么做呢? 当然,我们可以通过DLL注入目标程序的方式去Hook或registry一个事件来检测 ...
- 【NX二次开发】拉伸面、拉伸封闭曲线成片体UF_MODL_create_extrusion
用那几个拉伸,不能将封闭的曲线拉伸成片体,用UF_MODL_create_extrusion函数是可以的,下面是例子. 帮助上说拉伸片体不能有拔模角度,应该是错误的,下面是一个封闭曲线带拔模角度拉伸片 ...
- TOP-5错误率
TOP-5错误率是指每幅图像同时用5个类别标签进行预测:如果其中任何一次预测正确,就认为预测正确,如果5次预测的结果都错了,才认为预测错误,这时的分类错误率就是TOP-5错误率.