<div dir="ltr">Hi Gabi,<br><br>First of all thanks for you&#39;re help.<br><br>We are currently using kernel 2.6.24, and couldn&#39;t find any call to the function &quot;<span><font color="#0000ff" face="Arial" size="2">block_wait_queue_running(q)&quot; </font></span>there. It seems to handle things a bit differently.<br>
<br>Moreover I looked at the code of kernel 2.6.11 and from what I can understand, it seems to me like the &quot;<span><font color="#0000ff" face="Arial" size="2">block_wait_queue_running(q)&quot; </font></span>function only waits on the IO queue for the IO to be ready, and not for the IO request (reading the page from the disk) to be done (it is called before the IO request is made).<br>
<br>Correct me if I&#39;m wrong but isn&#39;t the call to the function &quot;q-&gt;make_request_fn(q,bio)&quot; what makes the actual request to the device, and therefore the place which is responsible for waiting for the result of that request?<br>
<br>P.S.<br>I don&#39;t mind switching to kernel 2.6.11 (or any other for that matter) as long as I can make the changes I need.<br><br>Thanks,<br>Ronen &amp; Doron<br><br><div class="gmail_quote">On Thu, Sep 18, 2008 at 4:49 PM, gabik <span dir="ltr">&lt;<a href="mailto:gabik@cs.technion.ac.il">gabik@cs.technion.ac.il</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



<div>
<div>
<div><span><font color="#0000ff" face="Arial" size="2">Hi 
Doron</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
<div><span><font color="#0000ff" face="Arial" size="2">The 
place where the current process goes to sleep and waits until the page is 
swapped in is indeed in generic_make_request() (called from 
submit_bio())</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2">There 
is a call to&nbsp;block_wait_queue_running(q); which moves this process to wait 
and calls for schedule() [prepare_to_wait_exclusive() and after that 
io_schedule()].</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2">Thus, 
this seems to be a place&nbsp;<span>for</span> a busy 
loop.</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
<div><span><font color="#0000ff" face="Arial" size="2">You 
must be careful though with what you change and make sure not to break some 
other code path, that assumes certain things done in this code 
path.</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2"><span>For example, if you are not going to put this process 
in the wait queue, you must be careful what will happen when the io operation 
will finish and will want to remove this process from the wait queue and wake it 
up.</span></font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
<div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
<div><span><font color="#0000ff" face="Arial" size="2">Gabi</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
<div><span><font color="#0000ff" face="Arial" size="2">P.S. I 
was referring to version 2.6.11</font></span></div>
<div><span><font color="#0000ff" face="Arial" size="2"><a href="http://lxr.linux.no/linux+v2.6.11/drivers/block/ll_rw_blk.c#L2595" target="_blank">http://lxr.linux.no/linux+v2.6.11/drivers/block/ll_rw_blk.c#L2595</a></font></span></div>

<div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div></div><br>
<div dir="ltr" align="left" lang="en-us">
<hr>
<font face="Tahoma" size="2"><b>From:</b> Doron Zuckerman 
[mailto:<a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=doron.zuckerman@gmail.com" target="_blank">doron.zuckerman@gmail.com</a>] <br><b>Sent:</b> Thursday, September 18, 2008 
12:28 PM<br><b>To:</b> <a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=muli@il.ibm.com" target="_blank">muli@il.ibm.com</a>; <a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=gabik@cs.technion.ac.il" target="_blank">gabik@cs.technion.ac.il</a>; 
<a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=haifux@haifux.org" target="_blank">haifux@haifux.org</a><br><b>Subject:</b> Re: [Haifux] SSD and 
linux<br></font><br></div><div><div></div><div class="Wj3C7c">
<div></div>
<div dir="ltr">Hi Gabi and Muli,<br>I&#39;m sorry about the mistake- you understood me 
correctly.<br><br>I&#39;m not sure it will speed up the OS, however I&#39;m doing an 
academic research on the matter as part of a project I&#39;m taking, and I plan to 
check this point.<br>The leading thought was that since the SSD is not a 
mechanical drive, pages can be brought faster in this way, and there is no need 
to context switch, thus, avoiding the overhead included.<br><br>Yes I plan to 
use the polling system (busy-wait) , and I&#39;m looking for the kernel part&nbsp; 
in the pagefault handling mechanism in which the process is suspended in order 
to prevent it.<br><br>So far I found the function &quot;__generic_make_request&quot; in 
file &quot;ll_blk&quot;.<br>This function calls a sub function named &quot;might_sleep&quot;.<br>I 
have deleted the call to this function whenever I&#39;m in a pagefault, however I&#39;m 
not sure if this function casuses the sleep, or is just used for debugging in 
order to check if we entered a suspend state.<br><br>My question is if this is 
the function I should change in order to accept the change I&#39;m willing to get, 
or if the change should be made in q-&gt;make_request_fn<br>which, according to 
my understanding, belongs to the specific driver I&#39;m using.<br><br>Please help 
me find the specific place I&#39;m looking for that would make the desired 
change.<br><br>Thank you very much,<br>Doron.<br><br>
<div class="gmail_quote">On Tue, Sep 16, 2008 at 2:42 PM, gabik <span dir="ltr">&lt;<a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=gabik@cs.technion.ac.il" target="_blank">gabik@cs.technion.ac.il</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
  <div>
  <div><span><font color="#0000ff" face="Arial" size="2">Hello 
  Doron</font></span></div>
  <div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
  <div><span><font color="#0000ff" face="Arial" size="2">Why do you think it will 
  speed up the&nbsp;OS?</font></span></div>
  <div><span><font color="#0000ff" face="Arial" size="2">What do you plan to do until 
  the page is swapped in? Busy loop?</font></span></div>
  <div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
  <div><span><font color="#0000ff" face="Arial" size="2">About your 
  solution:</font></span></div>
  <div><span>handle_mm_fault is called from within page fault handler (<a href="http://lxr.linux.no/linux+v2.6.26.5/+code=do_page_fault" target="_blank">do_page_fault</a>()).</span></div>
  <div><span>So what is the rational behind calling <span>handle_mm_fault not 
  from inside pagefault&nbsp; handler?</span></span></div>
  <div><span><span>Where would you call it from instead and what do you plan to 
  do when you are in the page fault?</span></span></div>
  <div><span><span><font color="#0000ff" face="Arial" size="2"></font></span></span>&nbsp;</div>
  <div><span><span><font color="#0000ff" face="Arial" size="2">Probably what you meant 
  is, in order not to do context switch due to page fault, is to call 
  <span><font color="#000000" face="Times New Roman" size="3">handle_mm_fault as 
  usual, but not to raise need_resched flag, so as not to trigger a context 
  switch in case of a major page fault.</font></span></font></span></span></div>
  <div><span><span><font color="#0000ff" face="Arial" size="2"></font></span></span>&nbsp;</div>
  <div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
  <div><span><font color="#0000ff" face="Arial" size="2">Gabi</font></span></div>
  <div><span><font color="#0000ff" face="Arial" size="2"></font></span>&nbsp;</div>
  <div><span></span>&nbsp;</div><br>
  <div dir="ltr" align="left" lang="en-us">
  <hr>
  <font face="Tahoma" size="2"><b>From:</b> <a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=haifux-bounces@haifux.org" target="_blank">haifux-bounces@haifux.org</a> [mailto:<a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=haifux-bounces@haifux.org" target="_blank">haifux-bounces@haifux.org</a>] <b>On Behalf Of </b>Doron 
  Zuckerman<br><b>Sent:</b> Tuesday, September 16, 2008 12:31 PM<br><b>To:</b> 
  <a href="https://mail.google.com/mail?view=cm&amp;tf=0&amp;to=haifux@haifux.org" target="_blank">haifux@haifux.org</a><br><b>Cc:</b> Ronen 
  Gruengras<br><b>Subject:</b> [Haifux] SSD and linux<br></font><br></div>
  <div>
  <div></div>
  <div>
  <div></div>
  <div dir="ltr">Hi all,<br><br>I have a question regarding the linux kernel (for 
  those of you who are familiar with it).<br><br>I&#39;m looking for a way to add a 
  change to the linux kernel in order to check if I can make it more compatible 
  with my Asus EEE-PC.<br>I would like to change the kernel in such way that it 
  will not do a context switch every time there is a page fault <br>and will 
  wait for the required page to be brought from the SSD (Solid State Drive), 
  then continue as usual.<br>In Such way, I plan to check if I can fasten the 
  speed of the Operating System (Ubuntu for EEE).<br>I thought of adding a TIF 
  flag in the process descriptor (thread_info_32.h) that will tell me if I&#39;m 
  currently in a pagefault and <br>then change the fault_32.c in such way that 
  it will do the &quot;handle_mm_fault(mm,vma, address, write_;&quot; only if there is no 
  <br>pagefault at the moment.<br>Can you suggest any other solution possible or 
  tell me what you think about this solution.<br><br>I would really appreciate 
  any help with 
this,<br>Doron.<br><br><br></div></div></div></div></blockquote></div><br></div></div></div></div>
</blockquote></div><br></div>