日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Accelio 代码笔记

發布時間:2023/12/18 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Accelio 代码笔记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • 項目概述

Accelio是一套支持rdma協議的通訊框架,并且允許擴展包含clientserver,同時支持用戶態和內核態。

  • 功能

Simplified?API?for?application?developers

High-performance?asynchronous?APIs

Reliable?message?delivery?(end?to?end)

Request/Replay?or?Send/Receive?models

Connection?and?resource?abstraction?to?maximize?scalability?and?availability

Native?support?for?service?and?storage?clustering/scale-out

Maximize?multi-threaded?application?performance?allowing?dedicated?hardware?resources?per?thread

Zero?copy?data?delivery,?with?optional?built-in?memory?management

Support?for?multiple?transport?technologies?(RDMA,?TCP,?Shared-Memory?etc.)**

Integration?with?common?event?loop?mechanisms

Fast?event?notifications?or?combined?models?for?lowest?message?latency

Message?combining?and?batch?message?processing?optimization

User?space?and?kernel?implementations

Java?bindings**

  • 結構

劃分為三層

Application?Interface

Easy-to-use?primitives?for?fast?and?reliable?asynchronous?message?queue?or?RPC?(Remote?Procedure?Call)

?

Session?and?Connection?Management

Provides?reliable?end-to-end?connectivity?to?peer?endpoints,?with?dynamic?connection?establishment,?pooling,?fault?recovery,?and?migration/redirection

?

Pluggable?Transport?Layer

Allows?mapping?to?different?hardware?or?software?transport?implementations

  • 主要數據結構

xio_transport?

協議類型,目前只有rdma,包含協議名和該協議相關的所有操作函數?,rdma模塊中定義了一個xio_rdma_transport全局變量,實現了xio_transport中所有函數,同時還有一個struct?xio_rdma_transport結構,該類型是對底層驅動接口的封裝,同時包含了上下文,每個conn對象都包含一個單獨的,該結構實際應該是和xio_transport_base在同一層次

struct?xio_transport?{

const?char *name;

struct?xio_transport_msg_validators_cls validators_cls;

/*?transport?ctor/dtor?called?right?after?registration?*/

void (*ctor)(void);

void (*dtor)(void);

/*?transport?initialization?*/

int (*init)(struct?xio_transport?*self);

void (*release)(struct?xio_transport?*self);

/*?running?thread?(context)?is?going?down?*/

int (*context_shutdown)(struct?xio_transport_base?*trans_hndl,

????struct?xio_context?*ctx);

/*?observers?*/

void (*reg_observer)(struct?xio_transport_base?*trans_hndl,

struct?xio_observer?*observer);

void (*unreg_observer)(struct?xio_transport_base?*trans_hndl,

???struct?xio_observer?*observer);

/*?task?pools?managment?*/

void (*get_pools_setup_ops)(struct?xio_transport_base?*trans_hndl,

struct?xio_tasks_pool_ops?**initial_pool_ops,

struct?xio_tasks_pool_ops?**primary_pool_ops);

void (*set_pools_cls)(struct?xio_transport_base?*trans_hndl,

struct?xio_tasks_pool_cls?*initial_pool_cls,

struct?xio_tasks_pool_cls?*primary_pool_cls);

/*?connection?*/

struct?xio_transport_base?*(*open)(struct?xio_transport?*self,

struct?xio_context?*ctx,

struct?xio_observer?*observer);

int (*connect)(struct?xio_transport_base?*trans_hndl,

???const?char?*portal_uri,

???const?char?*out_if);

int (*listen)(struct?xio_transport_base?*trans_hndl,

??const?char?*portal_uri,?uint16_t?*src_port,

??int?backlog);

int (*accept)(struct?xio_transport_base?*trans_hndl);

int (*poll)(struct?xio_transport_base?*trans_hndl,

long?min_nr,?long?nr,

struct?timespec?*timeout);

int (*reject)(struct?xio_transport_base?*trans_hndl);

void (*close)(struct?xio_transport_base?*trans_hndl);

int (*send)(struct?xio_transport_base?*trans_hndl,

struct?xio_task?*task);

int (*set_opt)(void?*xio_obj,

???int?optname,?const?void?*optval,?int?optlen);

int (*get_opt)(void?*xio_obj,

???int?optname,?void?*optval,?int?*optlen);

int (*cancel_req)(struct?xio_transport_base?*trans_hndl,

??????struct?xio_msg?*req,?uint64_t?stag,

??????void?*ulp_msg,?size_t?ulp_msg_len);

int (*cancel_rsp)(struct?xio_transport_base?*trans_hndl,

??????struct?xio_task?*task,?enum?xio_status?result,

??????void?*ulp_msg,?size_t?ulp_msg_len);

struct?list_head?transports_list_entry;

};

xio_transport_base??

底層通信的上下文,每個conn對應一個

struct?xio_transport_base?{

struct?xio_context *ctx;

struct?xio_observable observable;

uint32_t is_client;??/*?client?or?server?*/

atomic_t refcnt;

char *portal_uri;

struct?sockaddr_storage peer_addr;

enum???xio_proto proto;

int pad;

};

xio_conn?

transport_base的簡單封裝,管理task緩存,處理框架內部定義的一些消息,握手消息之類

struct?xio_conn?{

struct?xio_transport *transport;

struct?xio_transport_base *transport_hndl;

struct?xio_tasks_pool *primary_tasks_pool;

struct?xio_tasks_pool_ops *primary_pool_ops;

struct?xio_tasks_pool *initial_tasks_pool;

struct?xio_tasks_pool_ops *initial_pool_ops;

struct?xio_observer *server_observer;

struct?xio_observer trans_observer;

struct?xio_observer ctx_observer;

struct?xio_observable observable;

struct?kref kref;

int cid;

enum?xio_conn_state state;

int is_first_req;

int is_listener;

int pad;

xio_ctx_timer_handle_t close_time_hndl;

struct?list_head observers_htbl;

HT_ENTRY(xio_conn,?xio_key_int32)?conns_htbl;

};

xio_connection?

xio_conn的封裝,管理msg緩存,對外提供訪問接口

struct?xio_connection?{

struct?xio_conn *conn;

struct?xio_session *session;

struct?xio_context *ctx; /*?connection?context?*/

struct?xio_session_ops ses_ops;

/*?server's?session?may?have?multiple?connections?each?has

?*?private?data?assignd?by?bind

?*/

void *cb_user_context;

int conn_idx;

int state;

int32_t send_req_toggle;?//?選擇發送請求還是回應

int pad;

struct?kref kref;

struct?kref fin_kref;

struct?xio_msg_list reqs_msgq;?//?待發送的請求隊列

struct?xio_msg_list rsps_msgq;?//??待發送的回應隊列

struct?xio_msg_list in_flight_reqs_msgq;?//?已經發送的請求隊列

struct?xio_msg_list in_flight_rsps_msgq;?//?已經發送的回應隊列

struct?xio_msg_list one_way_msg_pool;

struct?xio_msg *msg_array;

struct?list_head io_tasks_list;

struct?list_head post_io_tasks_list;

struct?list_head pre_send_list;

struct?list_head connections_list_entry;

struct?list_head ctx_list_entry;

};

xio_session?

網絡session,一個addr對應一個session,每個session管理多個xio_connection,但是每個session中的多個connection不能由同一個context管理,多線程的使用模式是,由一個主線程創建session,每個工作線程創建context,并建立連接(Client端)

struct?xio_session?{

uint64_t trans_sn;?/*?transaction?sn?*/

uint32_t session_id;

uint32_t peer_session_id;

uint32_t session_flags;

uint32_t connections_nr;

struct?list_head sessions_list_entry;

struct?list_head connections_list;

HT_ENTRY(xio_session,?xio_key_int32)?sessions_htbl;

struct?xio_session_ops ses_ops;

struct?xio_transport_msg_validators_cls *validators_cls;

struct?xio_msg *setup_req;

struct?xio_observer observer;

enum?xio_session_type type;

volatile?enum?xio_session_state state;

struct?xio_new_session_rsp new_ses_rsp;

char *uri;

char **portals_array;

char **services_array;

void *user_context;

void *cb_user_context;

uint16_t user_context_len;

uint16_t uri_len;

uint16_t portals_array_len;

uint16_t services_array_len;

uint16_t last_opened_portal;

uint16_t last_opened_service;

uint16_t in_notify;

uint16_t pad[3];

uint32_t reject_reason;

struct?mutex????????????????????lock; ???/*?lock?open?connection?*/

spinlock_t??????????????????????connections_list_lock;

int disable_teardown;

struct?xio_connection *lead_connection;

struct?xio_connection *redir_connection;

};

xio_server?

服務端,xio_bind調用時返回,處理session未建立前的一些事件

struct?xio_server?{

struct?xio_conn *listener;

struct?xio_observer observer;

char *uri;

struct?xio_context *ctx;

struct?xio_session_ops ops;

uint32_t session_flags;

uint32_t pad;

void *cb_private_data;

};

xio_context

主線程循環的上下文,

struct?xio_context?{

void *ev_loop;

int cpuid;

int nodeid;

int polling_timeout;

unsigned?int flags;

uint64_t worker;

struct?xio_statistics stats;

struct?xio_context_params params;

struct?xio_schedwork *sched_work;

struct?list_head ctx_list;??/*?per?context?storage?*/?用來記錄該ctx上的xio_connection

?

/*?list?of?sessions?using?this?connection?*/

struct?xio_observable observable;

void *netlink_sock;

};

xio_msg

用戶需要發送的內容

struct?xio_msg?{

struct?xio_vmsg in;

struct?xio_vmsg out;

union?{

uint64_t sn; /*?unique?message?serial?number

?*?returned?by?the?library

?*/

struct?xio_msg *request;??/*?on?server?side?-?attached

????*?request

????*/

};

enum?xio_msg_type type;

int ????????more_in_batch; /*?more?messages?are?expected?*/

int status;

int flags;

enum?xio_receipt_result receipt_res;

uint64_t timestamp; /**<?submission?timestamp?????*/

int reserved;

void *user_context; /*?for?user?usage?-?not?sent?*/

struct?xio_msg_pdata pdata; /**<?accelio?private?data?????*/

struct?xio_msg *next;??????????/*?internal?use?*/

};

xio_task

打包msg,加入消息頭

struct?xio_task?{

struct?list_head tasks_list_entry;

void *dd_data;?//?傳輸協議擴展,記錄協議內所用到的數據,例如rdma_task

struct?xio_mbuf mbuf;?//?由各協議自己初始化,使用pool_init_item

struct?xio_task *sender_task;??/*?client?only?on?receiver?*/

struct?xio_msg *omsg; /*?pointer?from?user?*/

struct?xio_session *session;

struct?xio_conn *conn;

struct?xio_connection *connection;

?

void *pool;

release_task_fn release;

?

enum?xio_task_state state; /*?task?state?enum */

struct?kref kref;

uint64_t magic;

uint64_t stag; /*?session?unique?tag?*/

uint32_t is_control;

uint32_t tlv_type;

uint32_t ltid; /*?local?task?id */

uint32_t rtid; /*?remote?task?id */

uint32_t omsg_flags;

uint32_t pad;

struct?xio_msg imsg; /*?message?to?the?user?*/

?

};

Xio_rdma_task

struct?xio_rdma_task?{

struct?xio_rdma_transport *rdma_hndl;

enum?xio_ib_op_code ib_op;

u16 more_in_batch;

u16 sn;

u16 phantom_idx;

u16 pad[3];

?

//struct?xio_data_buffer?sdb;

/*?The?buffer?mapped?with?the?3?xio_work_req

?*?used?to?transfer?the?headers

?*/

void *buf;

unsigned?long size;

struct?xio_work_req txd;

struct?xio_work_req rxd;

struct?xio_work_req rdmad;

?

/*?User?(from?vmsg)?or?pool?buffer?used?for?*/

u32 read_num_sge;

u32 write_num_sge;

u32 recv_num_sge;

struct?xio_rdma_mem_desc read_sge;

struct?xio_rdma_mem_desc write_sge;

?

/*?What?this?side?got?from?the?peer?for?RDMA?R/W

?*?Currently?limitd?to?1

?*/

u32 req_write_num_sge;

u32 req_read_num_sge;

u32 req_recv_num_sge;

struct?xio_sge req_read_sge[XIO_MAX_IOV];?

struct?xio_sge req_write_sge[XIO_MAX_IOV];

/*?What?this?side?got?from?the?peer?for?SEND

?*/

struct?xio_sge req_recv_sge[XIO_MAX_IOV];

};

?

Req_*_sge說明,用來記錄對端或者自己這邊的使用的存放數據的地址

如果是要發送寫請求,這種場景發生在回應response時,在收到req時,就將rdma_task中的req_read_sge設置為對端的存放數據的內存地址,那么req_write_sge就為本地存放用戶寫入數據的內存地址。

如果為讀請求,之前對端發送過來的req中必然攜帶了對方存放數據的內存地址,req_write_sge,本地的用來存放讀取過來數據的地址為req_read_sge。這時候對端發送過來的req_read_sge是沒用的,會在解析頭部的時候重置為NULL

?

Read_sgewrite_seq是用來存放數據的內存控制描述符。真正的內存buf控制結構。Req_*_sge只是記錄了內存地址。

xio_tasks_pool

struct?xio_tasks_pool?{

/*?pool?of?tasks?*/

struct?xio_task **array;

/*?LIFO?*/

struct?list_head stack;

?

/*?max?number?of?elements?*/

int max;

int nr;

void *dd_data;?//?底層協議擴展,例如在rdma協議時,指向rdma_task_pool

void *pool_ops;?//?底層協議擴展,注冊創建(初始化),回收底層pool,以及初始化pool中每個成員等函數

};

xio_observer

事件觀察者,

struct?xio_observer?{

void *impl;

notify_fn_t notify;

};

xio_observable

被觀察者

struct?xio_observable?{

void *impl;

struct?list_head observers_list;

struct?xio_observer_node?*observer_node;?/*?for?one?observer?*/

};

xio_work_req

struct?xio_work_req?{

union?{

struct?ib_send_wr send_wr;

struct?ib_recv_wr recv_wr;

};

struct?ib_sge sge[XIO_MAX_IOV?+?1];

struct?scatterlist sgl[XIO_MAX_IOV?+?1];

int nents;?/*?number?of?sgl?entries?*/

int mapped;?/*?number?of?mapped?entries?*/

};

底層ib通訊時使用的參數的封裝,ib_sge用來設置send_wr或者recv_wrsge通過ib接口映射過的地址,sgl原始地址

rxd->recv_wr.sg_list =?rxd->sge;

sg_set_page(rxd->sgl,?virt_to_page(buf),?size,?offset_in_page(buf));

xd->sge[i].addr???=?ib_sg_dma_address(ib_dev,?&xd->sgl[i]);

?

xio_map_work_req

?

  • 機制

事件處理

Xio框架負責處理主線程的調度,在調用xio_context_create時,初始化主處理線程,并設置添加事件的回調接口add_event,線程啟動接口run,以及停止接口stop

struct?xio_loop_ops?{

void?*ev_loop;

int?(*run)(void?*loop);

void?(*stop)(void?*loop);

int?(*add_event)(void?*loop,?struct?xio_ev_data?*data);

};

?

struct?xio_context?*xio_context_create(unsigned?int?flags,

???????struct?xio_loop_ops?*loop_ops,

???????struct?task_struct?*worker,

???????int?polling_timeout,

???????int?cpu_hint);

?

底層協議層,如果有網絡事件產生,通過add_event接口把要處理的事件和處理函數加入到主處理線程(也可以通過定時器加入事件),add_event會將事件加入隊列中,并喚醒正在等待的主線程,主線程逐一調用事件處理函數

?

Rdma在初始化cq時,xio_cq_init會設置回調函數xio_cq_data_callback,當rdma事件產生時把事件處理函數xio_data_handler通過add_event加入主處理線程,xio_data_handler會依次檢查每個連接

void?xio_data_handler(void?*user_context)

{

struct?xio_cq?*tcq?=?(struct?xio_cq?*)?user_context;

struct?xio_rdma_transport?*rdma_hndl;

xio_cq_event_handler(tcq,?tcq->ctx->polling_timeout);

list_for_each_entry(rdma_hndl,?&tcq->trans_list,?trans_list_entry)?{

xio_rdma_idle_handler(rdma_hndl);

}

return;

}

觀察者

當被觀察者上發生事件時,會通知觀察者,觀察者如果對某一對象上面的一些事件感興趣,需要注冊自己到該對象上的觀察者列表中。例如:

xio_context_reg_observer:觀察者注冊自己到ctx中,觀察者會收到ctx事件的通知

xio_conn_reg_observer:xio_connection_set_conn函數會在執行時把session注冊到conn中,而client端,會在調用xio_conn_open時把session注冊到conn中(server端同樣會調用這個函數,但是傳遞的observer是空)

tcqtransprot也會關注context的事件

client端,在執行xio_conn_open時,把conn注冊到transport

server端,會在執行xio_conn_create,時注冊conntransport

并發和多線程

一個session只能有一個URI,每個session管理多個xio_connection,但是每個session中的多個connection不能由同一個context管理,多線程的使用模式是,由一個主線程創建session,每個工作線程創建context,并建立連接(Client端),同一個ctx中,URI相同的不同session可以在同一個工作線程中,此時這些sessionxio_connection公用同一個xio_conn,每個context中,一個地址只能對應一個xio_conn,同一個session中,每個xio_connection對應一個xio_conn

?

?

Xio_on_setup_rsp_recv里面的兩個分支代表兩個場景,portals_array為空,但是session->connections_nr?>?1的場景是:多個線程同時對一個session建立連接,這時候已經產生了多個xio_connection,但是只生成了一個xio_conn去發送建立session的信息,其他的xio_connectionsession建立之后再進行連接,另外一個場景,portals_array不為空,對端有多個網絡線程工作線程,一個監聽線程,但session建立之后,對端又指定了多個地址,這個時候就需要重新創建xio_connection,并建立連接。

?

內存管理

Accelio使用兩類buf,一種用于消息頭部或者小數據量,每個大小為4-8k,另外一類用于rdma的大數據io,第二類buf,可以由庫或者程序自己申請。

?

l?程序管理的buf

需要提前通過reg_mr接口注冊

l?庫管理的buf

要使用程序自己申請的內存,需要傳入mr信息,如果沒傳入,那么會把傳入的內存拷貝到庫維護的緩存中,多一次內存拷貝。

?

消息合并和批處理

消息的批量發送,可以發送消息時,遍歷待發送隊列,把send_wrnext指針連接起來,使用ibv_post_send接口批量發送消息,ibv_poll_cq接口,批量獲取收到的請求

?

Has_more標記,在幾個地方會使用,在底層有事件發生時,如果has_more標記為0,那么表示當前網絡空閑,可以把待發送的消息發送給對方,還有就是在rdma_send_reqrdma_send_rsp中,作用都是相同的。

?

On_msg接口中,會帶有has_more_batch參數,來標記是否還有其他消息需要處理,應用程序可以根據這個參數來做一些合并工作。

?

訪問接口

幾個重要標記

l?XIO_IB_RDMA_READ的使用場景,當請求方的數據大小,超過了設置的緩存大小時,請求方發送IBV_WR_SEND請求,并設置ib_op類型為XIO_IB_RDMA_READ。接收方在收到該請求后,發送IBV_WR_RDMA_READ請求給發送方,并設置ib_opXIO_IB_RDMA_READ,直接讀取遠處內存中的數據,不在處理recv消息。

?

l?XIO_IB_RDMA_WRITE的使用場景,當接收方處理完成發送回應時,如果需要回應的數據大小超過了設置的緩存大小時,接收方發送IB_WR_RDMA_WRITE請求,并設置ib_op類型為XIO_IB_RDMA_WRITE

?

l?XIO_IB_RECV的使用場景,接收方用來接收請求的task都設置該標記,有一種使用場景檢查了這個標記,當接收方收到了一個XIO_IB_RDMA_READ請求之后,發送請求去發送方讀取數據,這時會重新生成一個tmp_task,它的ib_opXIO_IB_RDMA_READ,與原始的task請求時不同的,這時候需要把接收方收到的原始task加入rdma_rd_list中,等待讀取數據完成。接收方在發送task請求時,根據這個標記位來進去判斷哪些讀請求時要發送給發送方的。哪些只是等待讀取完成。

?

l?XIO_IB_SEND的使用場景,發送方的task都設置該標記

?

另外需要說明的是,為了保證消息的到達順序,接收方在等待接收消息時,也就是rdma_rd_list非空時,是不處理收到的POST消息的,否則就可能出現后POST的消息,先處理,而之前的消息,還在讀取過程中。

?

回調函數

l?on_msg_send_complete

該函數由請求的接收方調用,當發送回應完成時調用該回調函數,這里說的發送完成是指ib層認為數據發送完畢,不涵蓋其他邏輯。

l?on_msg_delivered

該函數由請求的發送方調用,當發送方收到了接收方的回應時,調用該函數,接收方在收到請求時,會調用xio_connection_send_read_receipt,發送回應,one_way_msg必須設置該標記,request可選擇是否設置,通過檢查task狀態是否為XIO_TASK_STATE_DELIVERED確保只發送一次確認消息

xio_on_req_recv--?connection->ses_ops.on_msg--?xio_connection_send_read_receipt

接收方處理完成之后發送receipt

l?on_msg

在收到消息時

Request/reply

?

發送方

l?xio_send_request

?

檢查session狀態

檢查參數合法性

統計數據

獲取序列號xio_session_get_sn

把消息加入待發送隊列中,xio_msg_list_insert_tail

連接在線,則執行xio_connection_xmit

l?xio_connection_xmit

根據標記選擇要發送的隊列

遍歷隊列,逐一發送每個msg??xio_connection_send

發送失敗,重試或者返回錯誤

發送成功,把消息加入已發送隊列中

l?xio_connection_send

a)?發送的是response,并且消息的標記僅設置XIO_MSG_RSP_FLAG_FIRST轉下一步,否則轉d

b)?從primary_task_pool中申請一個xio_task

c)?從該response對應的請求msg中獲取請求task,并設置xio_tasksender_task成員,轉f

d)?發送的是request,轉下一步,否則轉h

e)?從primary_task_pool中申請一個xio_task

f)?設置序列號

g)?把新申請的xio_task加入pre_send_list中,轉i

h)?把原始task加入pre_send_list

i)?修改消息頭,設置序列號,task類型

j)?重置taskmbufxio_rdma_initial_pool_init_task生成task的時候從kmem_cache中分配一段內存,后面用該內存初始化mbuf

k)?把頭部寫入mbuf

l)?xio_conn_send

m)?xio_rdma_send

l?xio_rdma_send_req

如果已經發送的請求數超過了最大限制,返回EAGIN的錯誤

準備接受回應的緩沖區,xio_rdma_prep_req_in_data

準備發送請求的緩存沖,之前的緩沖區只填充了消息頭,沒有寫入msg內容,xio_rdma_prep_req_out_data

修改buf長度xio_mbuf_tlv_payload_len

最好要完整填充txd->send_wr

最后把task加入底層傳輸的待發送隊列中rdma_hndl->tx_ready_list

判斷待發送列大小,超過的警戒值,則批量發送xio_rdma_xmit

?

l?xio_rdma_prep_req_out_data

a)?判斷要發送的數據量是否超過了發送緩存的大小,沒有超過轉下一步,超過轉d

b)?xio_rdma_prep_req_header?寫入頭部到mbuf中,用戶寫入的數據非空轉下一步,否則轉h

c)?xio_rdma_write_send_data,用傳入的buf地址設置sge[1]起始的數組,或者沒有mr則把用戶數據拷貝到mbuf中,轉g

d)?超過緩存大小,rdma_task->ib_op?=?XIO_IB_RDMA_READ;由對方來主動讀取數據

e)?檢查用戶是否設置mr,設置轉下一步,沒有設置轉g

f)?逐一設置addrrdma_task->write_sge[i].addr?=?vmsg->data_iov[i].iov_base;轉h

g)?用戶沒有設置mr,需要逐一為write_sge分配內存,并拷貝數據

h)?返回

?

?

之前在初始化txd時,通過sg_set_page(rxd->sgl,?virt_to_page(buf),?size,?offset_in_page(buf)),把bufsgl做過映射,后面再執行xio_rdma_xmit時,會用sgl數組元素的addr來設置sge數組元素的addr,如果用戶寫入的數據直接設置了sge,那么sgl數組應該只有元素0存放消息頭部

?

?

l?xio_rdma_xmit

?

?

?

接收方

?

l?xio_handle_wc

?

xio_rdma_rx_handler

?

xio_rdma_on_recv_req

?

xio_rdma_notify_observer(xio_rdma_datapath.c

?

xio_on_new_message(xio_conn.c

?

xio_conn_on_recv_req(xio_conn.c

?

xio_observable_notify_any_observer

?

?

?

?

?

?

?

?

?

參數說明

?

Req.in.header或者req.in.iov[i].iov_base如果設置為NULL,那么當收到消息時,iov_base會設置為task->mbuf的地址,參看函數xio_rdma_on_recv_req

Send/recv

流程和上面的類似,除了沒有response,接收方收到消息后,會觸發一個回調,可選的確認通知

連接管理

狀態變遷

Session狀態變遷

XIO_SESSION_STATE_INIT?初始創建

XIO_SESSION_STATE_CONNECT?嘗試建立連接(調用xio_connect接口之后,立即設置)

XIO_SESSION_STATE_ONLINE?(該session上的所有connection都已經建立連接)

XIO_SESSION_STATE_ACCEPTED?(該session上的部分connection已經建立連接)

?

處于INIT狀態時,client調用xio_connect,會創建xio_connection,同時也會創建xio_conn

Xio_connect調用之后,狀態變為CONNECT,此時有另外的線程再調用xio_connect,只會創建xio_connection,不會創建xio_conn

?

enum?xio_transport_state?{

XIO_STATE_INIT,

XIO_STATE_CONNECTED,

XIO_STATE_DISCONNECTED,

XIO_STATE_CLOSED,

XIO_STATE_DESTROYED,

};

?

連接建立

?

?

?

l?Xio_conn建立

Client端:

1.xio_on_connection_established?--?xio_conn_initial_pool_setup

xio_conn_send_setup_req

2.xio_conn_on_recv_setup_rsp?--?xio_conn_primary_pool_setup

3.xio_on_client_conn_established

如果SESSION狀態不為ACCEPTEDONLINE轉到下面的session建立,否則轉xio_connection建立

Server端:

1xio_on_new_connection—xio_conn_create(listener創建新連接)--?xio_conn_initial_pool_setup

??xio_on_new_conn--xio_conn_accept(accept新創建的連接)

?

2.xio_conn_on_recv_setup_req--?xio_conn_primary_pool_setup

??xio_conn_write_setup_rsp

3.xio_conn_on_send_setup_rsp_comp

4.xio_on_server_conn_established

轉到下面的session建立

l?Xio_connection建立

Client端:

xio_connection_send_hello_req

Server端:

xio_on_new_message

xio_session_alloc_connection

xio_session_assign_conn(xio_conn.c

xio_on_connection_hello_req_recv(xio_session

xio_connection_send_hello_rsp(xio_session.c

xio_session_notify_new_connection(xio_session.c

l?Xio_session建立:

Client端:

xio_session_write_setup_req

xio_conn_on_recv_rsp(xio_conn.c

xio_on_setup_rsp_recv(xio_session.c

session->state?=?XIO_SESSION_STATE_ACCEPTED;或者XIO_SESSION_STATE_ONLINE

Server端:

xio_conn_on_recv_req(xio_conn.c

xio_on_new_message(xio_server.c

xio_session_init(xio_server.c

xio_session_alloc_connection(xio_server.c

xio_session_assign_conn(xio_server.c

xio_on_setup_req_recv(xio_session_server.c

on_new_session或者(xio_accept)(xio_session_server.c

xio_session_write_accept_rsp(XIO_SESSION_SETUP_RSP)

xio_on_setup_rsp_send_comp

xio_session_notify_new_connection(xio_session.c

疑問:

xio_conn_connect?中為什么要判斷XIO_CONN_STATE_CONNECTED這個狀態

?

同一個ctx中,不同sessionxio_connection公用同一個xio_conn,每個ctx中,一個地址只能對應一個xio_conn

連接銷毀

l?檢測掉線

a)?Transport層有事件產生,通知觀察者

b)?xio_on_connection_disconnected(xio_conn.c

c)?如果xio_conn沒有注冊任何觀察者,轉i,否則轉c

d)?xio_on_conn_event_client(xio_on_conn_event_server)(xio_session_client.c

e)?xio_on_conn_disconnected(xio_session.c

f)?還存在xio_connectionxio_conn關聯,xio_session_notify_connection_disconnected,狀態發生變換,通知session做相應處理,不存和xio_connection關聯的xio_connf

g)?xio_session_disconnect--?xio_session_notify_connection_teardown--?session->ses_ops.on_session_event?--xio_connection_destroy,執行xio_conn_close,轉hxio_connection_close,并判斷是否需要銷毀sessionxio_session_notify_teardown--?xio_session_destroy--?xio_session_post_teardown

h)?沒有xio_connectionxio_conn關聯(listener的情況),直接調用xio_conn_close關閉連接,計算引用數,不為1時轉o

i)?xio_conn_release

j)?transport->close

k)?xio_rdma_close

l)?xio_rdma_notify_observer

m)?xio_on_conn_closed

n)?kfree(conn)

o)?Session是客戶端,針對session中的其他xio_connection逐一調用xio_session_notify_connection_disconnected

l?主動關閉一

a)?xio_disconnect--?xio_send_fin_req?

xio_session_notify_connection_closed

b)?xio_on_fin_rsp_recv--?xio_connection_fin_put--?xio_fin_complete--?xio_session_disconnect--?xio_session_notify_connection_teardown,其他部分同上

l?主動關閉二

c)?xio_connection_destroy--?xio_connection_flush_tasks

xio_conn_close

xio_connection_close

l?銷毀session

a)?釋放資源,

說明,只釋放資源,因此需要等連接都已經關閉之后才能調用,

?

?

?

Rdma_hndl的釋放,主動關閉時,調用xio_conn_close最終會調用xio_rdma_close,這個函數會根據當前conn的狀態進行處理,如果是connected狀態則調用disconnect函數,其他情況,這里還有init狀態和disconnected狀態,則通過notify調用xio_on_conn_closed釋放資源最后修改狀態為destroy狀態,,

?

當斷線時,disconnected處理函數最終會調用xio_conn_release來釋放conn,會調用到函數xio_rdma_close,這時候就不需要再調用disconnect函數,直接釋放資源,

  • 資料

首頁:http://www.accelio.org/

代碼:https://github.com/accelio/

Accelio技術白皮書

?

聲明:本文所用圖片和部分內容來自accelio官網和白皮書。轉載本博文章須在文章明顯處注明作者及附上原文鏈接,便于讀者找到原文的更新版。

轉載于:https://www.cnblogs.com/starrybeam/p/3960697.html

總結

以上是生活随笔為你收集整理的Accelio 代码笔记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

91传媒免费在线观看 | 黄污在线观看 | 亚洲一区天堂 | 久久精品视频在线观看免费 | 久草在 | 久久国产精品成人免费浪潮 | 手机看片国产日韩 | 99视频在线免费 | 欧美亚洲一区二区在线 | 久久久99精品免费观看app | 午夜精品久久久99热福利 | 久久草网站 | 日韩视频专区 | 亚洲美女视频网 | 欧美美女激情18p | 免费观看成人av | 狠狠躁夜夜a产精品视频 | 久久天天躁狠狠躁亚洲综合公司 | 亚洲婷婷在线 | 亚洲精品乱码久久久久久蜜桃欧美 | 色播六月天| 日韩一区在线免费观看 | 国产九色视频在线观看 | 久久国产精品免费一区 | 天天拍天天干 | 91精品国自产在线 | 美国av片在线观看 | 国产成人精品一区二区三区福利 | 久久99久久99精品免视看婷婷 | 精品国产精品久久一区免费式 | 精品中文字幕视频 | 欧美午夜剧场 | 九九热有精品 | 午夜久久久久久久久久久 | 日韩一区二区久久 | 精品免费国产一区二区三区四区 | 亚洲成人高清在线 | 成人9ⅰ免费影视网站 | 在线免费黄色片 | 中文字幕精品视频 | 日韩精品久久久久久中文字幕8 | 中文字幕在线观看2018 | 爱情影院aqdy鲁丝片二区 | 成年人网站免费观看 | 日韩av一区二区三区四区 | 黄色特一级片 | av丁香花 | 国产黄色播放 | 最近更新中文字幕 | 黄色毛片一级片 | 奇米四色影狠狠爱7777 | 99精品国产免费久久 | 婷婷久月 | 欧美激情精品久久久久久 | 精品久久久久国产免费第一页 | 欧美色综合天天久久综合精品 | 国产一级淫片在线观看 | 高潮久久久久久 | 国产 日韩 欧美 自拍 | 亚洲91中文字幕无线码三区 | 97成人精品 | 天天鲁一鲁摸一摸爽一爽 | 黄色三级免费片 | 欧美精品一区二区在线播放 | 亚洲一区美女视频在线观看免费 | 久草在线最新视频 | 国产午夜精品一区二区三区四区 | 亚洲黄色大片 | 玖玖爱免费视频 | 91黄色影视 | 夜夜视频资源 | 日本一区二区三区免费看 | 丁香婷婷基地 | 国产精品嫩草69影院 | 国产91av视频在线观看 | 亚洲欧洲日韩在线观看 | 国产成人av网 | 麻花传媒mv免费观看 | 国产又粗又硬又长又爽的视频 | 在线观看v片| 欧美一级专区免费大片 | 一区二区三区日韩在线 | 日韩乱理 | 国产小视频国产精品 | 波多野结衣在线播放视频 | 81精品国产乱码久久久久久 | 亚洲激情中文 | 日韩精品中文字幕一区二区 | 久久躁日日躁aaaaxxxx | 久久久久久久久艹 | 久久艹久久| 国产高清无线码2021 | 欧美激情视频久久 | 国产黄大片在线观看 | 久久精久久精 | 亚洲精品在线观看av | 天堂网一区二区 | 伊人天天| 丁香花在线视频观看免费 | 在线免费观看视频一区 | 国产精品一区二区三区久久 | 日韩激情免费视频 | 一区二区三区免费在线观看 | 97热在线观看 | 91久久一区二区 | 亚洲精品在线播放视频 | 国产资源av| 日本三级在线观看中文字 | 麻豆传媒在线免费看 | 一本一道久久a久久精品 | 精品亚洲午夜久久久久91 | 国产一区网址 | 人人爽人人爽 | 欧美激情视频一区二区三区免费 | 丁香在线观看完整电影视频 | 伊人婷婷激情 | 成人免费网站在线观看 | 亚洲天堂在线观看完整版 | 伊人在线视频 | 蜜臀av性久久久久蜜臀av | 在线观看中文 | 国产精品一区二区在线免费观看 | 97免费公开视频 | 91精品免费在线 | 国产a视频免费观看 | 免费看av在线 | 五月婷婷一级片 | 免费日韩 精品中文字幕视频在线 | 免费三级a| 精品一二三四五区 | 欧美日在线 | 888av| 人人模人人爽 | 日韩一区二区免费在线观看 | 九九久久在线看 | 精品久久久久久亚洲 | 黄色毛片在线 | 成人av一区二区在线观看 | bbbbb女女女女女bbbbb国产 | 奇米四色影狠狠爱7777 | 婷婷精品在线视频 | 中文字幕在线免费观看视频 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 91成人精品在线 | 伊人热 | 欧美天天综合网 | 人人干,人人爽 | 精品国产大片 | 成人免费视频网站 | 国产在线一区观看 | 五月视频 | 午夜黄网| 国产在线国偷精品产拍 | 免费福利视频网站 | 97在线视频免费 | 五月婷综合 | www黄色| 一区二区免费不卡在线 | 欧美一区二区三区在线观看 | 大荫蒂欧美视频另类xxxx | 久久久精品国产免费观看同学 | 国内久久 | 欧美成人在线网站 | 中文字幕免费 | 99视频这里有精品 | 一级性av | 色综合久久中文综合久久牛 | 91精品综合| 欧美色图东方 | 国产精品一区二区三区99 | 久久艹精品 | 久久精品这里都是精品 | 婷婷久久一区 | 91精品啪在线观看国产81旧版 | 国产精品久久久久久电影 | 激情视频91 | 免费国产亚洲视频 | 亚洲电影黄色 | 欧美射射射 | 男女激情片在线观看 | 欧美色婷 | 91精品国产欧美一区二区 | 久久在现视频 | 欧美国产日韩一区二区三区 | 九九九九精品九九九九 | 免费久久久久久久 | 国产一区二区三区免费观看视频 | 欧美作爱视频 | 日韩激情小视频 | 中文字幕在线观看一区二区三区 | 一级黄色片网站 | 人人爱人人爽 | 美女视频是黄的免费观看 | 久久资源在线 | 国产精品久久一区二区无卡 | 天天激情在线 | 久久久国产精品亚洲一区 | 99国产一区二区三精品乱码 | 欧美久久久久久久 | 91麻豆精品国产91久久久更新时间 | 黄色大片av| 不卡的av在线播放 | 视频国产在线观看18 | www色av| av不卡中文字幕 | 婷婷av网站 | 欧美午夜寂寞影院 | 91尤物国产尤物福利在线播放 | 91最新国产| 91福利试看 | 91精品办公室少妇高潮对白 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 粉嫩av一区二区三区四区 | 国产在线精品一区 | 国产一区二区高清 | 国产一区在线免费观看视频 | 国产成年免费视频 | 激情深爱 | 久久99网| 国产精品综合在线观看 | av理论电影 | av网站免费线看精品 | 你操综合 | japanesefreesex中国少妇 | 欧美在线视频不卡 | 国产区高清在线 | 欧美成人精品三级在线观看播放 | 欧美精品免费在线观看 | 天天综合色网 | 国内精品久久久久影院日本资源 | 日本精品久久久久 | 精品国产伦一区二区三区免费 | 91av原创 | 波多野结衣动态图 | 婷婷在线资源 | 久久精品福利 | 玖草在线观看 | 久久丁香| 亚洲乱码久久久 | 97超级碰碰碰视频在线观看 | 99精品视频播放 | 在线观看日韩国产 | 成年人在线看视频 | avove黑丝 | 国产无区一区二区三麻豆 | 激情综合网色播五月 | 日韩精品中文字幕一区二区 | 激情视频在线高清看 | 最近2019年日本中文免费字幕 | 六月丁香久久 | 婷婷在线综合 | 成人毛片一区 | 最近免费观看的电影完整版 | 国产91影院 | www在线观看国产 | 成人四虎影院 | 91精品国产三级a在线观看 | 国产精品久久久久久久99 | 国产免费人成xvideos视频 | 香蕉视频导航 | 最新中文字幕在线播放 | 黄网站app在线观看免费视频 | 91麻豆精品久久久久久 | 9在线观看免费高清完整版在线观看明 | 丁香花在线观看免费完整版视频 | 国产精在线| 在线观看国产中文字幕 | 亚洲午夜精品电影 | 中文字幕在线影院 | 天天爱天天操天天爽 | 99在线视频网站 | 美女在线免费观看视频 | 国产精品午夜av | 久草视频免费在线播放 | 免费黄a | 夜色.com| 最新av在线播放 | 91av超碰| 久久精品美女 | 久久久久日本精品一区二区三区 | 国产青青青 | 久草在线视频网 | 精品国产一区二区三区蜜臀 | 国产女人18毛片水真多18精品 | 97超级碰| 国产精品12| 在线观看国产日韩欧美 | 精品视频免费在线 | 免费看v片| 日韩免费区 | 97视频在线观看免费 | 欧美专区日韩专区 | 岛国精品一区二区 | 日本不卡久久 | 日本在线视频一区二区三区 | 国产高清在线视频 | 久九视频| 国产高清专区 | 黄色成人影视 | 中文在线免费一区三区 | 在线观看播放av | 99热 精品在线 | 日韩欧美精品在线观看视频 | 97视频在线免费播放 | 国产亚洲一区二区在线观看 | 亚洲精品中文在线观看 | 狠狠干网址| 日韩色一区二区三区 | 日日干夜夜骑 | 黄色国产区 | 国产精品麻 | 久久伦理网 | 久草香蕉在线 | 国内成人精品2018免费看 | 亚洲国产资源 | 亚洲成人二区 | 国产精品福利av | 黄色国产区 | 视频一区二区在线观看 | 97偷拍视频 | 亚洲一区二区观看 | 黄色成人av在线 | 日韩精品 在线视频 | 成人黄色影片在线 | 久久综合中文字幕 | 久久精选| av免费高清观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 日韩久久午夜一级啪啪 | 日韩一区二区三 | 久久黄色网| 欧美精品在线观看一区 | 国产私拍在线 | 成人黄色电影在线观看 | 成人在线免费观看网站 | 91麻豆免费版 | 五月婷婷中文字幕 | 久久99国产精品二区护士 | 免费观看成人 | 亚洲精品视频在线播放 | av大片网址 | 国产精品99爱 | 国产精品免费久久久久久 | 日韩视频免费在线 | 波多野结衣在线播放视频 | 国产精品久久久久9999 | 在线91视频 | www.天天操.com | 成人黄色小视频 | 正在播放 久久 | 成人h动漫在线看 | 久久99精品久久久久久久久久久久 | 久久av免费观看 | 91大神精品视频在线观看 | 人人插人人做 | 中文字幕国产在线 | 2023av在线| 免费精品视频 | 免费看污片 | 天天狠狠干 | 亚洲视频 一区 | 曰本三级在线 | 日韩xxx视频 | 成年人av在线播放 | 亚洲成人网av| 黄色三级免费片 | 国产综合小视频 | 欧美精品一区二区免费 | 日韩精品电影在线播放 | 久久精品视频4 | 69热国产视频 | 九九99视频 | 亚洲黄色精品 | 精品视频不卡 | 精品国产aⅴ麻豆 | 国产精品久久久久一区二区三区 | 男女靠逼app | 97av视频| 亚洲精品国产综合99久久夜夜嗨 | 蜜桃麻豆www久久囤产精品 | 国产精品永久久久久久久www | 五月综合网 | 国产九九九视频 | 国产欧美综合视频 | 国产最顶级的黄色片在线免费观看 | 人人揉人人揉人人揉人人揉97 | 久久九九国产精品 | 欧美性色xo影院 | 九九热精 | 天天摸天天舔 | 不卡在线一区 | 久久爱www. | 91香蕉视频黄色 | 欧美污污视频 | 免费看短 | 在线91视频| 中文字幕永久 | 久久特级毛片 | 成人超碰97 | 国产精品久久久久久麻豆一区 | 奇米四色影狠狠爱7777 | 日韩特黄一级欧美毛片特黄 | 欧美久久成人 | 免费情缘 | 色黄久久久久久 | 免费观看性生活大片3 | 国产在线观看99 | 日日夜夜人人天天 | 亚洲片在线 | 欧美黄色高清 | 午夜久久福利 | 在线亚洲激情 | av三级在线免费观看 | 在线 日韩 av | 17婷婷久久www | 在线观看深夜福利 | 免费av大全 | 亚洲视频电影在线 | 日日摸日日添日日躁av | 国产一二三四在线视频 | 九七人人干| 久久久久免费视频 | 91视视频在线直接观看在线看网页在线看 | 在线国产中文字幕 | 国产精品久久久久久久久久尿 | 免费av的网站 | 天堂网av 在线 | 天天综合精品 | 天天色天天干天天色 | 手机在线观看国产精品 | 五月婷婷,六月丁香 | 亚洲国产成人av网 | 久久日韩精品 | 激情五月激情综合网 | 91精品久久久久久 | 国产久草在线观看 | 黄色资源在线 | 热久久电影 | 91精品毛片| 激情丁香 | av在线播放观看 | 最新av在线网址 | 免费日韩电影 | 亚洲蜜桃av| 久久国产精品二国产精品中国洋人 | av在线播放免费 | 在线观看爱爱视频 | 日韩av一区在线观看 | 丁香av在线 | 亚洲欧美成aⅴ人在线观看 四虎在线观看 | 免费看麻豆 | 黄色aa久久| 日韩色一区二区三区 | 奇米网777 | 精品一区二区在线播放 | 久久中文精品视频 | 日本一区二区三区视频在线播放 | 国产一级二级视频 | 天天操天天是 | 18pao国产成视频永久免费 | 91视频传媒 | 最近字幕在线观看第一季 | 五月婷婷六月综合 | 国产一区二区三区在线免费观看 | 久久精品第一页 | 91色在线观看视频 | 欧美日韩国产成人 | 中文字幕 第二区 | 极品嫩模被强到高潮呻吟91 | 日韩欧美精品一区 | 国产高清视频免费最新在线 | 久久99精品一区二区三区三区 | 黄色a在线 | 热久久这里只有精品 | 午夜精品一区二区三区四区 | 欧美色婷婷 | 婷婷.com| 日本免费久久高清视频 | 亚洲精品视频在线观看免费视频 | 欧美色图狠狠干 | 免费网站黄| 久草视频中文在线 | 亚洲国产小视频在线观看 | 四虎永久网站 | 久久国产精品一区二区三区四区 | 国产精品精品国产婷婷这里av | 91经典在线 | 深爱激情五月婷婷 | 美女黄久久 | 国产五月婷婷 | 国产一级视频在线观看 | 美女网站视频免费黄 | 97香蕉超级碰碰久久免费软件 | 狠狠操夜夜 | 亚洲精品一区二区久 | 精品视频资源站 | 在线视频在线观看 | 国产成本人视频在线观看 | 色妞色视频一区二区三区四区 | 日韩色中色 | 国产97色在线 | 91在线免费观看国产 | 激情综合色播五月 | 欧美成人中文字幕 | 在线观看中文字幕视频 | 午夜精品视频免费在线观看 | 久草在线最新 | 中文字幕 91 | 在线亚洲观看 | 欧美在线观看禁18 | 久久a v视频| 久久视| 五月天激情在线 | 久久精品牌麻豆国产大山 | 99久久99热这里只有精品 | 欧美日韩国产一区二区在线观看 | 99这里有精品 | 久操视频在线免费看 | 精品一区二区三区久久久 | 色婷婷国产精品一区在线观看 | 在线观看av免费 | 中文字幕日韩在线播放 | 久久综合给合久久狠狠色 | www.99av| 人人插人人搞 | 欧美性生活免费看 | 久草视频在线播放 | 久久最新视频 | 日日干av| 91在线免费看片 | 久久久高清免费视频 | 又黄又刺激 | 特级毛片在线免费观看 | 精品日韩在线一区 | 国产成免费视频 | 成人午夜性影院 | 五月导航| 在线99 | 久草视频在线资源站 | 久青草影院 | 狠狠干天天 | 亚洲视频六区 | 91精品国产亚洲 | 国产午夜影院 | av网址最新 | 视频在线91| 欧美日韩在线电影 | 日本高清xxxx | 一级黄色电影网站 | 人人插人人干 | 91av视频在线免费观看 | 日韩com| 成人在线视频免费观看 | 亚洲免费国产 | 午夜久久福利 | 99视频播放| 国产免费观看视频 | 夜夜嗨av色一区二区不卡 | 久久综合色天天久久综合图片 | 蜜臀av性久久久久蜜臀av | 久久五月婷婷丁香社区 | 操操操影院 | 国产激情电影综合在线看 | 激情久久网 | 美女网站在线播放 | 在线免费国产视频 | 亚洲精品视频免费看 | 免费a视频 | 国产字幕在线观看 | 成年人国产在线观看 | 亚洲精品中文在线资源 | 日韩美精品视频 | 91九色视频观看 | 国产一级在线 | 在线观看视频 | 日韩va欧美va亚洲va久久 | 国产精品亚州 | 综合色综合色 | 日韩丝袜在线观看 | 最近中文字幕完整视频高清1 | 欧美男男激情videos | 亚洲日本一区二区在线 | 午夜成人免费电影 | 五月婷婷在线观看 | 久久久久久久久福利 | 国产福利av | 人人射人人爱 | 天天操天天爽天天干 | 911久久 | 在线成人中文字幕 | 免费黄色在线网址 | 婷婷色综合网 | 国产成人精品午夜在线播放 | 午夜久久久久久久久久影院 | 国产福利资源 | 狠狠干成人综合网 | 69视频在线播放 | 福利视频午夜 | 啪啪av在线| 高清精品久久 | 五月婷婷在线视频观看 | av资源网在线播放 | 日日日操 | 91在线视频免费 | 伊人看片| 2021国产在线视频 | www.com.日本一级| 福利一区在线 | 丁香婷婷激情国产高清秒播 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 婷婷 综合 色 | 精品久久久久久久久久 | av免费观看高清 | 国产一区二区高清视频 | 国产日本亚洲高清 | 国产精品久久久久久久久久白浆 | 伊人天堂av | 伊人电影在线观看 | 久久精品视频免费 | 日日夜夜骑 | 人人澡人人添人人爽一区二区 | 激情五月婷婷综合网 | 中文字幕在线观看第三页 | 在线 欧美 日韩 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产尤物在线 | 色在线亚洲 | 欧美日韩午夜 | 黄网站色欧美视频 | av一级二级 | 免费观看av网站 | 国产成人精品国内自产拍免费看 | 操天天操| 国产精品久久久久久吹潮天美传媒 | 999久久久久久 | 亚洲综合国产精品 | 色五丁香| 亚洲国产精品人久久电影 | 亚州精品在线视频 | 草在线视频 | 三级av在线免费观看 | 欧美日本中文字幕 | 九九九九九九精品任你躁 | 成人免费在线观看电影 | 婷婷成人综合 | 久久国产精品久久国产精品 | 国产一级片在线播放 | 亚洲永久字幕 | 国产99一区二区 | 91av视频在线免费观看 | 国产在线观看免费观看 | 午夜的福利| 日韩成人精品一区二区三区 | 亚洲国产无 | 日本不卡一区二区三区在线观看 | 久久久精品欧美一区二区免费 | 日韩欧美一区二区三区在线观看 | 久久成人国产精品一区二区 | av一级黄| av丝袜在线| 欧美中文字幕久久 | 国产一区在线免费观看 | 免费特级黄色片 | 日韩精品高清不卡 | 国产手机av | 欧美日韩高清一区二区三区 | 日韩在线播放av | 久草干| 亚洲精品久久久久久中文传媒 | 欧美午夜剧场 | 最新中文字幕 | 成人欧美一区二区三区黑人麻豆 | 人人精品久久 | 成人香蕉视频 | 日本三级久久 | avove黑丝 | 日日干av| 久久久久婷 | 久久精品视频网 | 国产福利不卡视频 | 亚洲精品国精品久久99热一 | av观看免费在线 | 国产精品99久久久久久大便 | 亚洲欧美偷拍另类 | 久久午夜网| 91插插插免费视频 | 天天射网 | 天天草天天摸 | 一区二区三区动漫 | 欧美一级性生活片 | 成人免费精品 | 国产精品综合在线 | 欧美黑人性猛交 | 久久老司机精品视频 | 欧美国产一区二区 | 久久高清av| 国产高清免费在线观看 | 亚洲午夜久久久久久久久 | 久久精品免视看 | 亚洲黄色一级大片 | 91中文字幕 | 中文字幕乱码电影 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 国产一级免费在线观看 | 极品嫩模被强到高潮呻吟91 | 91桃色免费观看 | 国产999在线 | 激情欧美网 | 欧美一区在线观看视频 | 九九九九精品九九九九 | 激情网婷婷 | 国产精品福利午夜在线观看 | 操夜夜操 | 在线网址你懂得 | 欧美性精品| 在线精品在线 | 亚洲综合最新在线 | 午夜视频免费播放 | 国产一区二区三区黄 | 婷婷色伊人 | 久久99精品国产麻豆宅宅 | 成人久久久久久久久久 | 中文字幕 第二区 | 欧洲亚洲激情 | 最近中文国产在线视频 | 日韩国产精品久久久久久亚洲 | 国产在线观看你懂得 | 四虎免费av | 99re国产视频 | 国产免费高清视频 | 在线观看岛国片 | av免费试看 | 久久久久免费网 | 97久久精品午夜一区二区 | 91九色免费视频 | 欧美精品久久天天躁 | 99re国产| 激情中文字幕 | 精品美女在线视频 | 国产亚洲精品成人av久久影院 | 精品久久久久一区二区国产 | 在线观看中文字幕视频 | 毛片视频网址 | 91精品视频导航 | 伊人夜夜 | 欧美 日韩 性 | 精品自拍网 | 91在线视频免费播放 | 久久综合影音 | 婷婷色五 | 国产高清网站 | 日本在线视频一区二区三区 | 国产日韩欧美网站 | 超碰97久久| 日韩免费电影 | 激情导航 | 免费精品视频 | 一级片免费在线 | 色综合人人 | 国产精品自在欧美一区 | 国产精品久久久久婷婷二区次 | 97在线观看视频 | 久久夜av| 日韩欧美在线观看一区 | 久久久亚洲麻豆日韩精品一区三区 | 亚洲最大成人网4388xx | 国产91精品欧美 | 在线观看韩日电影免费 | 中文字幕999| 久久久综合精品 | 久久午夜色播影院免费高清 | 久草在线在线精品观看 | 91精品国自产拍天天拍 | 91精品国产综合久久福利 | 亚洲精品视频在线观看免费视频 | 国产黄色片免费 | 91精品伦理| 亚洲综合精品视频 | 手机av在线不卡 | 久久久久久久久毛片精品 | 五月天婷婷狠狠 | 99色视频| 午夜123| 黄色三级网站在线观看 | 午夜av影院 | 美女免费视频一区二区 | 91精品网站在线观看 | 日韩欧美视频一区二区三区 | 国产一区二区成人 | 伊人丁香 | 色无五月 | 亚洲欧美婷婷六月色综合 | 日韩理论片在线观看 | 五月婷婷中文网 | 97天堂| 国产精品免费观看国产网曝瓜 | 日本午夜在线亚洲.国产 | 成人av片免费观看app下载 | 99色在线观看视频 | 五月婷婷色丁香 | 一级片视频在线 | 手机看片久久 | 超碰97av在线 | a级国产乱理论片在线观看 伊人宗合网 | av.com在线| 一区二区三区免费在线观看视频 | 婷婷色九月| 天天综合网~永久入口 | 美女黄网站视频免费 | 国产一区在线免费观看视频 | 久久五月婷婷综合 | www黄免费 | 国产精品99精品久久免费 | 五月婷av| 在线国产一区二区 | 国产精品资源在线观看 | 国产一区二区在线视频观看 | 免费开视频 | 亚洲日本一区二区在线 | 国产一区免费在线 | 一区二区男女 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 狠狠操狠狠 | www.久草.com| 91视频黄色 | 亚洲国产成人在线 | 国产精品人人做人人爽人人添 | 久久男人中文字幕资源站 | www黄色大片 | 国产精品女人久久久久久 | 蜜臀久久99精品久久久酒店新书 | 久爱综合| 国产在线欧美日韩 | 日韩精品一区不卡 | 天堂网中文在线 | 99精品视频免费全部在线 | 亚洲人成人在线 | 精品视频国产一区 | 在线亚州 | 97超碰人 | 国产第一福利网 | 国产精品色婷婷视频 | bbb搡bbb爽爽爽 | 亚洲午夜精品一区二区三区电影院 | 人人爽人人舔 | 成人黄色在线观看视频 | 免费久久久久久久 | 国产尤物一区二区三区 | 久草视频在线看 | 亚洲精品视频第一页 | 色视频国产直接看 | 日韩久久久久久久久久久久 | 韩日视频在线 | 久久黄色小说 | 国产区av在线 | 亚洲综合欧美日韩狠狠色 | 不卡的av电影在线观看 | 色婷婷亚洲婷婷 | 在线观看视频你懂得 | 国产精品视频免费在线观看 | 天天躁天天躁天天躁婷 | 国产传媒中文字幕 | 又黄又爽又无遮挡的视频 | 1024手机在线看 | 日本黄色免费观看 | 欧美成人在线免费观看 | 色播99| 国产又粗又猛又色又黄网站 | 国产在线观看你懂的 | 超碰999| 天天色综合天天 | 久久理伦片| 91精品视频在线播放 | 黄色精品一区 | 亚洲精品视频在线免费 | 日韩免费一级a毛片在线播放一级 | 操操操夜夜操 | 日本精品视频一区 | 又黄又爽又无遮挡免费的网站 | 九九精品视频在线观看 | 日韩在线观看中文字幕 | 夜夜操天天操 | 国产九九精品视频 | 精品国产一区二 | 亚洲免费精品一区二区 | 精品日韩中文字幕 | av大片免费在线观看 | 亚洲激情精品 | 欧美精品午夜 | 日韩中文在线字幕 | 久草在线资源观看 | www.久久色| 国产小视频精品 | 三级黄色大片在线观看 | 亚洲第一中文字幕 | 丁香五月缴情综合网 | 欧美少妇影院 | 伊人久久婷婷 | 97爱爱爱 | 国产精品黄色在线观看 | 欧美一区二区三区四区夜夜大片 | 国产二区视频在线观看 | 国产又粗又猛又黄又爽 | 久久精品黄色 | 麻豆影视在线免费观看 | 久久久一本精品99久久精品66 | 91精品国产成| 二区在线播放 | 91在线视频免费观看 | 亚欧日韩成人h片 | 四虎影视精品永久在线观看 | 亚洲国产欧美一区二区三区丁香婷 | 99精品偷拍视频一区二区三区 | 免费色视频网站 | 国产视频一 | 免费大片黄在线 | 欧美一区二区视频97 | 国产色视频一区二区三区qq号 | 亚洲三级在线免费观看 | 91av原创| 久久久免费观看 | 在线91网 | 久久成 | 在线黄色毛片 | 日日夜夜人人天天 | 久久专区| 欧美孕妇视频 | 亚洲精品视频第一页 | 久久精品91视频 | 亚洲三级黄色 | 91热视频| 国产资源在线视频 | 奇人奇案qvod| 国产资源 | 成人一级免费视频 | 黄色国产成人 | 久久草精品 | 狠狠干免费 | 91精品久 | 欧美精品一区二区三区四区在线 | 天天爽天天碰狠狠添 | 在线成人免费电影 | 精品福利在线视频 | 天天天操天天天干 | 国产一二三在线视频 | 国产不卡av在线播放 | 国产一级黄色片免费看 | 亚洲韩国一区二区三区 | 最新99热| 国产亚洲精品久久久久久大师 | 美女天天操| 91精品啪 | 美女免费视频黄 | 亚洲精品国产精品国自产 | 亚洲天堂网视频 | 国产日韩欧美在线观看 | 狠狠色丁香久久婷婷综合_中 | 国产精品18久久久久久久网站 | 久久艹在线 | 午夜精品久久久久久久久久久久 | 婷婷日日 | 丁香九月激情 | 天干啦夜天干天干在线线 | 欧洲亚洲女同hd | 在线电影播放 | 亚洲欧美日韩精品久久奇米一区 | www色网站 | 99久久这里只有精品 | 国产美女精品视频免费观看 | 亚洲精品一区二区三区在线观看 | 98超碰在线观看 | 久久精品首页 | 91中文字幕在线播放 | 日韩精品一二三 | 丁香色综合 | 亚洲一级二级三级 | 丁香色婷 | 中文字幕免费高清av | 亚洲性xxxx | 天天干天天干天天干天天干天天干天天干 | 午夜精品久久久久久久99水蜜桃 | 国产成人99久久亚洲综合精品 | 亚洲成色777777在线观看影院 | 欧洲精品在线视频 | 在线观看www91 | 久久在线一区 | 成人av资源网站 | 久久精品xxx| 国产乱码精品一区二区三区介绍 | 天天综合成人网 | 国产日韩精品一区二区在线观看播放 | 国产精品久久久一区二区 | 黄色片免费在线 | 精品国产亚洲一区二区麻豆 | 久草青青在线观看 | 九九视频网 | 精品国产电影一区二区 | 日韩欧美区|