Ely*_*Ely 2 linux io scheduling
我的 Linux 使用Deadline算法进行 I/O 调度。其中一个参数是 下的front_merges参数/sys/block/sda/queue/iosched/front_merges。默认情况下它设置为 1,这意味着可能会发生前合并。如果不期望发生前端合并,可以将其设置为 0 以获得性能提升。
该内核文档最好说的:
有时会发生一个请求进入与已经在队列中的请求相邻的 io 调度程序。它要么适合该请求的后面,要么适合前面。这被称为后合并候选者或前合并候选者。由于文件通常的布局方式,后向合并比前向合并更常见。对于某些工作负载,您甚至可能知道花任何时间尝试前置合并请求都是在浪费时间。将 front_merges 设置为 0 会禁用此功能。由于缓存的 last_merge 提示,前合并可能仍会发生,但由于其成本基本上为 0,因此我们将其保留。我们只是在调用 io 调度程序合并函数时禁用 rbtree 前扇区查找。
前端合并不常见的原因是写入者通常不会以相反的顺序将块写入磁盘。
考虑一个进程,它对包含两个块的新文件进行简单的顺序写入。它先写block 0,然后写block 1。当block 1 进入队列时,它在block 0 的后面,所以内核做了一个back merge,然后同时将两个block 发送到物理磁盘。这是典型案例。
要获得前置合并,该进程必须首先写入块 1,然后向后查找并写入块 0。这不是典型情况,尽管对于某些工作负载确实会发生(例如数据库)。
即使在高 I/O 情况下,我也不认为性能的变化会如此显着。您可以在实际工作负载上以两种方式对其进行测试。如果你不做一些磁盘密集型的事情,那么这并不重要。
| 归档时间: |
|
| 查看次数: |
2202 次 |
| 最近记录: |