久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

nginx之內存池的實現

瀏覽:115日期:2023-03-13 15:37:22
目錄
  • 一、簡介
  • 二、數據結構
    • 2.1 內存池主要結構
    • 2.2 大內存鏈
    • 2.3 清理任務鏈
  • 三、內存結構圖
    • 3.1 邏輯
    • 3.2 實際
  • 四、實現
    • 4.1 創建內存池
    • 4.2 從內存池中分配空間
    • 4.3 注冊清理任務
    • 4.4 重置內存池
    • 4.5 銷毀內存池
    • 4.6 大內存釋放
    • 4.7 分配并清空數據
    • 4.8 回調文件清理

一、簡介

最新穩定版本nginx1.20.2。
為了能高效、快速的分配內存,以及減少內存碎片等,nginx實現了自己的內存池基礎組件。
主要實現文件ngx_palloc.h, ngx_palloc.c

二、數據結構

2.1 內存池主要結構

typedef struct {    u_char       *last;    u_char       *end;    ngx_pool_t   *next;    ngx_uint_t    failed;} ngx_pool_data_t;struct ngx_pool_s {    ngx_pool_data_t       d;    size_tmax;    ngx_pool_t   *current;    ngx_chain_t  *chain;    ngx_pool_large_t     *large;    ngx_pool_cleanup_t   *cleanup;    ngx_log_t    *log;};

內存池中第一個成員是一個結構體:
使用ngx_pool_data_t結構體來表示當前內存池信息。
last :下次開始分配的地址
end: 內存池的結束地址
next: 內存池鏈表,將多個內存池連接起來

max
整個內存池的最大大小

current
指向從當前內存池開始查找可用內存

chain
buffer使用的,這里不涉及

large
當需要的內存大于內存池最大大小時,需要通過malloc直接分配,然后形成鏈表進行組織

cleanup
清理工作的回調鏈表

log
日志句柄

2.2 大內存鏈

當需要分配的內存比內存池的最大大小都大時,內存池無法滿足分配,所以直接從系統中分配,然后構成一個鏈表進行維護。

typedef struct ngx_pool_large_s  ngx_pool_large_t;struct ngx_pool_large_s {    ngx_pool_large_t     *next;    void *alloc;};

2.3 清理任務鏈

有一個回調任務的鏈表,當內存池銷毀時,將依次遍歷此鏈表,逐一回調handler進行清理工作。

typedef void (*ngx_pool_cleanup_pt)(void *data);typedef struct ngx_pool_cleanup_s  ngx_pool_cleanup_t;struct ngx_pool_cleanup_s {    ngx_pool_cleanup_pt   handler;    void *data;    ngx_pool_cleanup_t   *next;};

三、內存結構圖

3.1 邏輯

3.2 實際

可以看出,很多節點都是從內存池中分配的,所以可以把精力都放在實際的數據上而不必在意其他細節上。

四、實現

4.1 創建內存池

/* * NGX_MAX_ALLOC_FROM_POOL should be (ngx_pagesize - 1), i.e. 4095 on x86. * On Windows NT it decreases a number of locked pages in a kernel. */#define NGX_MAX_ALLOC_FROM_POOL  (ngx_pagesize - 1)#define NGX_DEFAULT_POOL_SIZE    (16 * 1024)
ngx_pool_t *ngx_create_pool(size_t size, ngx_log_t *log){    ngx_pool_t  *p;    p = ngx_memalign(NGX_POOL_ALIGNMENT, size, log);    if (p == NULL) {return NULL;    }    p->d.last = (u_char *) p + sizeof(ngx_pool_t);    p->d.end = (u_char *) p + size;    p->d.next = NULL;    p->d.failed = 0;    size = size - sizeof(ngx_pool_t);    p->max = (size < NGX_MAX_ALLOC_FROM_POOL) ? size : NGX_MAX_ALLOC_FROM_POOL;    p->current = p;    p->chain = NULL;    p->large = NULL;    p->cleanup = NULL;    p->log = log;    return p;}

從代碼中可以看到,內存池最大不超過pagesize的大小

4.2 從內存池中分配空間

分配函數分了內存對齊和內存不對齊,但這只控制了內存池中分配空間,不控制大內存分配。

(1)分配小空間

  • 內存對齊 ngx_palloc
  • 內存不對齊 ngx_pnalloc
void *ngx_palloc(ngx_pool_t *pool, size_t size){#if !(NGX_DEBUG_PALLOC)    if (size <= pool->max) {return ngx_palloc_small(pool, size, 1);    }#endif    return ngx_palloc_large(pool, size);}

當需要分配的空間小于max時,將使用小內存分配方式(即從內存池中分配空間),而ngx_pnalloc和ngx_palloc相比只是調用ngx_palloc_small時的最后一個參數為0。

從pool->current指向的內存池開始遍歷,尋找滿足分配大小的空間,找到則返回首地址

static ngx_inline void *ngx_palloc_small(ngx_pool_t *pool, size_t size, ngx_uint_t align){    u_char      *m;    ngx_pool_t  *p;    p = pool->current;    do {m = p->d.last;if (align) {    m = ngx_align_ptr(m, NGX_ALIGNMENT);}if ((size_t) (p->d.end - m) >= size) {    p->d.last = m + size;    return m;}p = p->d.next;    } while (p);    return ngx_palloc_block(pool, size);}

當現有內存池中都無法滿足分配條件時,創建新的內存池

static void *ngx_palloc_block(ngx_pool_t *pool, size_t size){    u_char      *m;    size_t       psize;    ngx_pool_t  *p, *new;    psize = (size_t) (pool->d.end - (u_char *) pool);    m = ngx_memalign(NGX_POOL_ALIGNMENT, psize, pool->log);    if (m == NULL) {return NULL;    }    new = (ngx_pool_t *) m;    new->d.end = m + psize;    new->d.next = NULL;    new->d.failed = 0;    m += sizeof(ngx_pool_data_t);    m = ngx_align_ptr(m, NGX_ALIGNMENT);    new->d.last = m + size;    for (p = pool->current; p->d.next; p = p->d.next) {if (p->d.failed++ > 4) {    pool->current = p->d.next;}    }    p->d.next = new;    return m;}

其中,創建好新的內存池后,又做了一次遍歷,將failed計數加一,當大于4時,將跳過此內存池,下次就不從它開始查找。
即認為超過4次你都不能滿足分配,以后都不能滿足分配,不再用你了,減少遍歷個數,加快成功分配效率

(2)分配大空間

static void *ngx_palloc_large(ngx_pool_t *pool, size_t size){    void      *p;    ngx_uint_t n;    ngx_pool_large_t  *large;    p = ngx_alloc(size, pool->log);    if (p == NULL) {return NULL;    }    n = 0;    for (large = pool->large; large; large = large->next) {if (large->alloc == NULL) {    large->alloc = p;    return p;}if (n++ > 3) {    break;}    }    large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);    if (large == NULL) {ngx_free(p);return NULL;    }    large->alloc = p;    large->next = pool->large;    pool->large = large;    return p;}

可以看出,為了避免分配空間,遍歷large鏈查找可重用的節點,但是如果鏈表過大又可能太慢,所以只查找前三個,如果三個都沒有找到,則直接分配(而且節點也是從內存池中分配的,所以后續清理時,不需要管節點,只需要釋放申請的大內存本身)

內存對齊

void *ngx_pmemalign(ngx_pool_t *pool, size_t size, size_t alignment){    void      *p;    ngx_pool_large_t  *large;    p = ngx_memalign(alignment, size, pool->log);    if (p == NULL) {return NULL;    }    large = ngx_palloc_small(pool, sizeof(ngx_pool_large_t), 1);    if (large == NULL) {ngx_free(p);return NULL;    }    large->alloc = p;    large->next = pool->large;    pool->large = large;    return p;}

4.3 注冊清理任務

ngx_pool_cleanup_t *ngx_pool_cleanup_add(ngx_pool_t *p, size_t size){    ngx_pool_cleanup_t  *c;    c = ngx_palloc(p, sizeof(ngx_pool_cleanup_t));    if (c == NULL) {return NULL;    }    if (size) {c->data = ngx_palloc(p, size);if (c->data == NULL) {    return NULL;}    } else {c->data = NULL;    }    c->handler = NULL;    c->next = p->cleanup;    p->cleanup = c;    ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, p->log, 0, "add cleanup: %p", c);    return c;}

可以看出,這里只是分配了一個節點,并沒有設置handler以及data數據,所以還得看具體的調用方進行設置,因為這里返回了分配的節點。

比如在函數ngx_create_temp_file

ngx_int_tngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool,    ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access){    ...    cln = ngx_pool_cleanup_add(pool, sizeof(ngx_pool_cleanup_file_t));    if (cln == NULL) {return NGX_ERROR;    }       ...file->fd = ngx_open_tempfile(file->name.data, persistent, access);				...if (file->fd != NGX_INVALID_FILE) {    cln->handler = clean ? ngx_pool_delete_file : ngx_pool_cleanup_file;    clnf = cln->data;    clnf->fd = file->fd;    clnf->name = file->name.data;    clnf->log = pool->log;    return NGX_OK;}			...}

生成臨時文件,將fd以及文件名注冊到清理任務中,后續文件不使用了則不需要特殊處理,內存內存池釋放時將統一清理。

4.4 重置內存池

  • 釋放大內存
  • 重置內存中last
  • 重置failed計數
voidngx_reset_pool(ngx_pool_t *pool){    ngx_pool_t*p;    ngx_pool_large_t  *l;    for (l = pool->large; l; l = l->next) {if (l->alloc) {    ngx_free(l->alloc);}    }    for (p = pool; p; p = p->d.next) {p->d.last = (u_char *) p + sizeof(ngx_pool_t);p->d.failed = 0;    }    pool->current = pool;    pool->chain = NULL;    pool->large = NULL;}

這里有個現象:
在內存池中空間不足時,將調用ngx_palloc_block創建一個新的內存池,而last指向的是m += sizeof(ngx_pool_data_t);, 因此當前新分配的內存池將比第一個內存池可用大小多了(max,current,chain,large,cleanup,log)這幾個字段大小(可能沒有那么多,因為要對齊,可能對齊后就完全一樣了),而現在重置時,p->d.last = (u_char *) p + sizeof(ngx_pool_t);每個內存池可用大小又變成一樣的。

4.5 銷毀內存池

  • 回調清理任務
  • 釋放大內存
  • 釋放內存池本身
voidngx_destroy_pool(ngx_pool_t *pool){    ngx_pool_t  *p, *n;    ngx_pool_large_t    *l;    ngx_pool_cleanup_t  *c;    for (c = pool->cleanup; c; c = c->next) {if (c->handler) {    ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,   "run cleanup: %p", c);    c->handler(c->data);}    }    for (l = pool->large; l; l = l->next) {if (l->alloc) {    ngx_free(l->alloc);}    }    for (p = pool, n = pool->d.next; /* void */; p = n, n = n->d.next) {ngx_free(p);if (n == NULL) {    break;}    }}

4.6 大內存釋放

通過遍歷找到要釋放的節點,將內存釋放,并且將alloc設置成NULL,則有了節點重用的情況。

ngx_int_tngx_pfree(ngx_pool_t *pool, void *p){    ngx_pool_large_t  *l;    for (l = pool->large; l; l = l->next) {if (p == l->alloc) {    ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, pool->log, 0,   "free: %p", l->alloc);    ngx_free(l->alloc);    l->alloc = NULL;    return NGX_OK;}    }    return NGX_DECLINED;}

4.7 分配并清空數據

void *ngx_pcalloc(ngx_pool_t *pool, size_t size){    void *p;    p = ngx_palloc(pool, size);    if (p) {ngx_memzero(p, size);    }    return p;}

正常分配的空間中都是垃圾數據,所以當前函數在分配空間后,將分配的空間清零。

4.8 回調文件清理

(1) 手動關閉指定fd

遍歷清理任務,找到ngx_pool_cleanup_file的handler,如果是要關閉的fd,則回調

voidngx_pool_run_cleanup_file(ngx_pool_t *p, ngx_fd_t fd){    ngx_pool_cleanup_t       *c;    ngx_pool_cleanup_file_t  *cf;    for (c = p->cleanup; c; c = c->next) {if (c->handler == ngx_pool_cleanup_file) {    cf = c->data;    if (cf->fd == fd) {c->handler(cf);c->handler = NULL;return;    }}    }}

(2) 關閉fd

voidngx_pool_cleanup_file(void *data){    ngx_pool_cleanup_file_t  *c = data;    ngx_log_debug1(NGX_LOG_DEBUG_ALLOC, c->log, 0, "file cleanup: fd:%d",   c->fd);    if (ngx_close_file(c->fd) == NGX_FILE_ERROR) {ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,      ngx_close_file_n " \"%s\" failed", c->name);    }}

(3) 刪除文件并關閉fd

voidngx_pool_delete_file(void *data){    ngx_pool_cleanup_file_t  *c = data;    ngx_err_t  err;    ngx_log_debug2(NGX_LOG_DEBUG_ALLOC, c->log, 0, "file cleanup: fd:%d %s",   c->fd, c->name);    if (ngx_delete_file(c->name) == NGX_FILE_ERROR) {err = ngx_errno;if (err != NGX_ENOENT) {    ngx_log_error(NGX_LOG_CRIT, c->log, err,  ngx_delete_file_n " \"%s\" failed", c->name);}    }    if (ngx_close_file(c->fd) == NGX_FILE_ERROR) {ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno,      ngx_close_file_n " \"%s\" failed", c->name);    }}

到此這篇關于nginx之內存池的實現的文章就介紹到這了,更多相關nginx 內存池內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!

標簽: Nginx
相關文章:
主站蜘蛛池模板: 91av视频在线 | 日本三级网站在线观看 | 一区二区三区四区不卡视频 | 成人免费观看视频 | 四虎免费在线播放 | 日本一区二区不卡 | 久在线观看 | 久草久草久草 | 91视频免费观看 | 日韩色在线| 亚洲精品免费视频 | 一级a性色生活片久久毛片明星 | 国产黄色av | 久久久久国产一区二区三区四区 | 男女小网站 | 秋霞在线一区 | 国产一区免费 | 欧美自拍视频 | 国产成人久久777777 | 欧美精品欧美极品欧美激情 | 欧美亚洲国产一区二区三区 | 久久国产一区二区 | 成人一区视频 | 国产中文在线 | 亚洲男人的天堂在线观看 | 日本久久视频 | 日韩一及片 | 国产精品久久国产精品 | av高清在线免费观看 | 色综合天天综合网国产成人网 | 麻豆一区| 日韩国产 | 91精品国产一区二区 | 看av网站| 国产精品一区二区久久久久 | 免费福利视频一区二区三区 | 国产成人精品一区二区 | 中国女人黄色大片 | 日韩中文在线 | 久久久艹| 成人久久18免费观看 | 免费无遮挡www小视频 | 成人午夜免费视频 | 成人午夜在线观看 | 粉嫩在线 | 韩日一区 | 91精品国产综合久久婷婷香蕉 | 中文字幕一区二区三区四区 | 中文字幕欧美日韩 | 国产精品一区人伦免视频播放 | 久精品视频 | 亚洲精品一区二区三区蜜桃久 | 色一级| 亚洲一区在线免费观看 | 99精品欧美一区二区蜜桃免费 | 一级成人免费 | 欧美精品免费在线观看 | 日韩一区二区免费视频 | 精品成人免费一区二区在线播放 | 丝袜+亚洲+另类+欧美+变态 | 欧美男人的天堂 | 午夜影院a| 国产一区二区免费 | 国产精品人人做人人爽人人添 | 国产毛片在线 | 欧美日韩一区二区在线 | 日韩特黄一级欧美毛片特黄 | 综合久久99 | 亚洲视频免费观看 | av在线成人| 亚洲国产精品久久久久秋霞蜜臀 | 国产乱码精品一区二区三区忘忧草 | 日韩欧美中文在线 | 日韩中文一区二区三区 | 狠狠艹| 犬夜叉在线观看 | 亚洲美女网站 | 在线欧美日韩 | 欧美激情欧美激情在线五月 | 日韩2020狼一二三 | 激情久久av一区av二区av三区 | 中文字幕亚洲综合 | 日韩手机在线观看 | www国产亚洲精品 | 99精品国产一区二区 | 亚洲激情一区 | 国外成人在线视频网站 | 人人澡人人射 | 亚洲国产aⅴ成人精品无吗 国产精品永久在线观看 | 精品国产乱码久久久久久1区2区 | 日韩免费在线观看视频 | 国产一级电影网 | 99精品国产热久久91蜜凸 | 久久se精品一区精品二区 | 亚欧毛片| 91精品国产99 | 黄色大片网站在线观看 | 亚洲成人影院在线观看 | 午夜精品久久久久久久男人的天堂 | 亚洲精品国产剧情久久9191 | 国产在线成人 | 人人插 | 欧美另类综合 | 黄色网页大全 | 国产一区二区三区免费观看 | 夜夜艹 | 成人影院网站ww555久久精品 | 久久另类ts人妖一区二区 | 精品久久久久久久久久久久久久 | 国产精品无码久久久久 | 亚洲色图p| 成人av免费在线观看 | 免费一级片 | 日韩国产在线观看 | 男女视频在线 | 欧美不卡视频 | 亚洲怡红院在线观看 | 欧美亚洲二区 | 亚洲另类视频 | 日韩亚洲| 伊人网av| 国产自在现线2019 | 欧美黄色一区二区 | 日韩第一页 | 91在线看片 | 在线看免费观看日本 | 中文字幕在线一区 | 国产精品成人国产乱一区 | 成人激情视频在线播放 | 成视频年人免费看黄网站 | 最新黄色网页 | 久久久久久免费视频 | 久久精品在线 | 狠狠搞狠狠操 | 综合网激情五月 | 国产精品a久久久久 | 国产美女在线观看 | 激情视频网站 | 国产一区二区三区在线 | 国产极品视频在线观看 | 久草视频免费看 | 国产区在线| 欧美人成在线 | 精品国产一区二区三区性色av | 欧美在线国产 | 国产乱码精品一区二区三区爽爽爽 | 色网站视频| 中文字幕1区| 免费一级片 | 国产一区二区在线播放 | 亚洲美女精品视频 | 午夜亚洲一区 | 国产精品久久久久久久免费大片 | 国产91久久精品 | 欧美精品综合 | 国产乱码精品一区二区三区中文 | 成人在线视频一区 | 蜜月久综合久久综合国产 | 视频在线亚洲 | 国产精品夜夜春夜夜爽久久电影 | 亚洲精品久久久久久久久久久久久 | 久久精品99国产精品亚洲最刺激 | 日本精品免费 | 成人综合区| 亚洲视频在线观看视频 | 欧美国产精品一区 | 欧美一区二区三 | 日韩视频一区在线观看 | 久久精品久久久久电影 | 色在线免费视频 | 久久久综合网 | 91精品国产一区二区 | 欧美第一页 | 久久久999国产 | 国产男人的天堂 | 午夜私人影院在线观看 | 日韩不卡一区二区 | 日韩国产 | 毛片免费观看视频 | 中文字幕在线观看免费 | 日韩中文在线播放 | 高清国产视频 | 狠久久 | 亚洲精品综合在线 | 国产精品视频播放 | 亚洲tv久久爽久久爽 | 成人在线免费视频 | 中文字幕视频免费观看 | 久久精品视频网站 | 久久久久久久久久久久久九 | 玖玖色资源 | 欧美黄色网 | 三级视频在线观看 | 欧美五月| 一区二区三区视频免费在线观看 | 精品自拍视频 | 国产精品1区 | 精品无码久久久久国产 | 在线国产一区二区 | 青青草免费在线视频 | 日韩91| 欧美一区二区三区精品免费 | 日韩色在线| 久久另类 | 91伊人| 一级a毛片 | 精品国产乱码久久久久久久软件 | а天堂中文最新一区二区三区 | 精品久久久久久久久久久久 | 欧美日韩高清在线一区 | 午夜影院黄色 | 操操操影院 | 波多野结衣中文字幕在线视频 | 亚洲不卡视频 | 亚洲精美视频 | 欧美成在线视频 | 欧美成视频 | 日韩一二 | 日本免费在线 | 在线观看亚洲视频 | 久久精品国产一区二区三 | 在线 丝袜 欧美 日韩 制服 | 久草青青| 美女黄在线观看 | 成人精品视频 | 91社影院在线观看 | 深夜成人小视频 | 欧美成人精品一区 | 午夜男人天堂 | 国产精品日本一区二区在线播放 | 精品日韩一区二区 | 免费国产一区 | 亚洲国产精品久久久久久久 | 久久久精选 | 欧美亚洲国产日韩 | 午夜精品久久久久久久久久久久久 | 免费在线国产 | 91在线高清观看 | 色综久久 | 丁香婷婷在线观看 | 色婷婷亚洲国产女人的天堂 | av一区二区三区在线观看 | 在线观看你懂的网站 | 伊人av成人 | 我看午夜视频 | 日韩av免费看| 一级片av | 成人在线免费视频 | 九九热视频在线 | 在线观看日韩 | 91视频国内| 久久aⅴ乱码一区二区三区 91综合网 | 久久久久久久影院 | 久草视频在线首页 | a中文在线 | 99综合 | 日韩一区二区免费视频 | 午夜久久久久 | 国产亚洲精品久久久久久青梅 | 粉嫩国产精品一区二区在线观看 | 国产激情精品一区二区三区 | 久久三区 | 7878www免费看片| 国产精品18hdxxxⅹ在线 | 中文字幕黄色 | 一级片在线观看 | 国产精品亚洲精品 | bxbx成人精品一区二区三区 | 中文字幕日韩欧美一区二区三区 | av国产精品 | 日韩毛片在线视频 | 成人免费在线观看 | 国产福利在线观看视频 | 久久综合爱| 狠狠操综合网 | 国产一区二区视频在线 | 色婷网 | 99亚洲视频 | 亚洲精品视频免费 | 欧美经典一区 | 国产精品第52页 | 99在线免费视频 | 一区二区三区在线免费 | 亚洲国产视频一区 | 国产精品一区二区三区在线 | 亚洲精品国产精品国自产 | 国产欧美一区二区精品性色 | 求av网址 | 精品国产鲁一鲁一区二区在线观看 | 精品视频 免费 | 国产韩国精品一区二区三区 | 国产九九九 | 狠狠ri | 久久国产精品久久久久久电车 | 午夜精品91 | 日本亚洲精品成人欧美一区 | 成人午夜精品久久久久久久蜜臀 | 亚洲欧美精品一区 | 99爱免费观看国语 | 亚洲精品国产第一综合99久久 | 亚洲精品成人a8198a | 亚洲福利二区 | 国产精品夜夜 | 青青草视频免费观看 | 久久久网 | 亚洲精品乱码久久久久久蜜桃91 | 国产区在线 | 国产在线一区二区三区 | 成人免费影院 | 成人性生交大片免费看中文带字幕 | 成人av免费看 | 日韩高清一区 | 中国特级毛片 | 免费午夜电影 | 在线亚洲人成电影网站色www | 日韩一区二区在线免费观看 | 中文字幕亚洲欧美 | 亚洲小视频| 久久精品一 | 91福利电影在线观看 | 一区二区日本 | 香港三级日本三级a视频 | 色8久久 | 九九爱爱视频 | 国产免费av一区二区三区 | 欧美亚洲另类在线 | 国产精品久久久久久久久久久不卡 | 久久午夜视频 | 狠狠干av | 99久久婷婷国产综合精品 | 午夜影院免费 | 欧美 日韩 中文 | 亚洲系列 | 一区不卡| 羞羞视频在线网站观看 | 国内精品一区二区 | 亚洲电影免费 | 久久这里只有精品8 | 久久久国产一区二区三区四区小说 | 91中文在线 | 狠狠操综合网 | 日韩一及片 | 国产精品久久免费视频 | 亚洲激情久久 | 日韩精品一区二区三区中文字幕 | 伊人91 | 国产一区二区三区久久 | 国产精品久久久久久久久久久久久久久久 | 亚洲欧美日韩在线 | 久久精品国产一区二区三区不卡 | 久久久久久免费视频 | 亚洲综合无码一区二区 | 日本黄色三级网站 | 成人欧美一区二区 | 羞羞av在线 | 国产在线看片 | 超碰官网 | 九色在线播放 | 成人影院在线 | 在线观看国产www | 日本一区二区三区免费观看 | 95香蕉视频 | 欧美一区久久 | 97碰碰碰| 91视视频在线观看入口直接观看 | 1区2区3区视频 | 一区二区不卡 | 一区二区三区四区视频 | 日本aa级毛片免费观看 | 污视频在线观看免费 | 99视频在线免费观看 | 我和我的祖国电影在线观看免费版高清 | 黄色影片网址 | 欧美激情精品久久久久久变态 | 欧美一区二区三区视频 | 久久精品免费观看视频 | 欧美精品福利视频 | 中文字幕综合 | 日韩一级视频 | 久久美女视频 | 999久久久国产999久久久 | 国产精品a一区二区三区网址 | 欧美国产精品一区 | 亚洲一区二区三 | 国产依人 | 精品一区二区三区国产 | 久久成人免费观看 | 亚洲综合区 | 欧洲国产伦久久久久久久 | 欧美高清成人 | 国产精品久久久久久久久污网站 | 精品国内 | 亚洲黄色高清视频 | 日韩www视频 | 久久在线视频 | 国产精品美女久久久久久久久久久 | 丝袜+亚洲+另类+欧美+变态 | 日本做暖暖视频高清观看 | 男女羞羞视频免费看 | 日韩不卡一区二区三区 | av网站在线免费观看 | 91精品国产综合久久久久久 | 国产视频一二三区 | 蜜臀av在线播放一区二区三区 | 在线一级视频 | 精品国产一区二区三区四区 | 国产精品久久久久久久久久妞妞 | 一级一级国产片 | 91免费版在线观看 | 亚洲一区不卡在线 | 蜜臀网| 欧美成人综合视频 | 久久精品综合 | 欧美在线观看视频 | 99国产精品久久久久久久 | 亚洲九九| 爱爱网av| 亚洲 欧美 激情 另类 校园 | 色综合久久久 | 簧片av | 国产精品久久久久久久久久大牛 | 色黄网站| 国产青青草 | 亚洲人网站 | 国产乱视频网站 | 国产福利91精品一区二区 | 日韩久久一区二区 | 日韩超碰在线观看 | 久久男人的天堂 | 蜜桃臀一区二区三区 | 国内精品在线视频 | 日韩资源在线 | 有码在线 | 成人午夜sm精品久久久久久久 | 久久久久免费精品视频 | 国产精品免费av | 一 级 黄 色 片免费网站 | 91精品一区二区 | 秋霞电影院午夜伦 | 天天操夜夜操 | 精精国产xxxx视频在线 | 免费在线色| 日韩电影一区二区三区 | 99精品久久久 | 精品久久久久久国产 | 亚洲成人精品在线 | 精品亚洲成人 | 黄色大片视频网站 | 国产女爽123视频.cno | 日韩av在线一区二区三区 | 91在线看片 | 久久久久国产一区二区三区四区 | 欧美性猛交xxxx黑人猛交 | 91精品啪啪 | 欧美成人精品一区二区男人看 | baoyu123成人免费看视频 | 亚洲精品视频在线免费播放 | 午夜精品久久久 | 日韩欧美在线综合 | 天天干视频 | 91精品国产91久久久久久蜜臀 | 色综合天天天天做夜夜夜夜做 | 51ⅴ精品国产91久久久久久 | 中文字幕一区二区三区乱码在线 | 国产精品成人国产乱一区 | av网站在线免费观看 | 国产69精品99久久久久久宅男 | 99精品欧美一区二区蜜桃免费 | 久久天堂 | 国产一区精品视频 | 国产免费一区二区三区 | 久久国内免费视频 | 成人h动漫在线看 | 欧美精品入口蜜桃 | 亚洲一区二区三区精品视频 | 中文字幕一区在线观看 | 一区三区在线观看 | 天天狠狠操 | 91在线网址 | 91精品国产一区二区 | 玖玖综合网 | 久久久久久久久99精品 | 在线欧美视频 | 一区二区三区回区在观看免费视频 | 一级黄色片子看看 | 99久久精品国产一区二区三区 | 国产精品免费一区二区三区四区 | 在线国产一区 | 一区二区三区四区精品 | 久久99精品久久久久久久青青日本 | 国产精品久久久久毛片软件 | 国产91免费在线 | 91麻豆精品国产91久久久资源速度 | 国产97在线 | 亚洲 | 国产一区二区av | 欧美www.| 精品国产一区二区三区性色av | 久久久久久久国产精品 | 国产欧美在线一区二区 | 免费看的毛片 | 欧美日韩在线精品 | 91夜夜| 久在线| 亚洲免费网站在线观看 | 精品久久久久久国产三级 | 久久精品视频一区 | 91xxx在线观看 | 国产精品久久综合 | 久久国产精品99久久久久久老狼 | 91成人精品视频 | 欧美精品一区二区三区手机在线 | 91在线观看网站 | 日本美女一区二区 | 国产小视频在线观看 | 日韩欧美在线播放视频 | 日日爱视频 | 羞羞视频在线播放 | 国产精品视频免费观看 | 三级免费毛片 | 欧美福利网 | 亚洲欧美aⅴ | 国产欧美精品在线 | 在线中文字幕日韩 | 亚洲高清视频在线观看 | 国产精品视频一区二区三区 | 国产精品久久久久久妇女6080 | 成人欧美 | 精品久久久久久国产 | 日本精品视频在线观看 | 在线观看国产一级片 | 四影虎影www4hu23cmo | 最新国产视频 | 亚洲欧美国产一区二区三区 | 91社区福利 | 在线观看成人 | 国产乱码精品一区二区三区中文 | 国产乱码精品一品二品 | 伊人亚洲 | 视频1区2区 | 久久99精品视频 | 免费福利网站 | 国产精品一区二区三区在线播放 | 特级a做爰全过程片 | 国产最新网站 | 另类a v| 欧美第8页 | 欧美第8页 | 国产在线一区二区三区 | 亚洲精品久久久久久下一站 | 亚洲精品视频大全 | 国产欧美精品一区二区三区 | 亚洲免费在线观看 | 91网在线播放 | 日韩网站免费观看 | 日韩日韩 | 在线观看日韩 | 精品99免费 | 亚洲精品乱码 | a在线看 | www.99热 | 中文字幕亚洲欧美日韩在线不卡 | 久久国产视频精品 | 精品美女在线观看视频在线观看 | 成人在线不卡 | 国产一区二区精品丝袜 | 国产亚洲视频在线 | 免费国产网站 | 91中文字幕网 | 欧美一区二区在线观看 | 免费激情av| 国产成人在线免费观看 | 欧美成在线观看 | av一级久久 | 成人一区二区av | 99精品国产在热久久 | 亚洲国产精品久久 | 九九热欧美 | av在线免费观看网址 | 日韩久久影院 | 日韩欧美一区二区三区 | 综合精品久久久 | 欧美男人天堂网 | 精品国产一区二区三区久久久蜜月 | 国产女人免费看a级丨片 | 欧美一级免费在线观看 | 国产51人人成人人人人爽色哟哟 | 国产成人精品a视频一区www | 操操日| 成人午夜看片 | 国产精品乱码久久 | 国产成人精品999在线观看 | 99国产精品99久久久久久 | 精品国产乱码一区二区三区a | 伊人一二三区 | 国产高清一区二区三区 | 日韩日日夜夜 | 91精品国产福利在线观看 | 日韩成人在线网站 | 2020天天操| 国产高清不卡在线 | 久久久免费观看 | 蜜桃视频网站在线观看 | 成人久久18免费 | 久久久精品网站 | h在线观看| 一区久久| 亚洲www. | 国产成人小视频 | 欧洲免费毛片 | 久久99精品视频 | 国产精品国产成人国产三级 | 97在线观看| 精品视频一区二区三区 | 欧美精品一区二区久久 | 国产不卡在线观看 |