LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1612|回复: 11

对编译内核涉及的服务器环境和桌面环境区别的几个选项的疑问

[复制链接]
发表于 2007-2-19 20:52:19 | 显示全部楼层 |阅读模式
我是桌面用户,在编译内核的时候产生了这样几个疑问:

1.IO Schedulers   IO调度器
一般用户可能会在Deadline和CFQ中作出选择。kernel文档中说CFQ为所有进程分配等量的带宽,适合于桌面多任务及多媒体应用。我在实际使用中觉得Deadline似乎更胜一筹,但却说不清楚好在哪里。请了解的朋友介绍一下。

2.Preemption Model  内核抢占模式
有这样几种选择:
    No Forced Preemption (Server)
        适合服务器环境的禁止内核抢占
    Voluntary Kernel Preemption (Desktop)
        适合普通桌面环境的自愿内核抢占
    Preemptible Kernel (Low-Latency Desktop)
        适合运行实时程序的主动内核抢占

也请了解的朋友介绍一下它们的区别,各有什么优劣势。

3.Timer frequency  内核时钟频率
kernel文档中说桌面推荐"1000 HZ",服务器推荐"100 HZ"或"250 HZ"。但同上面一样,我也觉得服务器的配置在使用中感觉更爽一些。也请朋友们介绍一下。

综上,服务器环境和桌面环境毕竟是宽泛的说法,我不满足于在看了这样简单的说明之后就决定自己的选择。我想知道这两者主要的区别在哪里,这样区分的目的是什么,谢谢。

我相信很多人也会有与我同样的疑问,这个问题如果充分讨论好的话,可以加精的。
发表于 2007-2-19 21:37:38 | 显示全部楼层
我昨天才弄好内核,选了1000,暂时没什么感觉
一边编译kde一边看网页感觉和在ubuntu下chroot编译时差不多阿
回复 支持 反对

使用道具 举报

发表于 2007-2-20 00:29:08 | 显示全部楼层
1. 如果系统经常进行写入操作,deadline不如anticipatory。虽然deadline I/O调度器可以最小化读取延迟,但是它为此付出的代价是降低了全局吞吐量。假设一个系统正在进行频繁的写入操作。每当一个读取请求被提交的时候,I/O调度器就转而去处理它。这个过程包括磁盘寻址到要读取的地方,完成读取操作,然后返回之前写入操作暂停的地方继续写入操作。每处理一个读取操作都重复一遍这个过程。这样读取延迟将获得很好的控制,但是由此代来的频繁寻址操作将会对全局吞吐量带来不良影响。Anticipatory I/O调度器的目的是在保持良好的读取延迟的基础上,提供更佳的全局吞吐量。所以anticipatory是Linux的默认io调度器。我只用过anticipatory和cfq。现在我用的是cfq。

2. preemptive kernel的好处在于当一个进程在执行内核函数的时候(比如正在执行系统调用)也可以被其他进程所替换掉,这样高优先级的进程就可以更快的得到执行,从而使系统的反应速度变快。适用于桌面环境。鼠标移动不连贯或者音频播放断断续续等状况对于桌面环境来说是不可以忍受的。

3. 250hz就够了。这个值决定了计时器中断发生的频率,频率高,时间相关的功能精确度就越高,但是计时器中断处理函数执行的次数就高,overhead也高。

桌面和服务器代表了两个应用方向
前者代表的是反应速度
后者代表的是吞吐量
回复 支持 反对

使用道具 举报

发表于 2007-2-20 01:20:11 | 显示全部楼层
BS 楼主 多处发帖!!!
回复 支持 反对

使用道具 举报

发表于 2007-2-20 12:21:24 | 显示全部楼层
Post by zhllg
1. 如果系统经常进行写入操作,deadline不如anticipatory。虽然deadline I/O调度器可以最小化读取延迟,但是它为此付出的代价是降低了全局吞吐量。假设一个系统正在进行频繁的写入操作。每当一个读取请求被提交的时候,I/O调度器就转而去处理它。这个过程包括磁盘寻址到要读取的地方,完成读取操作,然后返回之前写入操作暂停的地方继续写入操作。每处理一个读取操作都重复一遍这个过程。这样读取延迟将获得很好的控制,但是由此代来的频繁寻址操作将会对全局吞吐量带来不良影响。Anticipatory I/O调度器的目的是在保持良好的读取延迟的基础上,提供更佳的全局吞吐量。所以anticipatory是Linux的默认io调度器。我只用过anticipatory和cfq。现在我用的是cfq。
……


学习了~:2cool
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-20 13:42:22 | 显示全部楼层
Post by 晨想
BS 楼主 多处发帖!!!



不好意思,因为是提问贴,看到的人越多,问题就有可能被解释得越清楚,所以我在内核板块、LFS、gentoo三处这些最经常编译内核的地方都发了。我想我的问题也比较适合这些板块,不要见怪!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-20 13:48:33 | 显示全部楼层
Post by zhllg

桌面和服务器代表了两个应用方向
前者代表的是反应速度
后者代表的是吞吐量


这句话是核心!再按照自己的实际情况在一定试验的基础上决定如何选择,这样就完美了。多谢大家不吝赐教。
回复 支持 反对

使用道具 举报

发表于 2007-2-21 07:00:13 | 显示全部楼层
noop I/O 调度
noop I/O 调度目的是最小化I/O调度的总开销,提供基本的合并,排序功能,主要的用途在基于无磁盘的块设备。比如用内存组成的磁盘,或者自身有自己的I/O调度硬件环境。

CFQ调度
CFQ调度被看成是Stochastic Fair Queuing (SFQ)的扩展实现,在所有的I/O请求中公平的分配I/O带宽,为同等级的进程公平的提供间隔时间。适合于桌面环境。

Anticipatory I/O 调度
Anticipatory I/O 调度是官方默认的调度算法,在大多数环境下是最好的选择。AS设计的目的是为了减少每个进程读取的应答时间,在调度平衡中引入了控制延迟组件,允许线程只要完成自身的I/O读请求,在提交一个新的读请求,加强这方面的改变直接导致了更加小的寻道操作。在缩小寻道时间和减少磁盘利用率之间求得某一程度上平衡。这个算法意在优化小型的,慢速的磁盘子系统。但是使用AS调度会造成很高的I/O延迟时间,不推荐在数据库系统中使用这个算法。

Deadline I/O 调度
Deadline I/O调度使用最后期限的算法为每个I/O请求最小化延迟时间,同步的确保没有I/O请求被饿死,这个算法引入了每个请求最后期限的概念,用来为读请求分配更加高的优先级,节省磁盘寻道时间目标的实现是从排序队列中的移出大批量的请求然后在FIFO队列中使用受管制的请求号码平衡它,应此Deadline I/O 调度算法有效的加强总的平均读取请求的响应时间,推荐在存在大量并行读写操作的数据库系统中使用这个算法。

Performance Tuning for Linux® Servers这本书的测试数据表明单路单磁盘上Deadline+XFS文件系统性能表现的比较好(和其他比较起来).
在8路RAID-5系统中Deadline+XFS(EXT3)明显有效于其他算法。(总体性能)
回复 支持 反对

使用道具 举报

发表于 2007-2-21 08:46:16 | 显示全部楼层
as 调度算法是针对process的,而不是device,这个算法会batch同一process的io操作,如果系统没有用raid和scsi tcq,这样作可以减小seek time,提高io效率,但是对于raid系统/scsi tcq,这样作倒浪费了raid系统/tcq本身的调度能力。
回复 支持 反对

使用道具 举报

发表于 2007-2-27 21:36:53 | 显示全部楼层
我一般只用deadline--感觉很不错的。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表