2007-02-28 04:45:05

by Xiaoning Ding

[permalink] [raw]
Subject: a bug in AS scheduler?

Hi,

I am reading the source code AS scheduler in 2.6.18(as-ioscheduler.c).
In function as_close_req, variable delay is in millisecond, while
ad->antic_expire is in jiffies. Doesn't the comparison of delay and
ad->antic_expire make any problem?
The related source code is quoted blow:

if (ad->antic_status == ANTIC_OFF || !ad->ioc_finished)
delay = 0;
else
delay = ((jiffies - ad->antic_start) * 1000) / HZ;

if (delay == 0)
delta = 8192;
else if (delay <= 20 && delay <= ad->antic_expire)
delta = 8192 << delay;
else
return 1;


Xiaoning


2007-02-28 12:11:11

by Jens Axboe

[permalink] [raw]
Subject: Re: a bug in AS scheduler?

On Tue, Feb 27 2007, Xiaoning Ding wrote:
> Hi,
>
> I am reading the source code AS scheduler in 2.6.18(as-ioscheduler.c).
> In function as_close_req, variable delay is in millisecond, while
> ad->antic_expire is in jiffies. Doesn't the comparison of delay and
> ad->antic_expire make any problem?
> The related source code is quoted blow:
>
> if (ad->antic_status == ANTIC_OFF || !ad->ioc_finished)
> delay = 0;
> else
> delay = ((jiffies - ad->antic_start) * 1000) / HZ;

antic_start is in jiffies, the difference is here multiplied by 1000 and
divided by HZ to turn it into msecs. so delay is in msecs.

--
Jens Axboe

2007-02-28 13:25:11

by Benoit Boissinot

[permalink] [raw]
Subject: Re: a bug in AS scheduler?

On 2/28/07, Jens Axboe <[email protected]> wrote:
> On Tue, Feb 27 2007, Xiaoning Ding wrote:
> > Hi,
> >
> > I am reading the source code AS scheduler in 2.6.18(as-ioscheduler.c).
> > In function as_close_req, variable delay is in millisecond, while
> > ad->antic_expire is in jiffies. Doesn't the comparison of delay and
> > ad->antic_expire make any problem?
> > The related source code is quoted blow:
> >
> > if (ad->antic_status == ANTIC_OFF || !ad->ioc_finished)
> > delay = 0;
> > else
> > delay = ((jiffies - ad->antic_start) * 1000) / HZ;
>
> antic_start is in jiffies, the difference is here multiplied by 1000 and
> divided by HZ to turn it into msecs. so delay is in msecs.
>
I am pretty sure Xiaoning was talking about antic_expire, particularly
this comparison:

else if (delay <= 20 && delay <= ad->antic_expire)

regards,

Benoit

2007-02-28 13:35:30

by Jens Axboe

[permalink] [raw]
Subject: Re: a bug in AS scheduler?

On Wed, Feb 28 2007, Benoit Boissinot wrote:
> On 2/28/07, Jens Axboe <[email protected]> wrote:
> >On Tue, Feb 27 2007, Xiaoning Ding wrote:
> >> Hi,
> >>
> >> I am reading the source code AS scheduler in 2.6.18(as-ioscheduler.c).
> >> In function as_close_req, variable delay is in millisecond, while
> >> ad->antic_expire is in jiffies. Doesn't the comparison of delay and
> >> ad->antic_expire make any problem?
> >> The related source code is quoted blow:
> >>
> >> if (ad->antic_status == ANTIC_OFF || !ad->ioc_finished)
> >> delay = 0;
> >> else
> >> delay = ((jiffies - ad->antic_start) * 1000) / HZ;
> >
> >antic_start is in jiffies, the difference is here multiplied by 1000 and
> >divided by HZ to turn it into msecs. so delay is in msecs.
> >
> I am pretty sure Xiaoning was talking about antic_expire, particularly
> this comparison:
>
> else if (delay <= 20 && delay <= ad->antic_expire)

Ah, I misread the name. That does look like a bug, antic_expire is in
jiffies.

--
Jens Axboe

2007-02-28 15:35:09

by Xiaoning Ding

[permalink] [raw]
Subject: Re: a bug in AS scheduler?

Jens Axboe wrote:
> On Wed, Feb 28 2007, Benoit Boissinot wrote:
>> On 2/28/07, Jens Axboe <[email protected]> wrote:
>>> On Tue, Feb 27 2007, Xiaoning Ding wrote:
>>>> Hi,
>>>>
>>>> I am reading the source code AS scheduler in 2.6.18(as-ioscheduler.c).
>>>> In function as_close_req, variable delay is in millisecond, while
>>>> ad->antic_expire is in jiffies. Doesn't the comparison of delay and
>>>> ad->antic_expire make any problem?
>>>> The related source code is quoted blow:
>>>>
>>>> if (ad->antic_status == ANTIC_OFF || !ad->ioc_finished)
>>>> delay = 0;
>>>> else
>>>> delay = ((jiffies - ad->antic_start) * 1000) / HZ;
>>> antic_start is in jiffies, the difference is here multiplied by 1000 and
>>> divided by HZ to turn it into msecs. so delay is in msecs.
>>>
>> I am pretty sure Xiaoning was talking about antic_expire, particularly
>> this comparison:
>>
>> else if (delay <= 20 && delay <= ad->antic_expire)
>
> Ah, I misread the name. That does look like a bug, antic_expire is in
> jiffies.

You got it.

Xiaoning