Chinaunix

标题: 为什么服务器内核都是不可抢占版,可抢占版有什么问题 [打印本页]

作者: mordorwww    时间: 2014-01-23 08:42
标题: 为什么服务器内核都是不可抢占版,可抢占版有什么问题
可抢占版响应更好啊
作者: humjb_1983    时间: 2014-01-23 08:55
mordorwww 发表于 2014-01-23 08:42
可抢占版响应更好啊

可抢占即增加了调度时机,结果是响应更快,实时性更好,但由于会导致上下文切换频繁,而影响系统的吞吐量和整体性能。
所以配置内核可抢占通常是针对实时性要求更高的系统,比如嵌入式系统、实时系统,而对于服务器系统,通常追求的是性能和吞吐量,所以没有配置内核可抢占。
作者: mordorwww    时间: 2014-01-23 09:47
humjb_1983 发表于 2014-01-23 08:55
可抢占即增加了调度时机,结果是响应更快,实时性更好,但由于会导致上下文切换频繁,而影响系统的吞吐量 ...


你是说太多的切换比较耗CPU?
单次大约切换耗费多少成本
作者: humjb_1983    时间: 2014-01-23 10:04
mordorwww 发表于 2014-01-23 09:47
你是说太多的切换比较耗CPU?
单次大约切换耗费多少成本

是的,但具体成本没有测过,印象中lmbench之类的工具可以测试上下文切换的延时~~
作者: mordorwww    时间: 2014-01-23 10:14
觉得楼上回答问题挺不错的

刚又提了个问题,猜测像是内核里做CPU负载迁移和CPU热插拔,但是又说不通
作者: humjb_1983    时间: 2014-01-23 10:52
mordorwww 发表于 2014-01-23 10:14
觉得楼上回答问题挺不错的

刚又提了个问题,猜测像是内核里做CPU负载迁移和CPU热插拔,但是又说不通

另一个问题是在什么条件下产生的?
作者: kkddkkdd11    时间: 2014-01-23 14:17
humjb_1983 发表于 2014-01-23 10:52
另一个问题是在什么条件下产生的?


问一下 :)
现在centos 用的 2.6内核 应该都算 可抢占的吧
好像2.5 以后都是 可抢占的
服务器版优化内核时centos 给优化成 非抢占的了?
作者: humjb_1983    时间: 2014-01-23 14:32
kkddkkdd11 发表于 2014-01-23 14:17
问一下 :)
现在centos 用的 2.6内核 应该都算 可抢占的吧
好像2.5 以后都是 可抢占的

确实目前的内核都是支持抢占的,但是这里的抢占的定义有两个层面,要分开来看,你说的可抢占特性应该是指高优先级的进程可以抢占低优先级的进程,这个特性都是支持的,但区别在于抢占的时机不同,对于用户态的抢占,应该都是支持的;而我们这里讨论应该是指“内核态”的抢占,即当一个进程处于内核态运行时,突然来了中断,中断返回有调度的时机点,此时如果不支持“内核态抢占”,那么是不会发生调度和抢占的,而如果支持“内核态抢占”,那么此时会判断抢占计数和其他条件,在满足条件是发生抢占。
这个“内核态抢占”特性是需要打开特殊的内核配置才能支持的,而服务器版本基于我之前说的原因,通常是关闭的。
总的来说,内核都是支持抢占的,主要的区别在于抢占的时机,支持“内核态抢占”的内核会有更多抢占时机。
作者: kkddkkdd11    时间: 2014-01-23 15:02
humjb_1983 发表于 2014-01-23 14:32
确实目前的内核都是支持抢占的,但是这里的抢占的定义有两个层面,要分开来看,你说的可抢占特性应该是指 ...


我说的不是高进程抢占低进程
:)我对调度不熟,
不过,我说的确实是内核态抢占
老的2.4,需要系统调用中主动调度,或者中断后期主动调度,
问一下,这块,有没有啥命令或者参数,能查看2.6内核抢占是否被开启?
想编译抢占内核,抢占的开关在哪里?
以前编译内核一直,没注意这个开关,呵呵
作者: humjb_1983    时间: 2014-01-23 16:19
kkddkkdd11 发表于 2014-01-23 15:02
我说的不是高进程抢占低进程
:)我对调度不熟,
不过,我说的确实是内核态抢占

应该就是CONFIG_PREEMPT这个内核参数,看看你的内核配置文件中配置没有就可以了。
另外,也可以make menuconfig看。
作者: adidiaos丶丶    时间: 2014-01-23 16:39
会降低性能

新建 Microsoft Office Word 文档.rar

8.71 KB, 下载次数: 9


作者: kkddkkdd11    时间: 2014-01-23 17:49
本帖最后由 kkddkkdd11 于 2014-01-23 18:25 编辑
humjb_1983 发表于 2014-01-23 16:19
应该就是CONFIG_PREEMPT这个内核参数,看看你的内核配置文件中配置没有就可以了。
另外,也可以make men ...


确认了一下
服务器版 一般是 CONFIG_PREEMPT_NONE=y
个人版 一般是 CONFIG_PREEMPT_VOLUNTARY=y

呵呵 还好在服务器编译内核,都是cp原内核的.config
要不调度算法搞错了,会损失性能哇

已经编译好的内核,不看.config的话,如何知道,啥抢占方式?
作者: kkddkkdd11    时间: 2014-01-23 17:51
adidiaos丶丶 发表于 2014-01-23 16:39
会降低性能


你这个是 能溢出的文档吗?
作者: humjb_1983    时间: 2014-01-24 08:45
kkddkkdd11 发表于 2014-01-23 17:49
确认了一下
服务器版 一般是 CONFIG_PREEMPT_NONE=y
个人版 一般是 CONFIG_PREEMPT_VOLUNTARY=y

这个好像没看到哪里有,不过通常编好内核的系统中,/boot目录中都会有内核配置文件的,比如config-xxxx.

作者: kkddkkdd11    时间: 2014-01-24 09:30
humjb_1983 发表于 2014-01-24 08:45
这个好像没看到哪里有,不过通常编好内核的系统中,/boot目录中都会有内核配置文件的,比如config-xxxx.
...


恩 有道理, 一般重新编译
都是cp 这个位置重新编译内核:)
作者: 瀚海书香    时间: 2014-01-24 10:01
回复 2# humjb_1983
同意

   
作者: mordorwww    时间: 2014-01-24 13:11
本帖最后由 mordorwww 于 2014-01-24 13:30 编辑

0号内核线程可以抢占吧,那这个抢占切换烧CPU不
作者: humjb_1983    时间: 2014-01-24 15:30
mordorwww 发表于 2014-01-24 13:11
0号内核线程可以抢占吧,那这个抢占切换烧CPU不

没大看明白,0号进程是swapper进程,实际上就是idle进程,应该不存在抢占的概念吧
作者: mordorwww    时间: 2014-01-24 16:01
humjb_1983 发表于 2014-01-24 15:30
没大看明白,0号进程是swapper进程,实际上就是idle进程,应该不存在抢占的概念吧


0号进程是内核线程吧
作者: humjb_1983    时间: 2014-01-24 16:09
mordorwww 发表于 2014-01-24 16:01
0号进程是内核线程吧

0号进程是所有进程的父进程,个人理解就是内核自己的主循环。跟普通的内核线程是不同的。
作者: mordorwww    时间: 2014-01-24 16:29
本帖最后由 mordorwww 于 2014-01-24 16:30 编辑
humjb_1983 发表于 2014-01-24 16:09
0号进程是所有进程的父进程,个人理解就是内核自己的主循环。跟普通的内核线程是不同的。


那就是在调度上要做特殊处理了?
作者: humjb_1983    时间: 2014-01-24 16:31
mordorwww 发表于 2014-01-24 16:29
那就是在调度上要做特殊处理了?

当没有其他进程需要RUNNING时,就是idle。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2