I think KIST can use hash tables much less.
Originally, I observed that outbuf_table_add shows up in our malloc profile (legacy/trac#23777 (moved)), where I hadn't been expecting to see it.
After a little more thinking, I'm wondering why we have outbuf_table and socket_table at all:
The contents of socket_table_ent could become a member of channel_t, and save us a hashtable lookup there.
The outbuf_table could become a smartlist with a corresponding index pointer in channel_t, since we're basically using it as an unordered set.