[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

flashdisk real-time behavior



With the new flashdisk support there is an opportunity
for me to reiterate my rant at libblock/bdbuf.

I remind you that bdbuf disables task preemption to
protect internal data structures. Most notably,
the ioctl(BLKIO_REQUEST) is executed non-preemptably.

It seems to me (I have briefly looked at the code but didn't do
an extensive analysis or run-time tests) that the flash write and erase 
operations
are essentially busy-waiting. This would mean that a task
doing I/O to a flash disk may prevent higher-priority tasks
from being scheduled for intolerably long periods.
E.g., with a block size of 512b and a programming time of ~5us/byte
task-preemption is disabled for ~2.5ms.
(I don't even want to think about foreground-erasing...)

At the time (see this thread: 
http://www.rtems.org/ml/rtems-users/2002/october/msg00054.html)
my concerns were answered by asserting that ioctl(BLKIO_REQUEST)
is a very short operation. This may apply to the ATA driver but not 
necessarily
to the flash disk driver. Also, it is not obvious to the disk driver 
implementor
that the BLKIO_REQUEST ioctl is executed with preemption disabled.

Could someone familiar with the flashdisk comment, please?

Anyways, IMHO libblock/bdbuf should be converted to using mutex protection
(I have started some work in that direction).

-- Till