From: Shan Wei <shanwei@cn.fujitsu.com>
To: Jens Axboe <jens.axboe@oracle.com>
Cc: Mike Galbraith <efault@gmx.de>, linux-kernel@vger.kernel.org
Subject: Re: CFQ is worse than other IO schedulers in some cases
Date: Mon, 09 Mar 2009 20:31:37 +0800 [thread overview]
Message-ID: <49B50C29.1000806@cn.fujitsu.com> (raw)
In-Reply-To: <20090309121443.GP11787@kernel.dk>
Jens Axboe said:
> On Mon, Mar 09 2009, Shan Wei wrote:
>> Jens Axboe said:
>>> On Mon, Mar 09 2009, Shan Wei wrote:
>>>> Mike Galbraith said:
>>>>> On Wed, 2009-02-18 at 14:00 +0800, Shan Wei wrote:
>>>>>
>>>>>> In sysbench(version:sysbench-0.4.10), I confirmed followings.
>>>>>> - CFQ's performance is worse than other IO schedulers when only multiple
>>>>>> threads test.
>>>>>> (There is no difference under single thread test.)
>>>>>> - It is worse than other IO scheduler when
>>>>>> I used read mode. (No regression in write mode).
>>>>>> - There is no difference among other IO schedulers. (e.g noop deadline)
>>>>>>
>>>>>>
>>>>>> The Test Result(sysbench):
>>>>>> UNIT:Mb/sec
>>>>>> __________________________________________________
>>>>>> | IO | thread number |
>>>>>> | scheduler |-----------------------------------|
>>>>>> | | 1 | 3 | 5 | 7 | 9 |
>>>>>> +------------|------|-------|------|------|------|
>>>>>> |cfq | 77.8 | 32.4 | 43.3 | 55.8 | 58.5 |
>>>>>> |noop | 78.2 | 79.0 | 78.2 | 77.2 | 77.0 |
>>>>>> |anticipatory| 78.2 | 78.6 | 78.4 | 77.8 | 78.1 |
>>>>>> |deadline | 76.9 | 78.4 | 77.0 | 78.4 | 77.9 |
>>>>>> +------------------------------------------------+
>>>>> ???
>>>>> My Q6600 box agrees that cfq produces less throughput doing this test,
>>>>> but throughput here is ~flat. Disk is external SATA ST3500820AS.
>>>>> _________________________________________________
>>>>> | IO | thread number |
>>>>> | scheduler |----------------------------------|
>>>>> | | 1 | 3 | 5 | 7 | 9 |
>>>>> +------------|------|------|------|------|------|
>>>>> |cfq | 84.4 | 89.1 | 91.3 | 88.8 | 88.8 |
>>>>> |noop |102.9 | 99.3 | 99.4 | 99.7 | 98.7 |
>>>>> |anticipatory|100.5 |100.1 | 99.8 | 99.7 | 99.6 |
>>>>> |deadline | 97.9 | 98.7 | 99.5 | 99.5 | 99.3 |
>>>>> +-----------------------------------------------+
>>>>>
>>>> I have tested sysbench tool on the SATA disk under 2.6.29-rc6,
>>>> and don't set RAID.
>>>>
>>>> [root@DaVid software]# lspci -nn
>>>> ...snip...
>>>> 00:02.5 IDE interface [0101]: Silicon Integrated Systems [SiS] 5513 [IDE] [1039:5513] (rev 01)
>>>> 00:05.0 IDE interface [0101]: Silicon Integrated Systems [SiS] RAID bus controller 180 SATA/PATA [SiS] [1039:0180] (rev 01)
>>>>
>>>> The attached script(sysbench-threads.sh) execute sysbench 4 times for each I/O scheduler.
>>>> And the average result is below:
>>>> ________________________________________
>>>> | IO | thread number |
>>>> | scheduler |--------------------------|
>>>> | | 1 | 3 | 5 |
>>>> +------------|--------|--------|--------|
>>>> |cfq | 60.324 | 33.982 | 37.309 |
>>>> |noop | 57.391 | 60.406 | 57.355 |
>>>> |anticipatory| 58.962 | 59.342 | 56.999 |
>>>> |deadline | 57.791 | 60.097 | 57.700 |
>>>> +---------------------------------------+
>>>>
>>>> I am wondering about the result vs Mike's.
>>>> why is the regression under multi-thread not present on Mike's box?
>>> I don't know that much about the IO workload that sysbench generates, so
>>> it's hard to say. Since you both use SATA, I'm assuming you have write
>>> caching enabled on that drive? What file system and mount options are
>>> you using?
>>>
>> How to see whether the write caching enabled ?
>
> If it's a sata drive, then it'll have write caching enabled (unless it's
> some custom firmware for storage units). You can check with the
> 'cache_type' sysfs file in the scsi_disk directory for that device.
>
Thanks for your explanation.
>> Mount the device with default options just like ???mount /dev/sda3 /mnt???.
>> The file system of the device is ext3.
>
> OK
>
>>>> Jens, multi threads interleave the same file, and there may be
>>>> some requests that can merge but not merged on different thread queue,
>>>> So the CFQ performs poorly, right?
>>> You can test that theory by editing
>>> block/cfq-iosched.c:cfq_allow_merge(), changing it to return 1 always.
>>>
>> I mean that: five threads read the file like below.
>> Are there some requests that can merge but not merged between threads?
>>
>> CFQ manages an request queue for each process.
>> Is it the same for thread?
>
> I understood your description, my suggested edit would make sure that
> you always do merging. CFQ manages a cfq_queue per process OR thread,
> the request queue is the same.
>
> Or you can just take iostat samples before and after an io scheduler
> test to see how may ios you issued and how many merges you got etc.
>
Thanks again.
I'll try it.
>
>>> t_0 t_1 t_2 t_3 t_4 t_0 t_1
>>> ^ ^ ^ ^ ^ ^ ^
>>> ---|-----|-----|-----|-----|-----|-----|--------
>>> file | 16k | 16k | 16k | 16k | 16k | 16k | 16k | ...
>>> ------------------------------------------------
>>> (num-threads=5)
>>>
>>> (t_0 stand for the first thread)
>>> (the executed threads are decide by the thread scheduler)
>>> I'll try and rerun this test here on various bits of storage and see
>>> what it turns up!
>>>
next prev parent reply other threads:[~2009-03-09 12:38 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-02-18 6:00 CFQ is worse than other IO schedulers in some cases Shan Wei
2009-02-18 8:05 ` Mike Galbraith
2009-02-18 10:15 ` Shan Wei
2009-02-18 11:35 ` Mike Galbraith
2009-03-09 5:24 ` Shan Wei
2009-03-09 7:43 ` Jens Axboe
2009-03-09 12:02 ` Shan Wei
2009-03-09 12:14 ` Jens Axboe
2009-03-09 12:31 ` Shan Wei [this message]
2009-02-18 11:37 ` Jens Axboe
2009-02-19 9:28 ` Shan Wei
2009-02-19 15:26 ` Jeff Moyer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49B50C29.1000806@cn.fujitsu.com \
--to=shanwei@cn.fujitsu.com \
--cc=efault@gmx.de \
--cc=jens.axboe@oracle.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox