|
|
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)
|