跳过正文

事件通知是怎么产生的?

作者
杨全烨
系统软件:操作系统、网络与分布式系统。

看看一个RDMA的上下文:

typedef struct RdmaContext {

    connection * conn; // 上层连接结构体
    char * ip;
    int port;
    long long keepalive_te; /* RDMA has no transport layer keepalive */
    struct ibv_pd * pd; // 保护域
    struct rdma_event_channel * cm_channel;
    struct ibv_comp_channel * comp_channel; // CQ的通知事件,用来触发POLLIN事件
    struct ibv_cq * cq;

    /* TX */
    RdmaXfer tx;
    char * tx_addr; /* remote transfer buffer address */
    uint32_t tx_key; /* remote transfer buffer key */
    uint32_t tx_length; /* remote transfer buffer length */
    uint32_t tx_offset; /* remote transfer buffer offset */
    uint32_t tx_ops; /* operations on remote transfer */

    /* RX */
    RdmaXfer rx;

    /* CMD 0 ~ VALKEY_RDMA_MAX_WQE for recv buffer
     * VALKEY_RDMA_MAX_WQE ~ 2 * VALKEY_RDMA_MAX_WQE -1 for send buffer */
    ValkeyRdmaCmd * cmd_buf;
    struct ibv_mr * cmd_mr;

}
RdmaContext;