rocksdb的blockcache的一些优化点
引子
记一些突然间的想法,防止后续忘了,以下是正文。
blockcahe的问题
rocksdb的blockcache目前遇到的,主要有:
- 官方实现中没有回收机制.
enable_shared_from_this的实现和CRTP Idiom
parameter pack和递归模板展开
需求
做一个libevent的wrapper,有个需求,用户对某个fd的可读事件感兴趣,要求在产生这个事件时,调用他传入的某个可调用对象及其参数。
libevent的回调类似:void LibeventCallback(int fd, short flag, void* arg);
要求: 1、用户传入的可调用对象fn,拿的参数是可变的,第一个参数为某个特定类型,用于感知fd和flag,后续其他为用户自定义参数
lsm读写放大分析(r1)
lsm读写放大分析(r2)
recall of memory order model
c++内存序
题外话
Cache Coherency vs. Memory Consistency
这两个概念容易混淆,重新捋一下。
关于Cache Coherency:
wal recovery would cleanup at least the first WAL
这段时间跟同事尝试修复长期以来项目中遗留的Rocksdb的Case,遇到些有意思的Case,这里记录一下。
some tips for rocksdb case fixing
-
对于不支持
-march=native环境的,可以编译时export USE_SSE=1.避免类似no such instruction:shlx %r13,%rax,%rax'`的问题。 -
对于rocksdb的测试case,想保留测试db的,可以搞个
KEEP_DB环境变量。测试类会根据这个环境变量决定是否清理测试DB。
some details about rocksdb::LRUCache
最近有同事找我讨论问题,觉得挺有趣的记录一下。
rocksdb::LRUHandle::key()的历史
第一个问题是rocksdb::LRUHandle::key(), 这个函数返回该handle内部存储的key,但为啥某些情况下却返回value呢?
digest of 3.4
- rvalue references summary (50%) impl of std::forward, std::move 0.1.1 acquire & release semantics https://en.cppreference.com/w/cpp/atomic/memory_order https://www.modernescpp.com/index.php/acquire-release-semantic