最近在设计高读性能的kv存储,为了尽可能保证cache的命中,应尽可能将"同时读取"的数据放到一起,以此来保证数据大概率同时出现在高速cache中。当前大部分计算机的cacheline size为64字节对齐,即当读取地址0x403140(64的整数倍 + 0)的时候,会将0x403140 ~ 0x40317F(64的整数倍 + 63)中的内容都加载进缓存。以此为参考依据来设计数据结构的大小可以加强数据访问速率,在极端场景下获得较大收益。
测试程序
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <stdint.h>
#include <sys/time.h>
#include <time.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#define SIZE 4*1024
#define STEP_LEN 2
struct Block {
int64_t element[COUNT];
};
int main() {
printf("block size: %ld\n", sizeof(Block));
struct timeval tv_start;
struct timeval tv_stop;
const int32_t END = COUNT - 1;
int32_t fd = open("/mnt/hugepages/a", O_RDWR);
if (fd < 0) {
printf