memcached性能优化(七)

项目基本,成型关键还是性能有点上不去,这周首先完成了以下的几个工作:

1. 把clock算法添加进LRU替换算法中去,目前insert的话每秒操作能到15万,但是get有略微的提升,大约是14万左右。

2. 完成了分块hash的这个东西,具体的修改主要是在assoc.c,这个主要多加了以下几个字段:

这周首先完成了以下的几个工作:

typedef struct _stritem {
    struct _stritem *next;
    struct _stritem *prev;
    struct _stritem *h_next;    /* hash chain next */
    rel_time_t      time;       /* least recent access */
    rel_time_t      exptime;    /* expire time */
    int             nbytes;     /* size of data */
    unsigned short  refcount;
    uint8_t         nsuffix;    /* length of flags-and-length string */
    uint8_t         it_flags;   /* ITEM_* above */
    uint8_t         slabs_clsid;/* which slab class we're in */
    uint8_t         nkey;       /* key length, w/terminating null and padding */
    uint8_t         tag;        /* tag, use different hash algorithm */
    uint8_t         part;       /* part*/
    /* this odd type prevents type-punning issues when we do
     * the little shuffle to save space when not using CAS. */
    union {
        uint64_t cas;
        char end;
    } data[];
    /* if it_flags & ITEM_CAS we have 8 bytes CAS */
    /* then null-terminated key */
    /* then " flags length\r\n" (no terminating null) */
    /* then data with terminating \r\n (no terminating null; it's binary!) */
} item;

然后修改了item相关的代码,多变成多块的hash的过程。
这个版本是目前的master的版本,通过了测试的过程。然后这周主要是把LRU的替换算法变成clock置换,置换的原因的出发点还是减少锁的粒度,上面的那个优化已经是得try——lock不是主要的瓶颈了,但是get的效率还是上不来,初步分析下可能还是和锁有关系,所以目前继续优化,代码还是在code上。

周一晚update:

这个重新做了个更新,发现以前跑性能测试的问题了,以前memcached都是跑在工作站上的,24核工作站性能刚刚的,2个24核的同时测试插入操作都是12万,cpu居然吃不满,之前一只单机测试,看着cpu是满的,其实cpu压根没满,只是YCSB把cpu占满了,这次分开后测试发现之前测下来差不多主要是那边处理性能太高,最多只用6-8个核,换成一个普通pc就明显有优势了

2个48threads进行YCSB的测试,然后1个普通pc做memcached,这个性能的优化就明显上来了,原始的memcached再插入的时候单个只有5到6万,2个同时开就降到了3万左右,而且cpu也快占满,优化后的明显有所提升,单个在10万左右,而且同时还可以处理get请求,cpu大概只有一半的占用率,总算是达到性能优化的指标了。。。

不过有2个小问题,第一个是多路插入有时候会死锁,第二个是get的效率还是差不了太多都是20万左右,项目也快结束了,目前做完最后的2个优化,解决死锁问题,准备报告:)




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值