Hello

The upas/fs program, in charge of provinding an fs layout of various mailboxes 
(mdir, mbox, pop3, imap), was needing for an update from time ago. The first 
major improvement was done by Erik Quanstrom adding the mdir support and 
improving the memory managemt and performance to make upas able to deal with 
huge mailboxes with  mail messages with huge mime attachments.

The main objetive of this project is to allow multiple 9p conversation with 
upas/fs, so multiple actions can be done at the same time.

The tasks done up to now have been:

Week 1 Tasks

* Decide what are we going to implement. 
        - The main objetive is to allow multiple 9p conversations with nupas. 
So our efforts will be focused to this goal.

* Read nupas/fs/* code to see all the pieces
        - Currently nupas starts various proceses using mailbox shared 
structures and locking to manage the data
        - Also nupas can handle only one 9p request at a time due to the 
fs.c:/^io( implementation, and the way it talks with the other fs pieces (mbuf, 
mdata, hbuf, Fcalls, variables in fs.c)

* Decide on the usage of system utilities like  libthread and lib9p
        - A lib9p based nupas approach could have performacne problems, as upas 
had them with its tweaked source to cope with large numbers of fids, as Erik 
pointed out in IW9P, and as part of his mentoring.
        - A libthread+channels implementation is not trivial, and would require 
modify nupas in multiple ways which could end being a mess instead of helping 
to make things easier.

Week 2 Tasks

Very busy week, final exams in the school and a lot of work to do at the 
office, the tasks done here were more reading of source and manuals, 
understanding how fs.c:/^io( works  using global Fcalls structures and buffers.

Also some experimenting with the source, identifying the need to sync the 
multiple io's  which woould be launched, may be using Sape's semaphore 
implementation.

io() fork call will be same rfork(RFFDG|RFPROC|RFNAMEG|RFNOTEG|RFREND)) used to 
fork the original io(), using a set global vars to communicate.

Week 3 Tasks

* Added a new command line parameter (-P) to specify the numer of io() forks to 
do, 2 by default
* Added the type:

typedef struct Iodat Iodat;
struct Iodat {
        char *name[3];
        uchar mbuf[16*1024 + IOHDRSZ];
        uchar mdata[16*1024 + IOHDRSZ];
        char hbuf[32*1024];
        Fcall rhdr;
        Fcall thdr;
};

to glue all the structures needed per io() fork.

* Created initio() which will malloc memory for the per io() structs and will 
fork io()s
* Added the global variable iodat as an array of Iodat. One element for each 
io() fork. This variable is initilized from initio before the forks.
* All fs functions  use a pointer to the correct Iodat element 
fsfunc(Iodat*,Fid*), and now work with the Iodat corresponding to each io fork.
* io() use Iodat to save the request, lauch the appropriate fs function and 
read the respond

Week 4 Tasks

* Build a couple of automatic tests to ensure the good behaviour of the changes 
done to the source code.
* Implement iosync() to make io() procs cooperate
* Identify possible lock problems


Project source:

The source is available via http in:

http://9grid.es/store/gsoc/src/

and via 9p in

% import -A tcp!false.9grid.es!17666 / /n/essources
% cd /n/essources/dist/store/gsoc

Thank you very much to Devon and Erik for their patiente and support.

slds.

gabi


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "Plan 
9 Google Summer of Code" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/plan9-gsoc?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to