Upcoming memcached releases + rambling.
dormando at rydia.net
Thu Feb 7 08:56:58 UTC 2008
The original plan for today was to pop on the list and yell "Hey! Have
some -rc's to test! Go nuts! Thanks for all the patches!" - but my
awesome fever for the last few days has pushed that off by ... a few
But it's totally cool, because it's happening. For the first time in a
long time memcached will act like it's releasing early, often. Thanks to
everyone for all of the recent code submissions and bugfixes :)
So we have two -rc's which are coming up as soon as I can wrap a few bug
reports and merge all this code:
1.3.0-rc (the binary tree, in its current state)
1.2.5-rc (non-binary branch with all of the recent fixes and patches)
There might not be an immediate merge of 1.2.5 -> 1.3.0, but I'm not
convinced that matters immediately.
I believe should probably give the binary tree a couple of real
development releases until we've had a few client implementations. So in
the case of the protocol having to change due to issues with actual
client integration, we won't be backing out on a stable API.
SO! I'd like to lay out my own wishlist for memcached, some of which is
underway, some not:
- Binary protocol. It's been too long, lets finish it. We need more
native tests, and we need to benchmark its speed relative to the text
protocol, make sure we're actually coming out ahead here.
- Dynamic storage engines. Toru has a promising proof of concept that
I'd love to merge for an eventual 1.4 release.
Most of the memcached forks have been due to folks not liking the
storage method. While I disagree with how a lot of these forks are done,
there's definitely merit in the flexibility. A lot of these folks start
from scratch, but I believe memcached should be a simple, efficient,
network platform for dead simple key=value datastores, no matter how
they're actually implemented.
- Dedupe the error messages. We have 11 instances of "SERVER_ERROR out
of memory". This makes it impossible to even guess what happened, even
with full context. Did we fail to allocate a msghdr? Did do_item_alloc
fail? Who knows. We can do this for 1.2.5 if there're people on board.
I'll float the patches.
- Add stats about failures. I'd love counters for all of the times
something failed without causing an eviction. Sometimes machines will be
hosed for a long time before we realize the hit rate is way down due to
the OS refusing 50% of the mallocs. Hard to tell if you've hit maxconns,
blah blah blah. More easy work, maybe for 1.2.5.
- Method of dumping refcounts of "locked" items. I'm tracking down what
I suspect is a refcount bug, and I expect us to have more of these in
the future. It'll be great to be able to verify these offhand. If
someone isolates a bum server, they can dump slabs, refcount, etc, and
send to the list.
- Full item dump. I guess we should do this with the appropriate
caveats. There's a potential patch floating around, we'll see about it.
- Fixing a lot of dynamic memory buffers. Per connection, per freelist,
whatever. A lot of these can be turned into linked lists if, say, the
'item' struct had a 'next' pointer. This should remove most of the
various realloc logic.
- Clean up the network iov's to work like above, and also manage generic
freelisted buffers. Which would remove the need for the specialized cas
suffix buffer. These should be wrapped so they can be linklisted,
instead of managed via dynamic arrays per connection. Could also be used
with the binary protocol to reduce syscalls.
- TCP_CORK/TCP_NOPUSH where appropriate. I totally agree here, and it
used to explicitly do this.
- New slabber engine. I view this as a bonus to making the slabber code
dynamic. We can start cooking an experimental new slabber to do
slab-reassignment, fragmentation avoidance, etc. Without really hosing
- More tests. We need better test coverage. Please submit tests!
- "Standard benchmarks". Memcached's contributions have historically
been based on "we ran this in production, here're some tests and proof
it works fine". Recently it's been more about rapid cleanups and the new
storage engine independence. It'd be really great to have some (say
libmemcached based) tests to exercize (under realistic AND unrealistic
- More documentation. I figure eventually someone will write docs with
better english, but there're tons of ideas floating around. We should
get them all down. Along with standard troubleshooting info, of which
there is practically none!
- Cache::Memcached updates. Uh, whoops. This doesn't support any of the
On community related measures:
- Buildbot. I totally started on this, but have not completed it. I want
to offer a buildbot network to the developer community. If you want a
platform supported, provide a slave. Otherwise we will not target it
(besides a couple of standby's).
- GIT. SVN is dead. We'll need to move on to git or hg in order to scale
the developer pace. It's my understanding that just as many folks on the
list prefer GIT as they do Mercurial, and SVN is mainly a convenience.
Anything will be better. I could crack out weekly releases if I didn't
have to worry about SVN branches/merges.
- Add more committers. I promise you guys; we're in an awkward position
with commit access, but people at sixapart absolutely acknowledge and
care about it. I've been having meetings, discussions, etc, about
dealing with this sooner than later. I mostly help with memcached on my
own time. However, sixapart does love memcached and the rest of the
danga projects. I can't say anything definitive, of course, but I feel
like I can share the feeling of "we give a shit" with all of you folks.
Part of having more committers means we need more dedicated reviewers.
Memcached is a stable project trusted by many, many websites.
- We should do more, less formal, hackathons. These are great for
hashing out minor issues, and I feel with more frequence they'd also be
really good for cranking out code, too ;)
That's all for now.
I'm missing a number of line items (please don't be offended if I missed
mentioning your submissions!) If it's in my inbox, it'll get a fair
review and probably go in.
More information about the memcached