!Pathname Evolution:Design Meeting 2007-05-02#


Who#

bstecher, mkisel, cburgess, shiv, dbailey

Summary#


what we did:#

We resolved a basic issue of the pathname space: the need for a new name associated with bulk introspection.

Todo:#


Details#


We discussed:

1. Can we uniformly apply the notion that a URI modifies how something is read?#

The problem is with /proc?tags=... The final consensus was that in Posix, reading a directory always means retrieving dirents. To read data about processes, we would need to somewhere add a non-directory name into the pathname. That's necessary so that whole path would be for a file rather than a directory, since POSIX doesnt have preconcieved notions of what kind of data is read out of an arbitrary file. That means the necessity of a path like /proc/info?tags=...

It seemed ugly to some of us.

This also means we are not introducing new rules as to what illegal characters are for directory names. That would have been a problem. The URI in a filename will be passed to the filesystem to parse or not parse as it sees fit. So, directory name parsing is unchanged.

2. Is writing a URI string to an open FD an alternative to opening path with a contained URI?#

3. How servers register with kernel bulk introspection.#

We'd like to generalize bulk kernel introspection so that we can easily add tagged structures at a later time. We especially want to allow tagged structures to be defined and populated with code in a kernel module. This means we want the bulk transfer code to be generic, i.e. not coded for specific structs, and that there be a "registration" interface . Proc would register the standard debug_process_t and debug_thread_t, etc structs already in debug.h We'd also register the custom structs that might meed needed by indivudal customers.

(Brian indicates he had some ideas on structure tagging that will likely change the following)

For the registration interface:

4. Knowledge of tag hierarchy in the registration interface.#

We didn't say much about how the registration would know about the hierarchy of tags. However, Colin suggested the following notation to describe what the bulk transfer implementation must know:

 process -> ( process_data_structp1, 
              proccess_data_structp2, 
              thread_iterator, 
              mapping_iterator) 

 thread_iterator -> list of ( thread_data1, thread_data2) 

 mapping_iterator -> list of (mapping_data1, mapping_data2) 
However, when the bulk kernel introspector serves a read request, it must know whether it needs to traverse the mapping_iterator or thread_iterater in addition to returning the process stucts for a particular pid is had decided to process. Which led us to discuss:

5. Does the syntax of the URI string specify the hierarchy of tagged structs being returned? Or is simply listing the names of the tagged structs sufficient? #


Whiteboard Snapshots#


For those who want the original scribble notes.

Future_Kernel_Introspection_20070502/pathanem_wb1.gif

Future_Kernel_Introspection_20070502/pathname_wb2.gif

Future_Kernel_Introspection_20070502/pathname_wb3.gif