乐于分享
好东西不私藏

RDMA: librdmacm架构及软件接口工作流程和使用方法

RDMA: librdmacm架构及软件接口工作流程和使用方法

knowledge base:

RDMA:  RDMA硬件架构和软件使能流程

RDMA: 连接组件CM架构及工作机制

RDMA: Verbs API 软件架构及使能流程

librdmacm 这是一个用于 RDMA(远程直接内存访问)通信管理的用户态库。

一、librdmacm 整体架构

librdmacm(RDMA Connection Manager)是构建在 libibverbs 之上的高层库,主要提供连接管理和地址解析功能。实际开发中,通常使用 librdmacm 处理连接,然后使用 libibverbs 进行高性能数据传输。

1.1 架构层次

┌─────────────────────────────────────────┐
│         用户应用程序 (User App)          │
├─────────────────────────────────────────┤
│      librdmacm (连接管理/地址解析)       │  ← 您使用的这层
│  - 连接建立/断开、地址解析、事件通知      │
├─────────────────────────────────────────┤
│      libibverbs (底层 Verbs 接口)        │
│  - QP/CQ/MR 管理、实际数据传输           │
├─────────────────────────────────────────┤
│        内核 RDMA 子系统                  │
│  - uverbs、rdma_cm、IB 核心驱动          │
├─────────────────────────────────────────┤
│        RDMA 硬件 (NIC)                  │
│  - Mellanox、Intel、Broadcom 等          │
└─────────────────────────────────────────┘

1.2 核心组件

二、核心工作流程

2.1 服务端工作流程

// 1. 创建事件通道
struct rdma_event_channel *ec =
 rdma_create_event_channel();

// 2. 创建 CM ID

struct rdma_cm_id *listen_id;

rdma_create_id(ec, &listen_id, NULL, RDMA_PS_TCP);

// 3. 绑定地址

struct sockaddr_in addr =
 {...};
rdma_bind_addr(listen_id, (struct sockaddr *)&addr);

// 4. 开始监听

rdma_listen(listen_id, backlog);

// 5. 等待连接请求 (循环处理事件)

struct rdma_cm_event *event;

rdma_get_cm_event(ec, &event);
if
 (event->event == RDMA_CM_EVENT_CONNECT_REQUEST) {
    struct rdma_cm_id *conn_id =
 event->id;  // 新连接ID

    // 6. 创建 QP、注册内存、接受连接

    ibv_create_qp(...);           // 创建 QP
    rdma_accept(conn_id, &param); // 接受连接
}
rdma_ack_cm_event(event);  // 必须确认事件

// 7. 数据传输 (通过 conn_id->qp 使用 libibverbs)

// ...


// 8. 断开连接

rdma_disconnect(conn_id);
rdma_destroy_id(conn_id);
rdma_destroy_id(listen_id);
rdma_destroy_event_channel(ec);

2.2 客户端工作流程

// 1. 创建事件通道
struct rdma_event_channel *ec =
 rdma_create_event_channel();

// 2. 创建 CM ID

struct rdma_cm_id *conn_id;

rdma_create_id(ec, &conn_id, NULL, RDMA_PS_TCP);

// 3. 解析地址 (可选,也可直接连接)

struct rdma_addrinfo *res;

rdma_getaddrinfo("server_ip", "port", NULL, &res);

// 4. 建立连接

rdma_resolve_addr(conn_id, NULL, res->ai_dst_addr, timeout);  // 解析地址
// 等待 RDMA_CM_EVENT_ADDR_RESOLVED 事件

rdma_resolve_route(conn_id, timeout);  // 解析路由
// 等待 RDMA_CM_EVENT_ROUTE_RESOLVED 事件

rdma_connect(conn_id, &conn_param);    // 发送连接请求
// 等待 RDMA_CM_EVENT_ESTABLISHED 事件


// 5. 数据传输

// ...


// 6. 断开连接

rdma_disconnect(conn_id);
rdma_destroy_id(conn_id);
rdma_destroy_event_channel(ec);

2.3 关键事件类型

三、核心 API 详解

3.1 连接管理 API

// 创建/销毁事件通道
struct
 rdma_event_channel *rdma_create_event_channel(void);
void
 rdma_destroy_event_channel(struct rdma_event_channel *channel);

// 创建/销毁 CM ID

int
 rdma_create_id(struct rdma_event_channel *channel,
                   struct
 rdma_cm_id **id,
                   void
 *context,
                   enum
 rdma_port_space ps)
;  // RDMA_PS_TCP / RDMA_PS_UDP

void
 rdma_destroy_id(struct rdma_cm_id *id);

// 地址绑定与解析

int
 rdma_bind_addr(struct rdma_cm_id *id, struct sockaddr *addr);
int
 rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr,
                      struct
 sockaddr *dst_addr, int timeout_ms)
;
int
 rdma_resolve_route(struct rdma_cm_id *id, int timeout_ms);

// 监听/连接

int
 rdma_listen(struct rdma_cm_id *id, int backlog);
int
 rdma_connect(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
int
 rdma_accept(struct rdma_cm_id *id, struct rdma_conn_param *conn_param);
int
 rdma_reject(struct rdma_cm_id *id, const void *private_data, uint8_t private_data_len);
int
 rdma_disconnect(struct rdma_cm_id *id);

3.2 事件处理 API

// 获取/确认事件 (阻塞式)
int
 rdma_get_cm_event(struct rdma_event_channel *channel,
                      struct
 rdma_cm_event **event)
;

// 必须调用以释放事件资源

int
 rdma_ack_cm_event(struct rdma_cm_event *event);

// 事件结构体关键字段

struct rdma_cm_event {

    enum rdma_cm_event_type event;
  // 事件类型
    int
 status;                     // 状态码 (0=成功)
    struct rdma_cm_id *id;
          // 关联的 CM ID
    void
 *context;                  // 用户上下文
    union {

        struct rdma_conn_param conn;
      // 连接参数
        struct rdma_ud_param   ud;
        // UD 服务参数
    } param;
};

3.3 数据传输准备 API

// 创建 QP (通常在收到连接请求后或地址解析后)
struct
 ibv_qp *ibv_create_qp(struct ibv_pd *pd, struct ibv_qp_init_attr *qp_init_attr);

// 注册内存区域

struct
 ibv_mr *ibv_reg_mr(struct ibv_pd *pd, void *addr,
                          size_t
 length, int access)
;

// 创建完成队列

struct
 ibv_cq *ibv_create_cq(struct ibv_context *context, int cqe,
                             void
 *cq_context, struct ibv_comp_channel *channel,
                             int
 comp_vector)
;

四、完整使用示例

4.1 服务端示例

SW arch

#include <rdma/rdma_cma.h>
#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define TEST_NZ(x) do { if ( (x)) die("error: " #x " failed."); } while (0)

#define TEST_Z(x)  do { if (!(x)) die("error: " #x " failed."); } while (0)


void
 die(const char *reason) {
    fprintf
(stderr, "%s\n", reason);
    exit
(EXIT_FAILURE);
}

// 连接上下文

struct conn_context {

    struct ibv_qp *qp;

    struct ibv_mr *mr;

    char
 *buf;
};

void
 on_connect_request(struct rdma_cm_id *id) {
    struct conn_context *ctx =
 calloc(1, sizeof(struct conn_context));

    // 1. 创建保护域

    struct ibv_pd *pd =
 ibv_alloc_pd(id->verbs);
    TEST_Z(pd);

    // 2. 创建完成队列

    struct ibv_cq *cq =
 ibv_create_cq(id->verbs, 10, NULL, NULL, 0);
    TEST_Z(cq);

    // 3. 创建 QP

    struct ibv_qp_init_attr qp_attr =
 {
        .send_cq = cq,
        .recv_cq = cq,
        .qp_type = IBV_QPT_RC,  // Reliable Connection
        .cap = {
            .max_send_wr = 10,
            .max_recv_wr = 10,
            .max_send_sge = 1,
            .max_recv_sge = 1
        }
    };
    TEST_NZ(rdma_create_qp(id, pd, &qp_attr));

    // 4. 注册内存

    ctx->buf = malloc(256);
    ctx->mr = ibv_reg_mr(pd, ctx->buf, 256,
                         IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_READ);
    TEST_Z(ctx->mr);

    id->context = ctx;

    // 5. 接受连接

    struct rdma_conn_param cm_params =
 {0};
    TEST_NZ(rdma_accept(id, &cm_params));
    printf
("Connection accepted\n");
}

void
 on_disconnect(struct rdma_cm_id *id) {
    struct conn_context *ctx =
 id->context;
    rdma_destroy_qp(id);
    ibv_dereg_mr(ctx->mr);
    free
(ctx->buf);
    free
(ctx);
    printf
("Connection closed\n");
}

int
 main(int argc, char **argv) {
    struct rdma_event_channel *ec =
 rdma_create_event_channel();
    TEST_Z(ec);

    struct rdma_cm_id *listener;

    TEST_NZ(rdma_create_id(ec, &listener, NULL, RDMA_PS_TCP));

    struct sockaddr_in addr =
 {
        .sin_family = AF_INET,
        .sin_port = htons(12345),
        .sin_addr.s_addr = INADDR_ANY
    };
    TEST_NZ(rdma_bind_addr(listener, (struct sockaddr *)&addr));
    TEST_NZ(rdma_listen(listener, 10));
    printf
("Listening on port 12345...\n");

    struct rdma_cm_event *event;

    while
 (rdma_get_cm_event(ec, &event) == 0) {
        struct rdma_cm_id *id =
 event->id;

        switch
 (event->event) {
            case
 RDMA_CM_EVENT_CONNECT_REQUEST:
                on_connect_request(id);
                break
;
            case
 RDMA_CM_EVENT_ESTABLISHED:
                printf
("Connection established\n");
                break
;
            case
 RDMA_CM_EVENT_DISCONNECTED:
                on_disconnect(id);
                break
;
            default
:
                printf
("Event: %s\n", rdma_event_str(event->event));
                break
;
        }
        rdma_ack_cm_event(event);  // 必须确认!
    }

    rdma_destroy_id(listener);
    rdma_destroy_event_channel(ec);
    return
 0;
}

4.2 客户端示例

#include <rdma/rdma_cma.h>
#include <stdio.h>

#include <stdlib.h>

#include <string.h>


#define TEST_NZ(x) do { if ( (x)) die("error: " #x " failed."); } while (0)

#define TEST_Z(x)  do { if (!(x)) die("error: " #x " failed."); } while (0)


void
 die(const char *reason) {
    fprintf
(stderr, "%s\n", reason);
    exit
(EXIT_FAILURE);
}

int
 main(int argc, char **argv) {
    if
 (argc != 2) {
        fprintf
(stderr, "usage: %s <server_ip>\n", argv[0]);
        return
 1;
    }

    struct rdma_event_channel *ec =
 rdma_create_event_channel();
    TEST_Z(ec);

    struct rdma_cm_id *conn_id;

    TEST_NZ(rdma_create_id(ec, &conn_id, NULL, RDMA_PS_TCP));

    // 解析服务器地址

    struct rdma_addrinfo *res;

    TEST_NZ(rdma_getaddrinfo(argv[1], "12345", NULL, &res));

    // 解析地址

    TEST_NZ(rdma_resolve_addr(conn_id, NULL, res->ai_dst_addr, 2000));

    struct rdma_cm_event *event;

    while
 (rdma_get_cm_event(ec, &event) == 0) {
        if
 (event->event == RDMA_CM_EVENT_ADDR_RESOLVED) {
            printf
("Address resolved\n");
            rdma_resolve_route(conn_id, 2000);
        } else if (event->event == RDMA_CM_EVENT_ROUTE_RESOLVED) {
            printf
("Route resolved\n");

            // 创建 QP (类似服务端)

            struct ibv_pd *pd =
 ibv_alloc_pd(conn_id->verbs);
            struct ibv_cq *cq =
 ibv_create_cq(conn_id->verbs, 10, NULL, NULL, 0);
            struct ibv_qp_init_attr qp_attr =
 {
                .send_cq = cq, .recv_cq = cq,
                .qp_type = IBV_QPT_RC,
                .cap = { .max_send_wr = 10, .max_recv_wr = 10,
                         .max_send_sge = 1, .max_recv_sge = 1 }
            };
            rdma_create_qp(conn_id, pd, &qp_attr);

            // 注册内存

            char
 *buf = malloc(256);
            struct ibv_mr *mr =
 ibv_reg_mr(pd, buf, 256,
                IBV_ACCESS_LOCAL_WRITE | IBV_ACCESS_REMOTE_READ);

            // 发送连接请求

            struct rdma_conn_param cm_params =
 {0};
            rdma_connect(conn_id, &cm_params);
        } else if (event->event == RDMA_CM_EVENT_ESTABLISHED) {
            printf
("Connected! Ready for data transfer.\n");
            // 这里可以进行 RDMA 操作 (Send/Recv/Read/Write)

            // ...

            break
;
        } else if (event->event == RDMA_CM_EVENT_REJECTED) {
            die("Connection rejected");
        }
        rdma_ack_cm_event(event);
    }

    // 断开连接

    rdma_disconnect(conn_id);
    rdma_destroy_id(conn_id);
    rdma_destroy_event_channel(ec);
    return
 0;
}

五、关键使用要点

5.1 必须遵守的规则

  1. 1. 事件确认:每次 rdma_get_cm_event() 后必须调用 rdma_ack_cm_event(),否则会导致资源泄漏
  2. 2. QP 创建时机:服务端在 CONNECT_REQUEST 事件中创建,客户端在 ROUTE_RESOLVED 后创建
  3. 3. 资源释放顺序:先 rdma_destroy_qp() → 再 ibv_dereg_mr() → 最后 rdma_destroy_id()

5.2 两种使用模式

5.3 与 libibverbs 的关系

  • • librdmacm 负责:连接建立、地址解析、事件通知
  • • libibverbs 负责:QP/CQ/MR 管理、实际 RDMA 操作 (post_send, post_recv, poll_cq)
  • • 协同工作:librdmacm 创建的 rdma_cm_id 包含 ibv_qp 指针,数据传输需通过 verbs API 操作

    5.4 编译与运行

# 编译
gcc server.c -o server -lrdmacm -libverbs
gcc client.c -o client -lrdmacm -libverbs

# 运行 (需要 RDMA 网卡,如 Mellanox ConnectX 系列)

./server
./client <server_ip>

六、总结

librdmacm 简化了 RDMA 编程中最复杂的连接管理部分,其核心优势在于:

  1. 1. 抽象连接流程:将复杂的 RDMA 连接建立过程抽象为事件驱动模型
  2. 2. 统一地址解析:支持 IP 地址和 RDMA 特定地址的解析
  3. 3. 与 verbs 解耦:连接管理独立于数据传输,便于分层设计
基本 文件 流程 错误 SQL 调试
  1. 请求信息 : 2026-04-25 08:53:22 HTTP/1.1 GET : https://www.yeyulingfeng.com/a/554054.html
  2. 运行时间 : 0.199895s [ 吞吐率:5.00req/s ] 内存消耗:4,668.97kb 文件加载:145
  3. 缓存信息 : 0 reads,0 writes
  4. 会话信息 : SESSION_ID=84fdce7b9dbf21b5cc781a23fd50268b
  1. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/public/index.php ( 0.79 KB )
  2. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/autoload.php ( 0.17 KB )
  3. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_real.php ( 2.49 KB )
  4. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/platform_check.php ( 0.90 KB )
  5. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/ClassLoader.php ( 14.03 KB )
  6. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/composer/autoload_static.php ( 6.05 KB )
  7. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper.php ( 8.34 KB )
  8. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/helper.php ( 2.19 KB )
  9. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/ralouphie/getallheaders/src/getallheaders.php ( 1.60 KB )
  10. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/helper.php ( 1.47 KB )
  11. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/stubs/load_stubs.php ( 0.16 KB )
  12. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Exception.php ( 1.69 KB )
  13. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Facade.php ( 2.71 KB )
  14. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/deprecation-contracts/function.php ( 0.99 KB )
  15. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap.php ( 8.26 KB )
  16. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/polyfill-mbstring/bootstrap80.php ( 9.78 KB )
  17. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/Resources/functions/dump.php ( 1.49 KB )
  18. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-dumper/src/helper.php ( 0.18 KB )
  19. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/symfony/var-dumper/VarDumper.php ( 4.30 KB )
  20. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions_include.php ( 0.16 KB )
  21. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/guzzlehttp/guzzle/src/functions.php ( 5.54 KB )
  22. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/App.php ( 15.30 KB )
  23. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-container/src/Container.php ( 15.76 KB )
  24. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/container/src/ContainerInterface.php ( 1.02 KB )
  25. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/provider.php ( 0.19 KB )
  26. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Http.php ( 6.04 KB )
  27. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Str.php ( 7.29 KB )
  28. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Env.php ( 4.68 KB )
  29. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/common.php ( 0.03 KB )
  30. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/helper.php ( 18.78 KB )
  31. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Config.php ( 5.54 KB )
  32. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/alipay.php ( 3.59 KB )
  33. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Env.php ( 1.67 KB )
  34. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/app.php ( 0.95 KB )
  35. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cache.php ( 0.78 KB )
  36. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/console.php ( 0.23 KB )
  37. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/cookie.php ( 0.56 KB )
  38. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/database.php ( 2.48 KB )
  39. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/filesystem.php ( 0.61 KB )
  40. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/lang.php ( 0.91 KB )
  41. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/log.php ( 1.35 KB )
  42. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/middleware.php ( 0.19 KB )
  43. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/route.php ( 1.89 KB )
  44. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/session.php ( 0.57 KB )
  45. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/trace.php ( 0.34 KB )
  46. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/config/view.php ( 0.82 KB )
  47. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/event.php ( 0.25 KB )
  48. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Event.php ( 7.67 KB )
  49. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/service.php ( 0.13 KB )
  50. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/AppService.php ( 0.26 KB )
  51. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Service.php ( 1.64 KB )
  52. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Lang.php ( 7.35 KB )
  53. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/lang/zh-cn.php ( 13.70 KB )
  54. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/Error.php ( 3.31 KB )
  55. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/RegisterService.php ( 1.33 KB )
  56. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/services.php ( 0.14 KB )
  57. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/PaginatorService.php ( 1.52 KB )
  58. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ValidateService.php ( 0.99 KB )
  59. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/service/ModelService.php ( 2.04 KB )
  60. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Service.php ( 0.77 KB )
  61. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Middleware.php ( 6.72 KB )
  62. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/initializer/BootService.php ( 0.77 KB )
  63. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Paginator.php ( 11.86 KB )
  64. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-validate/src/Validate.php ( 63.20 KB )
  65. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/Model.php ( 23.55 KB )
  66. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Attribute.php ( 21.05 KB )
  67. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/AutoWriteData.php ( 4.21 KB )
  68. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/Conversion.php ( 6.44 KB )
  69. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/DbConnect.php ( 5.16 KB )
  70. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/ModelEvent.php ( 2.33 KB )
  71. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/concern/RelationShip.php ( 28.29 KB )
  72. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Arrayable.php ( 0.09 KB )
  73. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/contract/Jsonable.php ( 0.13 KB )
  74. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/model/contract/Modelable.php ( 0.09 KB )
  75. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Db.php ( 2.88 KB )
  76. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/DbManager.php ( 8.52 KB )
  77. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Log.php ( 6.28 KB )
  78. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Manager.php ( 3.92 KB )
  79. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerTrait.php ( 2.69 KB )
  80. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/log/src/LoggerInterface.php ( 2.71 KB )
  81. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cache.php ( 4.92 KB )
  82. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/psr/simple-cache/src/CacheInterface.php ( 4.71 KB )
  83. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/helper/Arr.php ( 16.63 KB )
  84. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/driver/File.php ( 7.84 KB )
  85. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/cache/Driver.php ( 9.03 KB )
  86. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/CacheHandlerInterface.php ( 1.99 KB )
  87. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/Request.php ( 0.09 KB )
  88. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Request.php ( 55.78 KB )
  89. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/middleware.php ( 0.25 KB )
  90. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Pipeline.php ( 2.61 KB )
  91. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/TraceDebug.php ( 3.40 KB )
  92. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/middleware/SessionInit.php ( 1.94 KB )
  93. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Session.php ( 1.80 KB )
  94. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/driver/File.php ( 6.27 KB )
  95. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/SessionHandlerInterface.php ( 0.87 KB )
  96. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/session/Store.php ( 7.12 KB )
  97. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Route.php ( 23.73 KB )
  98. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleName.php ( 5.75 KB )
  99. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Domain.php ( 2.53 KB )
  100. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleGroup.php ( 22.43 KB )
  101. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Rule.php ( 26.95 KB )
  102. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/RuleItem.php ( 9.78 KB )
  103. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/route/app.php ( 3.94 KB )
  104. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/Route.php ( 4.70 KB )
  105. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/dispatch/Controller.php ( 4.74 KB )
  106. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/route/Dispatch.php ( 10.44 KB )
  107. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Index.php ( 9.87 KB )
  108. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/BaseController.php ( 2.05 KB )
  109. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/facade/Db.php ( 0.93 KB )
  110. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/connector/Mysql.php ( 5.44 KB )
  111. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/PDOConnection.php ( 52.47 KB )
  112. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Connection.php ( 8.39 KB )
  113. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/ConnectionInterface.php ( 4.57 KB )
  114. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/builder/Mysql.php ( 16.58 KB )
  115. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Builder.php ( 24.06 KB )
  116. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseBuilder.php ( 27.50 KB )
  117. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/Query.php ( 15.71 KB )
  118. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/BaseQuery.php ( 45.13 KB )
  119. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TimeFieldQuery.php ( 7.43 KB )
  120. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/AggregateQuery.php ( 3.26 KB )
  121. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ModelRelationQuery.php ( 20.07 KB )
  122. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ParamsBind.php ( 3.66 KB )
  123. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/ResultOperation.php ( 7.01 KB )
  124. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/WhereQuery.php ( 19.37 KB )
  125. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/JoinAndViewQuery.php ( 7.11 KB )
  126. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/TableFieldInfo.php ( 2.63 KB )
  127. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-orm/src/db/concern/Transaction.php ( 2.77 KB )
  128. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/driver/File.php ( 5.96 KB )
  129. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/LogHandlerInterface.php ( 0.86 KB )
  130. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/log/Channel.php ( 3.89 KB )
  131. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/event/LogRecord.php ( 1.02 KB )
  132. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-helper/src/Collection.php ( 16.47 KB )
  133. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/facade/View.php ( 1.70 KB )
  134. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/View.php ( 4.39 KB )
  135. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/app/controller/Es.php ( 3.30 KB )
  136. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Response.php ( 8.81 KB )
  137. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/response/View.php ( 3.29 KB )
  138. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/Cookie.php ( 6.06 KB )
  139. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-view/src/Think.php ( 8.38 KB )
  140. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/framework/src/think/contract/TemplateHandlerInterface.php ( 1.60 KB )
  141. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/Template.php ( 46.61 KB )
  142. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/driver/File.php ( 2.41 KB )
  143. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-template/src/template/contract/DriverInterface.php ( 0.86 KB )
  144. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/runtime/temp/c935550e3e8a3a4c27dd94e439343fdf.php ( 31.50 KB )
  145. /yingpanguazai/ssd/ssd1/www/wwww.yeyulingfeng.com/vendor/topthink/think-trace/src/Html.php ( 4.42 KB )
  1. CONNECT:[ UseTime:0.000971s ] mysql:host=127.0.0.1;port=3306;dbname=wenku;charset=utf8mb4
  2. SHOW FULL COLUMNS FROM `fenlei` [ RunTime:0.000930s ]
  3. SELECT * FROM `fenlei` WHERE `fid` = 0 [ RunTime:0.000309s ]
  4. SELECT * FROM `fenlei` WHERE `fid` = 63 [ RunTime:0.000273s ]
  5. SHOW FULL COLUMNS FROM `set` [ RunTime:0.000530s ]
  6. SELECT * FROM `set` [ RunTime:0.000204s ]
  7. SHOW FULL COLUMNS FROM `article` [ RunTime:0.000565s ]
  8. SELECT * FROM `article` WHERE `id` = 554054 LIMIT 1 [ RunTime:0.000438s ]
  9. UPDATE `article` SET `lasttime` = 1777078403 WHERE `id` = 554054 [ RunTime:0.000726s ]
  10. SELECT * FROM `fenlei` WHERE `id` = 64 LIMIT 1 [ RunTime:0.000233s ]
  11. SELECT * FROM `article` WHERE `id` < 554054 ORDER BY `id` DESC LIMIT 1 [ RunTime:0.001162s ]
  12. SELECT * FROM `article` WHERE `id` > 554054 ORDER BY `id` ASC LIMIT 1 [ RunTime:0.001156s ]
  13. SELECT * FROM `article` WHERE `id` < 554054 ORDER BY `id` DESC LIMIT 10 [ RunTime:0.012358s ]
  14. SELECT * FROM `article` WHERE `id` < 554054 ORDER BY `id` DESC LIMIT 10,10 [ RunTime:0.013443s ]
  15. SELECT * FROM `article` WHERE `id` < 554054 ORDER BY `id` DESC LIMIT 20,10 [ RunTime:0.003197s ]
0.201522s