[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <20081128.223330.623571555980968757.ryov@valinux.co.jp>
Date: Fri, 28 Nov 2008 22:33:30 +0900 (JST)
From: Ryo Tsuruta <ryov@...inux.co.jp>
To: vgoyal@...hat.com
Cc: linux-kernel@...r.kernel.org,
containers@...ts.linux-foundation.org,
virtualization@...ts.linux-foundation.org, jens.axboe@...cle.com,
taka@...inux.co.jp, righi.andrea@...il.com, s-uchida@...jp.nec.com,
fernando@....ntt.co.jp, balbir@...ux.vnet.ibm.com,
akpm@...ux-foundation.org, menage@...gle.com, ngupta@...gle.com,
riel@...hat.com, jmoyer@...hat.com, peterz@...radead.org,
fchecconi@...il.com, paolo.valente@...more.it
Subject: Re: [patch 0/4] [RFC] Another proportional weight IO controller
Hi Vivek,
> > Thanks for your explanation.
> > I think that the same thing occurs without the higher level scheduler,
> > because all the tasks issuing I/Os are blocked while the underlying
> > device's request queue is full before those I/Os are sent to the I/O
> > scheduler.
> >
>
> True and this issue was pointed out by Divyesh. I think we shall have to
> fix this by allocating the request descriptors in proportion to their
> share. One possible way is to make use of elv_may_queue() to determine
> if we can allocate furhter request descriptors or not.
At the fist glance, elv_may_queue() seemed to be useful for the purpose
as you mentioned. But I've noticed there are some problems after I
investigated the code more.
1. Every I/O controller must have its own decision algorithm that
which I/O requests should be block or not, whose algorithm will be
similar to that of dm-ioband. It would be a hassle to implement it
in all the I/O controllers.
2. When an I/O is completed, one of the slots in the request queue
become available, then one of the processes being blocked get awakened
in fifo manner. This won't be the best one in most cases and
you have to make this process sleep again and you may want to
wake up another one. It's inefficient.
3. In elv_may_queue(), we can't determine which process issues an I/O.
You have no choice but to make any kind of process sleep even if
it's a kernel thread such as kswapd or pdflush. What do you think
is going to happen after that?
It may be possible to modify the code not to block kernel threads,
but I don't think you can control delayed-write I/Os.
If you want to solve these problems, I think you are going to implement
the algorithm there whose code is very similar to that of dm-ioband.
Thanks,
Ryo Tsuruta
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists