Re: when does a process sleep in reading a file from disk?

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

 



On 10/30/05, Hui Cheng <hcheng@xxxxxxxxxxx> wrote:
>
> I went through the floppy code you mentioned, yes, it works as you said.
> But the problem is, I don't think that the ide disk works the similar way.
> In linux 2.4 kernel, the reading process explicitly sleep at
> do_generic_file_read()->wait_on_page(), that is why the coder try
> everything to postpone calling wait_on_page. However, I think things
> change in 2.6. I have a guess that the synchronous read has been improved
> by some asynchronous method. That is, the process (which performs a
> synchronous read) just submit  a synchronous read request and return, even
> though the buffer is not filled with data from disk. It would turn to
> sleep only when it performs real operating on the buffer (if the buffer
> is still not filled in valid data by then). In this way, the
> performance is improved. That is why I did not find any "put to sleeo
> code" in the file system and ide driver code. But this is only my guess.
> Any suggestion? And thanks Fawad for your kindly reply:)
>

I don't think your guess is right ! When we do read from user-space
application, through system call sys_read is called which goes to the
vfs_read and then goes to the file-system read function which calls
the submit_bio to submit request to device and get signal in the form
of end_io when the device completes request. Now as your guess is the
data in buffer isn't present till the operation on the buffer is done
is not seems valid to me. Because I saw sleeping variable, timer etc
in ide-io.c code especially in ide_do_request function which I think
is used for sleeping (I havn't got into the datail of it) as the
comments in ide_do_request function says : (see
http://lxr.linux.no/source/drivers/ide/ide-io.c#L1074)

 /*
                * Take a short snooze, and then wake up this hwgroup again.
                * This gives other hwgroups on the same a chance to
                * play fairly with us, just in case there are big differences
                * in relative throughputs.. don't want to hog the cpu too much.
                  */

And after fullfiling the request ide driver also calls ide_end_request
which at-last call blk_dequeue_request and end_that_request_last ....

By the way, Now I am also giving-up and now wait for some-other
person's response, if there is some-thing missing in my understanding
or I am wrong !


--
Fawad Lateef

--
Kernelnewbies: Help each other learn about the Linux kernel.
Archive:       http://mail.nl.linux.org/kernelnewbies/
FAQ:           http://kernelnewbies.org/faq/



[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux