Zbr's days.
July
Sun Mon Tue Wed Thu Fri Sat
12
       
2007
Months
Jul

About TODO Blog RSS Old blog Projects Gallery Notes

Thu, 12 Jul 2007

Ok, back to distributed storage.

I sort of completed uninteresting tasks and finally back to the good shape, so expect interesting bits soon.

So far, there is a challenge to perform as small as possible additional allocations per IO request.
For example there is at least one additional allocaiton of struct bio each time new block is going to be written/read to/from disk (plus struct request, but I'm not sure - last time I looked into block layer code too long ago to remember all bits). Device mapper adds another two - cloned BIO and own request.
Then network will add another (at least) one.
First and the last ones are unavoidable (actually they can be removed, at least skb allocation I can workaround, but that will have questionable error-prone consequences, so no need for such hack for now), but allocation in-between, i.e. in the control layer in the distributed storage must be reduced to the very minimum. Initial state machine, I released, works with one request per time, since each state does not have request queue.
Network block device contrary does not have any additional allocations, but it is purely synchronous, so it does not need to keep track of sent requests.

So, problem states as following: node (or state) needs to have a queue/tree/whatever of partially processed requests. Each requests should have a pointer to the original block IO request. Each state (or node) should have a callback, which will be invoked by core of the state machine, when input or output processing can happen, so that callback will get events and process them in order.
That is essentially what I'm developing right now.
Stay tuned.

/devel/dst :: Link / Comments (0)