On Wed, 29 Sep 2004, Michael Puckett wrote:

I have been examining both the aufs and ufs versions of squid with truss
and have seen that the async i/o version has thousands more calls to
lseek than the non async version. On looking at the source of
squidaio_do_read() it does indeed do a lseek() followed by a read()
where the non async read doesn't seem to. This leads to 2 questions:

1. According to the man page entry, threaded implementations should not
use lseek() followed by read() as atomicity between the calls cannot be
guaranteed. It recommends using pread() instead. Is this correct?

Correct. But in Squid there is an guarantee there is only one call at a time per filedescriptor so it is not a problem.


2. Why is the lseek() necessary in the async read method but not the
blocking read method?

Because the async-io lowlevel interface was modelled along the lines of POSIX AIO where the read() operation is read(file, buffer, buffersize, file_offset). This was perhaps not the best design, but reasonable.


Regards
Henrik

Reply via email to