On Apr 18, 2009, at 5:45 PM, Christina Patrick wrote:

I found the following and though that I could post it in case anybody
else has the same questions:

The translation of pvfs offsets corresponding to striping takes place in:

PINT_process_request
PINT_distribute
src/io/description/dist-simple-stripe.c --> next_mapped_offset
src/io/description/dist-simple-stripe.c --> logical_to_physical_offset
src/io/description/dist-simple-stripe.c --> contiguous_length

There are 4 types of striping in pvfs (I have used only the default -
simple-stripe so far) and the offset translation is done in the
corresponding-stripe.c file as listed above.

**About the prefetching, if anybody has experience in state machines,
please do let me know. I would really apprecite the help**

Christina,

There is a design doc about state machines under the pvfs2 doc directory,
which you might want to take a look at:
  pvfs-2.8.1/doc/design/state-machine.tex

Seung


Thanks and Regards,
Christina.



On Thu, Apr 16, 2009 at 4:29 PM, Christina Patrick
<[email protected]> wrote:
Hi All,

I am doing a project where I need to implement simple prefetching in
pvfs. While I was going through the pvfs code, I couldn't understand
the following and hence have to ask the below questions:

1. What is the file descriptor assigned by pvfs? Does this file
descriptor correspond to actual descriptor (of the underlying
filesystem) ... for eg. that which is seen by /proc filesystem?

2. When I traced the I/O calls in pvfs v2.8.0, I found the following
function chain on the pvfs2 server side:
main
 -> PINT_state_machine_continue
   -> PINT_state_machine_next
     -> PINT_state_machine_invoke
       -> io_start_flow
         -> job_flow
           -> PINT_flow_post
             -> fp_multiqueue_post
               -> bmi_send_callback_fn
                 -> trove_bstream_read_list
                   -> alt_aio_bstream_read_list
                     -> dbpf_bstream_rw_list
                       -> issue_or_delay_io_operation
                         -> alt_lio_listio
                           -> pthread_create => alt_lio_thread
alt_lio_thread (new thread)
 -> pread
Since, pvfs is a parallel file system, are all the file descriptors
assigned on all the servers the same? I saw one instance where the
servers used descriptors 12, 12 & 17 and another instance where all
the file servers used descriptor 12?

3. The most important question is how come all the file servers (the
function alt_lio_thread) are passed the same offsets and also the
total size of the data to be read? Shouldn't each file server be
passed a list of offsets corresponding to what is stored on its own
local disk (bcoz of the striping)? Where does this translation
actually take place and how does the server read in the appropriate
data in other words how is the striped data actually read?

4. In order to implement prefetching on the server side, how do I have
to go about it? Can I do some shortcut method or do I need to
introduce some new state machine etc? I could really do with some help
here.

I really appreciate your help,
Thanks and Regards,
Christina.


_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

_______________________________________________
Pvfs2-developers mailing list
[email protected]
http://www.beowulf-underground.org/mailman/listinfo/pvfs2-developers

Reply via email to