|
Description
|
The async entry points to zvol (aread/awrite) simply use aphysio() to re-vector
through zvol_strategy(). The problem here is that zvol_strategy() issues the dmu_read(),
which is synchronous, then calls biodone(). As a result, an application calling
aio_read() or aio_write() will block in the system call waiting for the I/O to complete.
Not very asynchronous.
By simply removing the aread/awrite entry points, libaio will recognize the fact that
zvol doesn't support the asynchronous interfaces and dispatch worker threads to do
normal read/write systems calls. This actually is asynchronous (at least to the
application) and is a huge performance win for the iSCSI target.
|