Hi,

We currently have 64 bits left over in the gfs2 metadata header. This is currently just padding, although we do zero it out when we add metadata blocks to transactions. I would like to ensure that we make the most of this space, and I've got a couple of ideas of how best to use it.

Firstly, we should be able to add checksums to our metadata quite easily. A crc32 would use half of the space available, and we should probably do the checksum at the point where we write the data into the log, so that it is then also correct for when it is written back in place.

The more tricky issue is what to do with the remaining 32 bits. One thought, is to come up with some scheme which (eventually) allows us to avoid having to write out revokes to the log. This would significantly speed up moving glocks from node to node, halving the number of log flushes when metadata has been updated. We could make it into a generation number, but is 32 bits enough? By incrementing it individually on each bit of metadata each time it goes through the log, we would get a better picture of whats going on, rather than just copying the low 32 bits of the log sequence number I think. That should be enough to make sure that we'd keep out of trouble even if someone is using a large (non-default) log size.

The question is whether there is anything else we might use those 32 bits for that might give us an even bigger gain? Any thoughts?

I should mention that this is all for metadata - we'd have to do something different for jdata, since it doesn't have a header in this sense, but, one thing at a time!

Steve.


Reply via email to