<4> 其他的一些代码
|-------------------------------------------------------------------------------------<
...
SHOW_FUNCTION(deadline_read_expire_show, dd->fifo_expire[READ], 1);
SHOW_FUNCTION(deadline_write_expire_show, dd->fifo_expire[WRITE], 1);
SHOW_FUNCTION(deadline_writes_starved_show, dd->writes_starved, 0);
SHOW_FUNCTION(deadline_front_merges_show, dd->front_merges, 0);
SHOW_FUNCTION(deadline_fifo_batch_show, dd->fifo_batch, 0);
...
STORE_FUNCTION(deadline_read_expire_store, &dd->fifo_expire[READ], 0, INT_MAX, 1);
STORE_FUNCTION(deadline_write_expire_store, &dd->fifo_expire[WRITE], 0, INT_MAX, 1);
STORE_FUNCTION(deadline_writes_starved_store, &dd->writes_starved, INT_MIN, INT_MAX, 0);
STORE_FUNCTION(deadline_front_merges_store, &dd->front_merges, 0, 1, 0);
STORE_FUNCTION(deadline_fifo_batch_store, &dd->fifo_batch, 0, INT_MAX, 0);
|------------------------------------------------------------------------------------->
这里的代码将一些变量放到sysfs中去,让用户可以修改。
你可以去/sys/block/sda/queue/iosched/看看都有什么
ls /sys/block/sda/queue/iosched/
fifo_batch front_merges read_expire write_expire writes_starved
fifo_batch
上面代码中提到fifo_batch,默认值是16,所以如果需要更好的实时性,可以echo一个更小的值给它。
front_merges
上面代码中提到的front_merges,如果你不喜欢做前端合并,可以echo 0 > front_merges将它的值改为0(上面的if语句就会为假)
默认为1,也即是开启状态。开启后能减少请求,但会增加对红黑树的操作。
read_expire
读请求的响应截止时间,默认值500ms,这个时间到了,必须要对读请求进行响应。对应于fifo_expire[READ]
write_expire
写请求的响应截止时间,默认值5000ms,对应于fifo_expire[WRITE]。即便这个时间到了,也还需要写的饥饿程度超过了饥饿线。
writes_starved
写的饥饿线,默认值是2。也就是说进行了两批读操作后才考虑写。