|
|
About
TODO
Blog
RSS
Old blog
Projects
Gallery
Notes
Wed, 08 Aug 2007
Climbing evening.
That was a really good training - some old simple traces
for warming, number of traces on negative slope with bottom rope.
Everything was good except one small problem - I was asked
to tread out new climbing shoes, which were about my size
according to label, but about 1.5 santimeters smaller than
my own, so it was a bit painful (read: it was so fscking painful,
that I wanted to scream at the end of the training and wan not
able to move right when was in that shoes), which
made training hard as hell, but I managed to survive.
I'm actually quite surprised, in what conditions human can continue to be
pleased of surrounding conditions, feelings and life in general.
/life :: Link / Comments (0)
Mirroring in distributed storage.
I know, everyone wants it, and I have a work-in-progress patch, which implements some bits of it.
Btw, previously released distributed storage patches leaked with wrong
changeset, so it contains a bug, which does not allow to use local nodes,
i.e. nodes with locally attached devices. My fault, sorry.
Anyway, back to mirroring - this is what can open a door for wide adoption
of the distributed storage,
especially if this will have ability to work with multiple nodes in a mirror.
My initial implementation allows that, but it does not store sync state on devices
itself (do not know if needed at all), so if one of the nodes was broken and then the whole device is removed,
there is no info which nodes contain correct data. There is also no resync if device node
was removed (i.e. really removed from the storage), but it is possible
just to kill remote node and all missed data will be sent to it,
when it will be back after failover recovery reconnection,
but depending on situation this can stop writing to another nodes (if node was disconnected
during sync for example).
Basically only small part of the needed features is implemented, I would even say
that almost nothing, but nevertheless I started (yesterday evening).
Devil on the shoulder says me to start own small business out of my projects. I would
start long ago (probably with netchannels),
but need to work where I work right now. Working on contract with other parties
seems to be a good idea.
Anyway, the main issue I think quite for a while already is how to shut this devil up,
which wakes up each time I create something interesting.
So, the nearest roadmap is to implement and test mirroring, and then shut the devil somhow
(out of curiosity, what is a price to hold a closed joint-stock company per year in Russia).
Stay tuned.
/devel/dst :: Link / Comments (0)
Device throttling.
In really big systems it is possible to havea huge amount
of block IO requests pending, which can lead to deadlock,
if they require additional allocations (which can happen
in distributed storage for example, since it might require
additional network packet allocations), so some kind of device
throttling must be implemented. Google guys use device specific
mechanism (own semaphore) in theirs Zumastor
prject, but I decided to implement it in block layer, so that
any other users could benefit.
My morning patch allows to limit maximum amount of queued bios
per physical device. By default it is turned off and old block layer
behaviour with unlimited number of bios is used. When turned on (queue
limit is set to something different than -1U via blk_set_queue_limit()),
generic_make_request() will sleep until there is room in the queue.
number of bios is increased in generic_make_request() and reduced either
in bio_endio(), when bio is completely processed (bi_size is zero), and
recharged from original queue when new device is assigned to bio via
blk_set_bdev(). All operations are not atomic, since we do not care about
precise number of bios, but a fact, that we are close or close enough to
the limit.
Tested on distributed storage device - with limit of 2 bios it works slow :)
/devel/dst :: Link / Comments (0)
|