Subject: Re: IDE standby timeout
To: Dave Sainty <dave@dtsp.co.nz>
From: Ken Hornstein <kenh@cmf.nrl.navy.mil>
List: current-users
Date: 01/20/1999 11:38:16
(Okay, I'm behind).
>It's very cool being able to set IDE idle and standby time via the new
>atactl command (Thanks Ken).
You're welcome :-)
>But it's a pain that whenever you set the timeout on the drive, it
>also immediately takes the action, so setting the standby timeout will
>also immediately put the drive in standby mode.
As amazingly stupid as it sounds, yes, that's exactly how it works,
which just reinforces in my mind how stupid ATA/IDE is in general.
For example, you have one byte to set a timeout values. The timeout
value table from the ATA draft shows this:
0x00 Timeout disabled
0x01-0xf0 (value * 5) secounds
0x0f1-0xfb ((value - 240) * 30) minutes
0xfc 21 minutes (huh?)
0xfd Period between 8 and 12 hours (What??)
0xfe Reserved
0xff 21 minutes 15 seconds (??What??)
The last 3 entries are what boggle my mind. I simply cannot imagine
how they made it into a specification.
>Looking at a copy of the ATA-2 draft, this is exactly how it works,
>and you cannot set the timeout without the action. I'm suspicious
>that this is a sneaky way to force the OS to do the work for any more
>complex scheme.
I personally think it's simply the stupidity of the ATA crowd in general,
but that's just me :-)
>That said, it may be beneficial for the drivers to eb aware of when
>the drive is in standby mode anyway, so it can perhaps spin it back up
>without generating an error:
>
>pciide0:0:0: Bus-Master DMA error: missing interrupt, status=0x21
>wd0a: DMA error reading fsbn 4127984 of 4127984-4127999 (wd0 bn 4128047; cn 4095 tn
> 4 sn 35), retrying
>wd0: soft error (corrected)
Well, we could simply convince Manuel to change the driver to "ignore" the
first missing interrupt error if it gets corrected the second time :-)
>What I would like to be able to do is change the timeout dynamically
>without the action taking effect immediately. I would like the drive
>driver to track the idle time of the drive, and then if it reaches the
>specified timeout, issue the stadby command itself, rather than
>relying on the drive to do the job.
This is a good idea, and I thought about it myself.
If we did this, it would be applicable to SCSI drives as well, which
would be great. And I _believe_ the that current disk statistics
is good enough to do a generic timeout mechanism (you could do it
in disk_busy() and disk_unbusy()). So I think it's certainly possible
and maybe even desirable. The downside is, of course, there's a lot of
work to do, because this involves changing the generic interface layer
(and I'm not sure yet what's a good way to communicate "sleeps" from
upper layers to lower ... and what if there are different kind of
sleep events? ATA has several.)
In my defense, I think that atactl is still useful even if we had
this feature, as it turns out there are lot of things you can control
on ATA/IDE devices, so I don't consider it wasted work.
--Ken