Zbr's days.
August
Sun Mon Tue Wed Thu Fri Sat
     
8
 
2007
Months
Aug

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)