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 ...
随机推荐
- 链路追踪_SkyWalking的部署及使用
关于链路追踪,目前比较主流是Cat,Zipkin,SkyWalking等这些工具.这篇文章主要介绍关于SkyWalking工具的. 为什么用SkyWalking,因为它基本没有代码侵入,只这一点就足够 ...
- Jenkins 基础篇 - 任务创建
前面了解了 Jenkins 上各种任务的区别后,我们就来实践应用下,先创建一个[文件夹]类型的任务,将我们目前的一些基础的演示任务[移动]到文件夹里面去,这样可以先做个简单的分类. 新建一个[文件夹] ...
- 韩小韩 API接口
官方网址:https://api.vvhan.com/ 天气API接口: https://api.vvhan.com/api/weather Bing每日图片API接口: https://api.vv ...
- [论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion
[论文阅读笔记] Unsupervised Attributed Network Embedding via Cross Fusion 本文结构 解决问题 主要贡献 算法原理 实验结果 参考文献 (1 ...
- node.js学习(5)读写文件(同步异步)
1 导入文件系统库 # 同步的 读文件 写文件 # 异步 需要用异步处理耗时
- PaddlePaddle推理部署
PaddlePaddle推理部署 飞桨推理产品简介 作为飞桨生态重要的一部分,飞桨提供了多个推理产品,完整承接深度学习模型应用的最后一公里. 整体上分,推理产品主要包括如下子产品 各产品在推理生态中的 ...
- Tensor基本理论
Tensor基本理论 深度学习框架使用Tensor来表示数据,在神经网络中传递的数据均为Tensor. Tensor可以将其理解为多维数组,其可以具有任意多的维度,不同Tensor可以有不同的数据类型 ...
- 相机自动对焦AF原理
相机自动对焦AF原理 AF性能是判断相机好坏的重要指标,主要从准确度和速度两个方面来进行考察,本文将介绍自动对焦的几种方式. 一.凸透镜成像原理 二.三种对焦方法 有公式在手,只要给相机安个测距仪就好 ...
- Python_Selenium 之以login_page为例实现对basepage封装好的方法调用和对common中公共方法的调用
目的:简化代码,提供框架该有的东西每一个函数 -提供了一个功能 - 公共的功能有了basepage,在PageObjects当中直接调用元素操作. 以下以login_page 为例,实现从配置文件中读 ...
- 看懂redis配置文件
看懂redis 配置文件: https://blog.csdn.net/liqingtx/article/details/60330555 redis 数据库缓存双写一致性解决方案: https:// ...