src

The src directory contains the majority of the PVFS2 distribution.

Unlike PVFS1, where the PVFS kernel code was in a separate package from the ``core,'' in PVFS2 both the servers, client API, and kernel-specific code are packaged together.

src/common holds a number of components shared between clients and servers. This includes:

src/apps holds applications associated with PVFS2. The src/apps/admin subdirectory holds a collection of tools for setting up, monitoring, and manipulating files on a PVFS2 file system. pvfs2-genconfig is used to create configuration files. pvfs2-cp may be used to move files on and off PVFS2 file systems. pvfs2-ping and pvfs2-statfs may be used to check on the status of a PVFS2 file system. pvfs2-ls is an ls implementation for PVFS2 file systems that does not require that the file system be mounted.

The src/apps/karma subdirectory contains a gtk-based gui for monitoring a PVFS2 file system in real time. The src/apps/kernel/linux-2.6 subdirectory contains the user space component of the PVFS2 kernel driver implementation, which matches the kernel driver code found in src/kernel/linux-2.6. The src/apps/vis contains experimental code for performance visualization.

src/client holds code for the ``system interface'' library, the lowest level library used on the client side for access. This is in the src/client/sysint subdirectory. The unix-io subdirectory is no longer used. Note that there is other code used on the client side: the ROMIO components (included in MPICH and MPICH2) and the kernel support code (located in src/kernel, discussed subsequently).

Note that the ROMIO support for PVFS2 is included in MPICH1, MPICH2, and ROMIO distributions and is not present anywhere in this tree.

src/server holds code for the pvfs2-server. The request scheduler code is split into its own subdirectory for no particular reason.

src/proto holds code for encoding and decoding our over-the-wire protocol. Currently the ``encoding scheme'' used is the contig scheme, stored in its own subdirectory. This encoding scheme really just puts the bytes into a contiguous region, so it is only good for homogeneous systems or systems with the same byte orders where we have correctly padded all the structures (which we probably haven't).

src/kernel holds implementations of kernel support. Currently there is only one, src/kernel/linux-2.6.

src/io holds enough code that we'll just talk about it in its own subsection.