gluster的event pool原理

gluster使用基于epoll的event_pool,由slot(可以理解为槽位),最大可以创建1024X1024个slot,每个slot中关键数据为:fd,events,handler,分别对应文件描述符,epoll事件(EPOLLIN/EPOLLPRI/EPOLLOUT等)事件处理函数。

// event-epoll.c
  29 struct event_slot_epoll {
  30     int fd;
  31     int events;
  32     int gen;
  33     int idx;
  34     gf_atomic_t ref;
  35     int do_close;
  36     int in_handler;
  37     int handled_error;
  38     void *data;
  39     event_handler_t handler;
  40     gf_lock_t lock;
  41     struct list_head poller_death;
  42 };


该数据结构,最终在:

// libglusterfs/src/glusterfs/gf-event.h
struct event_pool {
...
    struct event_slot_epoll *ereg[EVENT_EPOLL_TABLES];
    int slots_used[EVENT_EPOLL_TABLES];
...
}

由ereg成员组成一个二维slot表, 而slots_used记录已被使用的slot. 注意slots_used是一个一维表,而ereg为二维表. 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值