Kinkie wrote:
Though there is a potential loss of disk IO efficiency when alignments of
the data portion are not on the 4096/8192 disk chunk borders. The few dozen
bytes of overhead difference in the disk and memory nodes are annoying.

A possibility is to detach the data from the data structures needed to
access them, in much the same ways filesystems do.
But this is better tested out first in a specialized environment (e.g.
in a mem-based cache_dir implementation).


That pretty much what I was thinking. Taking on the inode model. Where N mem_node_meta objects are allocated in a sequential page slab, which would be allocated and swapped in/out as a chunk anyway. That maintains locality of the meta data, which same as now contains a ptr to page of data.

This needs a bit more thought and figuring why mem_node has a fixed data buffer of its own AND a StoreIOBuffer pointing at a dynamic amount of MemBuf. I have not looked at this past seeing the fields of mem_node and having the idea that it holds the in-memory object in a sequence of data pages.

Rough ideas on top of that:

Going by the size of mem_node and StoreIOBuffer it looks like we can squeeze each meta slab into 256 bytes. Or with padding can have 2-3 per KB easily.

I'm thinking now of an average object <16KB taking 3x mem_node_meta and 3x dynamically allocated pages for data 2x 4KB and the third 8KB aligned.

So a minimum object takes 1x4KB pages as now, average object takes 4x4KB data pages and 256B-1KB of meta. Larger objects get another mem_node_meta slab and so the sequence repeats.

Amos
--
Please be using
  Current Stable Squid 2.7.STABLE7 or 3.0.STABLE20
  Current Beta Squid 3.1.0.15

Reply via email to