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