系统是Ubuntu 10 LTS 64位(2.6.35.31),我在xen 4.0上运行,没有服务处于活动状态,cron停止,调度程序是cfq,用于挂载磁盘/ usr:
time find /usr -exec stat {} \; > /dev/null 2>&1 find /usr -exec stat {} \; > /dev/null 2>&1 &
给
real 0m35.760s user 0m0.270s sys 0m3.910s
和
time ionice -c3 find /usr -exec stat {} \; > /dev/null 2>&1 ionice -c3 find /usr -exec stat {} \; > /dev/null 2>&1 &
给
real 0m36.110s user 0m0.310s sys 0m4.100s
这正如预期的,现在我同时运行两个:
time find /usr -exec stat {} \; > /dev/null 2>&1 find /usr -exec stat {} \; > /dev/null 2>&1 &time ionice -c3 find /usr -exec stat {} \; > /dev/null 2>&1 ionice -c3 find /usr -exec stat {} \; > /dev/null 2>&1 &
在哪里我认为离子版本应该慢得多,而直接版本应该像单独运行一样快。 但:
直行:
real 1m10.430s user 0m0.320s sys 0m3.940s
ioniced:
real 1m10.230s user 0m0.250s sys 0m4.020s
这意味着ionice根本不起作用。 任何提示?
这几乎肯定不起作用,因为您没有使用CFQ内核调度程序。
查看/sys/block/xvdh/queue/scheduler来查看你正在使用的是哪一个。 在[]括号内的是活动的。
现在大多数系统似乎都是deadline ,因为ionice不起作用。 (据我所知,这是非常糟糕的logging)。
由于两个进程都在询问相同的文件,无论哪个进程都会从文件系统caching中获取。 因为它实际上并不移动主轴,所以它不受ionice影响。