Zbr's days.
December
Sun Mon Tue Wed Thu Fri Sat
           
12
         
2007
Months
Dec

About TODO Blog RSS Old blog Projects Gallery Notes

Wed, 12 Dec 2007

Climbing evening.

It was again a bit late training and thus shorter than usual, but nevertheless it was very saturated - I tried old complex start on the horizontal negative slope and several times managed to complete it fully. That's a very interesting and complex trace itself, but some time ago I tried some of its bits and completed them. I think I can finish it without falls after several trainings, but right now I'm working with the most complex I think part: with power sucking start.
Horizontal negative slope is usually a big problem for me because of my power endurance, it also requires very strong back in some movements, so right now I'm feeling that I still have some muscles in the body and they did not dissapear after sitting in the chair most of the time.
Excellent time!

/life :: Link / Comments (0)


I was a bit pessimistic about DST design bugs.

Things are only bad when resync of the mirror node is in place...
I fixed both issues, but will spent additional time debugging and testing the them, since I do not like how it was done. I think I will rewrite mirroring resync logic.

Subrata Modak of IBM suggested to use Linux Test Project, which I found to have interesting benchmarks, which while being very useful for filesystem development, still can find some bugs in DST.

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


Shame on me or how complex are design bugs...

I have to admit, that mirroring in DST is not currently well supported.
First, because of a bug I made in the early development stage: in DST there are two objects, which represent a part of the storage, first one is a node, this object contains information about type of the storage and pointers to structure, which represents low level device itself (like block device or network connection). Network connection in turn is represented as a state structure, which contains socket, state machine for transferred data and so on. Nodes are used when block io request comes from the higher layer and states are used when data is transfeerred via network. The former uses fain grained reference counters: when node is being operated on (request is processed), its reference counter is increased, if operations become asynchronous (for example sending queue is full and thus block can not be sent right now), then block request is queued into state's request list and reference counter for the node is dropped. If it reaches zero, node is being freed, which in turn calls exit callback for the state, which flushes the queue of requests.
Things seem simple and correct, but devil is in details - async processing thread can enter at any point into the game and process state too, which leads to bugs.
Second, DST mirroring can ate all your memory during resync, since it does not check amount of free ram in the system and tries to allocate new pages until all memory is used. This is already fixed in the private tree though.
And the last (known) problem is mirror bitmap - it uses single bit for single sector of the device, and although uses vmalloc(), it is still too much of RAM.

Back to fixing.

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