flashdisk real-time behavior
Till Straumann
strauman at slac.stanford.edu
Tue Jan 29 21:16:42 UTC 2008
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
More information about the users
mailing list