青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

論epoll的使用

   前幾天回答一個問題,是關(guān)于我們項(xiàng)目中使用的epoll模式的,因?yàn)橛洸淮笄辶耍杏X應(yīng)該使用的就是epoll的高速模式,也就是ET(edge-trigger)模式。這兩天閑暇的時(shí)候,打開代碼又看了一下,在epoll事件注冊時(shí)并未標(biāo)記ET模式,看來實(shí)際使用的是epoll默認(rèn)的LT(level-trigger )模式,為什么呢?使用LT意味著 只要 fd 處于 readable/writable 狀態(tài),每次 epoll_wait 時(shí)都會返回該 fd,系統(tǒng)開銷不說,自己處理時(shí)每次都要把這些fd輪詢一遍,如果fd很多的話,不管這些fd有沒有事件發(fā)生,epoll_wait 都會觸發(fā)這些fd的輪詢判斷。
   查閱了一些資料,才知道常用的事件處理庫很多都選擇了 LT 模式,包括大家熟知的libevent和boost::asio等,為什么選擇LT呢?那就不得不從ET的弊端的弊端說起。
   ET模式下,當(dāng)有事件發(fā)生時(shí),系統(tǒng)只會通知你一次,也就是調(diào)用epoll_wait 返回fd后,不管事件你處理與否,或者處理完全與否,再調(diào)用epoll_wait 時(shí),都不會再返回該fd,這樣programmer要自己保證在事件發(fā)生時(shí)及時(shí)有效的處理完。比如此時(shí)fd發(fā)生了EPOLLIN事件,在調(diào)用epoll_wait 后發(fā)現(xiàn)此事件,programmer要保證在本次輪詢中對此fd進(jìn)行了讀操作,并且還要循環(huán)調(diào)用recv操作,一直讀到recv的返回值小于請求值,或者遇到EAGAIN錯誤,不然下次輪詢時(shí),如果此fd沒有再次觸發(fā)事件,你就沒有機(jī)會知道這個fd需要你的處理。這樣無形中就增加了programmer的負(fù)擔(dān)和出錯的機(jī)會。
   ET模式的短處正是LT模式的長處,無論此fd是否有事件發(fā)生,或者有事件未處理完,每次epoll_wait 時(shí)總會得到此fd供你處理。顯而易見,OS在LT模式下維護(hù)的 ready list 的大小肯定比ET模式下長,而且你自己輪詢所有的fd時(shí)也要比ET下要多,這種消耗和ET模式下循環(huán)調(diào)用處理函數(shù)(如recv和send等),還要邏輯處理是否處理完畢,理論上應(yīng)該是LT更大一些,不過個人感覺應(yīng)該差別不會太大。但是LT模式下帶來的邏輯處理的方便性和不易出錯性,讓我們有理由把它作為首選。我想這可能也是為什么epoll后來在ET的基礎(chǔ)上又增加了LT,并且將其作為默認(rèn)模式的原因吧。
   peakflys 上述觀點(diǎn),歡迎 志同道合或志同道不合的朋友拍磚。
   PS:文中一味寫LT的好處,沒有說LT 極易引起的寫觸發(fā) 頻繁通知的問題,具體大家可以參考評論部分,再次感謝大家的指教。

posted on 2012-08-26 18:33 peakflys 閱讀(12839) 評論(18)  編輯 收藏 引用 所屬分類: 服務(wù)器

評論

# re: 論epoll的使用[未登錄] 2012-08-27 10:33 春秋十二月

LT模式下,只要空間可寫,則寫事件不斷被觸發(fā),CPU占用較高,如果不轉(zhuǎn)為ET模式,怎么解決這一問題?  回復(fù)  更多評論   

# re: 論epoll的使用[未登錄] 2012-08-27 16:36 春秋十二月

@peakflys
fd寫事件被觸發(fā),是因?yàn)閟ock底層緩沖區(qū)有大于某個閾值的空閑空間,和應(yīng)用層有無數(shù)據(jù)待寫沒有關(guān)系吧  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-28 10:51 peakflys

@春秋十二月
謝謝春秋仁兄的指教,我是這么認(rèn)為的。send buffer不滿時(shí)觸發(fā)的寫事件,應(yīng)該不至于引起CPU的占用過高(OS里本身也有很多納秒級的死循環(huán)),如果過高說明輪詢時(shí)的處理函數(shù)太耗CPU了,應(yīng)該是可以優(yōu)化的,另外輪詢時(shí)間也可以設(shè)置的長一些,當(dāng)然有些應(yīng)用需要這么準(zhǔn)確、及時(shí)。如果這樣的話,我認(rèn)為可以這樣改進(jìn):在一次網(wǎng)絡(luò)主循環(huán)里調(diào)用兩次epoll_wait,第一次是及時(shí)的(例如1ms)用于處理讀和錯誤事件,第二次是稍微長的(例如30~50ms,視情況定)用于處理讀、寫等事件。為了達(dá)到這種效果,我們可以 封裝兩種send方式,一種是使用epoll觸發(fā)的寫,另外一種是緊急的立即寫(當(dāng)然寫時(shí)可以調(diào)用poll等檢測一下是否可寫)。這樣效率應(yīng)該跟得上了,復(fù)雜度和出錯成都也沒有ET模式高。  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-29 17:07 唐詩

樓主沒有說到重點(diǎn),需要注意的是寫事件。
a. 對于et來說,應(yīng)用層向tcp緩沖區(qū)寫,有可能應(yīng)用層數(shù)據(jù)寫完了,但是tcp緩沖沒有寫到EAGAIN事件,那么此時(shí)需要在應(yīng)用層做個標(biāo)記,表明tcp緩沖區(qū)是可寫的,否則,由于et是只觸發(fā)一次,應(yīng)用層就再也不會被通知緩沖區(qū)可寫了。
b. 對于lt來說,應(yīng)用層確實(shí)會每次通知可寫事件,問題在于,如果應(yīng)用層沒數(shù)據(jù)需要往Tcp緩沖區(qū)寫的話,epoll還是會不停的通知你可寫,這時(shí)候需要把描述符移出epoll,避免多次無效的通知
http://www.cnblogs.com/egametang/archive/2012/07/30/2615808.html  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-29 17:08 唐詩

事實(shí)上et要比lt簡單的多  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-30 07:34 peakflys

謝謝唐詩的回復(fù)和指教,你指出的
a問題:在文中寫ET模式時(shí)已經(jīng)說了一部分,不過沒有說寫事件處理完之后,send buffer仍然可寫時(shí)怎么處理,因?yàn)檫@個本身就是我認(rèn)為的ET模式弊端之一,因?yàn)橥β闊┮餐σ壮鲥e。
b問題:當(dāng)時(shí)寫這篇短文時(shí)確實(shí)沒有特別考慮,不過在評論里面 春秋十二月仁兄指出了這個問題,唐詩兄給出的方法是每次把數(shù)據(jù)寫完之后把它移出epoll監(jiān)聽隊(duì)列,以后有新的寫數(shù)據(jù)時(shí)再加入寫事件到隊(duì)列,不過個人感覺這種方法不是很理想,除了自己寫著難受之外,因?yàn)閺?.6.10內(nèi)核之后 epoll內(nèi)部隊(duì)列的數(shù)據(jù)結(jié)構(gòu)變成了RB_TREE,游戲中寫數(shù)據(jù)很頻繁(尤其是大規(guī)模玩家在線時(shí)),這樣頻繁的調(diào)整RB_TREE,性能損耗應(yīng)該會不小。我在給春秋十二月仁兄的回復(fù)中給出了我的大致解決方法(參看上面評論),有什么不完整或者不對的地方,還請?zhí)圃娦种附袒蛘哙]件交流 peakflys@gmail.com
至于唐詩兄說的et要比lt簡單,這個可能是用et用的多了,很多細(xì)節(jié)錯誤已經(jīng)有了自己固定成熟的解決方案了才說出這樣的結(jié)論。ET如果保證每次觸發(fā)的事件都可以及時(shí)有效的處理完全(當(dāng)然 個人認(rèn)為不容易,有時(shí)候還要自己處理一些本該TCP處理的東西)ET模式還是可以作為首選的,否則會表現(xiàn)出通訊過程中應(yīng)用上層各種詭異的問題…… @唐詩  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-30 11:09 唐詩

正因?yàn)橛X得移出epoll隊(duì)列不好,但是不移除也不好,所以et是比較好的方式
代碼其實(shí)相當(dāng)簡單。

write_list_是應(yīng)用層緩沖區(qū),在epoll寫事件來的時(shí)候,應(yīng)用層緩沖區(qū)為空的話
設(shè)置socket 可寫。下次往應(yīng)用層緩沖區(qū)寫數(shù)據(jù)時(shí),檢查socket是否可寫,如果可寫則調(diào)用HandleWrite即可。緩沖區(qū)寫滿的時(shí)候設(shè)置socket不可寫就行了。

HandleWrite有兩個調(diào)用途徑,一個是寫事件觸發(fā),一個是應(yīng)用層觸發(fā)(socket有is_writable標(biāo)記)。

void HandleWrite()
while (true) {
// 應(yīng)用層緩沖區(qū)全部寫到TCP緩沖區(qū)了, 此時(shí)TCP緩沖區(qū)還是可寫
// et模式下不會再通知應(yīng)用層, 所以設(shè)置下socket writable狀態(tài)
// 下次應(yīng)用層數(shù)據(jù)來的時(shí)候檢查該狀態(tài)
if (write_list_.TotalSize() == 0) {
socket_.set_is_writable(true);
return;
}
int n = write(fd, write_list_.ReadPoint(), write_list_.readable_size());
const int error_no = errno;
if (n == -1) { // 寫異常
if (error_no == EINTR) {
continue;
}
// 緩沖區(qū)已寫滿, 需要等寫事件
if (error_no == EAGAIN) {
socket_.set_is_writable(false);
return;
} else {
HandleError(error_no);
return;
}
} else { // 寫正常
write_list_.ReadAdvance(n);
}
}  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-30 14:11 peakflys

恩,唐詩兄在socket上加入標(biāo)記位的辦法是可以很好解決ET模式的寫問題(上述代碼中唐詩兄應(yīng)該加上write之后 0==n 的情況,及時(shí)斷掉正常中斷的socket,而不是認(rèn)為寫正常,馬上調(diào)整發(fā)送緩存)
謝謝唐詩兄的指教,不過如果使用LT模式,唐詩兄會發(fā)現(xiàn)更簡單,呵呵。不知道你們一個網(wǎng)絡(luò)主線程掛載多少socket? @唐詩
  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-30 14:53 唐詩

@peakflys
單線程,壓力測試流量很大,3K都沒有問題,這時(shí)已經(jīng)受到帶寬限制了。流量小點(diǎn)10K都可以。我們設(shè)計(jì)只需要1K連接就行了,不夠可以加多個網(wǎng)關(guān)服,所以綽綽有余了  回復(fù)  更多評論   

# re: 論epoll的使用 2012-08-30 15:48 peakflys

恩,看來服務(wù)器性能還不錯,我們單網(wǎng)關(guān)設(shè)計(jì)是5K連接,不過使用的是線程池,單個線程掛512個socket,在加上網(wǎng)絡(luò)主循環(huán)有相應(yīng)優(yōu)化,所以LT模式影響不大,留給上層邏輯很大的擴(kuò)展空間 @唐詩
  回復(fù)  更多評論   

# re: 論epoll的使用[未登錄] 2012-08-31 01:04 春秋十二月

唐工的方法,和我實(shí)踐中基本是一樣的,但沒有加標(biāo)記,而是直接發(fā),如果碰到EAGAIN,則入隊(duì);如果發(fā)了一部分,則剩下的部分入隊(duì),留在下次寫事件中發(fā)。
簡言之,ET模式的讀寫,需要不斷讀或?qū)懼钡接龅紼AGAIN或出錯,也就是達(dá)到邊緣狀態(tài)(空間空或滿),如果后來空間非空或非滿(原因是網(wǎng)絡(luò)收到數(shù)據(jù)或?qū)懗鰯?shù)據(jù)),則讀或?qū)懯录?,就被觸發(fā)一次了。  回復(fù)  更多評論   

# re: 論epoll的使用 2012-09-01 15:49 zuhd

一直用的是LT,最大鏈接4K,并且沒有把 “沒有寫需求的socket”移出epoll,目前也沒有發(fā)現(xiàn)效率問題。在思考是輪詢的代價(jià)大還是移除的代價(jià)大?  回復(fù)  更多評論   

# re: 論epoll的使用 2012-09-02 11:36 peakflys

@zuhd
移出的代價(jià)必然大于輪詢的代價(jià),但是如果LT模式不做寫事件優(yōu)化的話,是在一定程度上影響效率的(影響的程度和掛載的socket數(shù)量有關(guān)),這種影響首先表現(xiàn)在輪詢的次數(shù)上,其次(也應(yīng)該說主要)是你的發(fā)送函數(shù)上調(diào)用上,因?yàn)椴还苡袥]有消息需要發(fā)送,只要send buffer不滿,寫事件都會觸發(fā),你所封裝的發(fā)送函數(shù)都會調(diào)用。  回復(fù)  更多評論   

# re: 論epoll的使用 2013-02-26 16:28 peakflys

經(jīng)過討論最終結(jié)論我認(rèn)為:ET模式在網(wǎng)絡(luò)層方面的效率肯定比LT要高。
主要表現(xiàn)在:
1、網(wǎng)絡(luò)IO比較小時(shí),send buffer表現(xiàn)為一直可寫,如果網(wǎng)絡(luò)主循環(huán)沒有延時(shí)操作的話,epoll_wait每次調(diào)用都會馬上有事件返回,導(dǎo)致不必要的CPU空耗,如果加入延時(shí)處理,對于一些實(shí)時(shí)性要求比較高的操作會受到影響,必須耗費(fèi)額外的邏輯處理。
2、在網(wǎng)絡(luò)IO比較大,尤其是連接數(shù)比較多的時(shí)候,每次epoll_wait調(diào)用時(shí)LT模式肯定比ET模式多,因?yàn)橹笮枰獙eady list 進(jìn)行遍歷處理,如果處理邏輯比較復(fù)雜,或者之前反饋的事件數(shù)LT比ET多很多的話,這時(shí)候效率差異就比較明顯了。

ET模式在網(wǎng)絡(luò)主循環(huán)處理的效率肯定比LT模式要高,至于高多少,視具體應(yīng)用和具體實(shí)現(xiàn)而定。當(dāng)然ET模式的代價(jià)就是增加了網(wǎng)絡(luò)層的邏輯處理復(fù)雜度,必須手動維護(hù)fd當(dāng)前的狀態(tài),在數(shù)據(jù)發(fā)送時(shí)也不能像LT模式那樣直接丟到fd應(yīng)用層的buffer中。當(dāng)然武器是好武器,關(guān)鍵還是看用的人,如果非要把寶劍當(dāng)菜刀使,那也只能沉默了……  回復(fù)  更多評論   

# re: 論epoll的使用 2013-03-01 22:09 Render Donkey

http://m.shnenglu.com/Leaf/archive/2013/02/25/198061.html
我在博客中,也發(fā)表了類似的討論。 博主給了此文鏈接,我順道看過來。
那我也說說我現(xiàn)在的看法。

首先,ET模式比LT模式在處理網(wǎng)絡(luò)IO的時(shí)候,ET效率高,這個大家已經(jīng)沒有太多爭論了。

而ET模式換來的代價(jià),就是需要循環(huán)讀取。 而寫事件的監(jiān)測,在我們項(xiàng)目中也是采用的標(biāo)記法。

我們是按幀發(fā)送網(wǎng)絡(luò)數(shù)據(jù)的。
當(dāng)發(fā)送數(shù)據(jù)時(shí)發(fā)現(xiàn)標(biāo)志可寫,就將寫緩沖區(qū)中的數(shù)據(jù)寫向SOCKET。
可寫標(biāo)記僅當(dāng)寫的時(shí)候發(fā)現(xiàn)不可寫時(shí),設(shè)置為false,而由epoll_wait觸發(fā)變?yōu)閠rue. 除此沒有其它改變這個標(biāo)志的地方。


我想不管是采用LT還是采用ET,都是有原因的。 或者是項(xiàng)目歷史原因,又或者是個人習(xí)慣不同。

很多人覺得自己用了LT也沒有發(fā)現(xiàn)問題。 這也是證明了LT是可行的。
不過話又說回來。 SELECT時(shí)代,不依然有高并發(fā)的服務(wù)器存在么。

所以,LT是可行的,這個肯定毋庸置疑。并且LT后于ET模式出現(xiàn),也是有其客觀存在的意義的。
但ET模式也有很多人在用,特別是一些追求效率到扣門兒的兄弟中更為多見。


總之,從各位大大的評論中,我理清了這兩個東西的關(guān)系。 也學(xué)會用正確的眼光來看待這兩個東西。謝謝大家。  回復(fù)  更多評論   

# re: 論epoll的使用 2014-08-06 17:25 呆賊

@peakflys
對于LT下空轉(zhuǎn)的問題,如果socket有寫事件,不要直接放入epoll中,先send,如果出現(xiàn)eagain再放到epoll中處理,這樣做您看如何?  回復(fù)  更多評論   

# re: 論epoll的使用[未登錄] 2014-08-06 18:53 peakflys

@呆賊
“如果socket有寫事件,不要直接放入epoll中”?
你的意思應(yīng)該是epoll不監(jiān)聽寫事件吧?
如果是這個意思的話,你說的可以解決LT模式下CPU空轉(zhuǎn)的問題,不過會引入新的問題,也就是頻繁地修改epoll事件(剛開始EPOLL_OUT不監(jiān)聽,后來send失敗后Add EPOLL_OUT事件,等監(jiān)聽發(fā)送完畢,還要再Del掉EPOLL_OUT事件).
  回復(fù)  更多評論   

<2015年1月>
28293031123
45678910
11121314151617
18192021222324
25262728293031
1234567

導(dǎo)航

統(tǒng)計(jì)

公告

人不淡定的時(shí)候,就愛表現(xiàn)出來,敲代碼如此,偶爾的靈感亦如此……

常用鏈接

留言簿(4)

隨筆分類

隨筆檔案

文章檔案

搜索

最新評論

閱讀排行榜

評論排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲伦伦在线| 在线亚洲观看| 欧美日本国产| 欧美久久电影| 国产精品草草| 国产欧美视频在线观看| 国产视频在线观看一区| 国产一区二区欧美| 亚洲成人在线视频网站| 99re66热这里只有精品3直播 | 欧美日韩不卡一区| 欧美日韩中文另类| 国产欧美日韩综合一区在线播放 | 久久夜色撩人精品| 另类av一区二区| 欧美日本韩国一区二区三区| 国产精品美女久久久免费| 国产精品久久久久久久久久久久久| 国产精品一区二区欧美| 精品白丝av| 亚洲视频在线播放| 老鸭窝毛片一区二区三区| 日韩亚洲成人av在线| 欧美一区二区日韩| 欧美日韩成人在线播放| 国产夜色精品一区二区av| 亚洲美女视频在线免费观看| 欧美一区二区三区视频免费播放| 欧美二区在线| 亚洲欧美www| 欧美日本一区二区高清播放视频| 国产一区二区三区网站| 亚洲综合三区| 91久久视频| 欧美在线啊v一区| 欧美色道久久88综合亚洲精品| 狠狠色综合网| 欧美一二三视频| av不卡在线观看| 欧美成人首页| 亚洲高清在线视频| 久久亚洲不卡| 欧美呦呦网站| 国产欧美日韩在线 | 国产一区二区三区四区| 亚洲欧美激情一区| 9l国产精品久久久久麻豆| 美女黄色成人网| 狠狠色伊人亚洲综合成人| 性欧美办公室18xxxxhd| 一区二区国产日产| 欧美日韩另类综合| 亚洲麻豆av| 亚洲黄色三级| 欧美暴力喷水在线| 最近看过的日韩成人| 麻豆精品传媒视频| 久久先锋影音av| 伊人久久久大香线蕉综合直播| 欧美专区在线| 欧美一级专区| 国产在线观看一区| 久久综合色天天久久综合图片| 欧美一区二区成人| 好吊日精品视频| 欧美va天堂va视频va在线| 久久人人97超碰人人澡爱香蕉| 黄色精品网站| 欧美成人一区在线| 欧美成人精品影院| 一区二区三区视频在线看| 亚洲视频在线观看网站| 亚洲靠逼com| 国产精品久久久久影院色老大| a4yy欧美一区二区三区| 亚洲日本成人在线观看| 欧美日韩一区二区三区免费| 亚洲一区免费视频| 午夜精品久久久99热福利| 精品成人在线视频| 欧美激情1区| 欧美日韩精品在线观看| 欧美一区二区黄色| 久久久久久穴| av成人免费观看| 亚洲伊人第一页| 国内外成人免费激情在线视频| 欧美大胆a视频| 欧美性事免费在线观看| 老司机67194精品线观看| 欧美国产欧美综合| 欧美一区二区视频在线观看| 久久综合久久综合这里只有精品 | 一区二区在线视频播放| 亚洲人成7777| 国产亚洲精品7777| 亚洲激情啪啪| 国产一区二区三区免费在线观看| 欧美va亚洲va国产综合| 国产精品久久久久久久久久免费看 | 欧美色综合天天久久综合精品| 欧美一区二区三区的| 久久综合国产精品| 亚洲欧美国产精品va在线观看| 久久综合一区二区| 欧美一区二区在线看| 欧美福利视频| 久久久一本精品99久久精品66| 欧美黄色小视频| 久久亚洲色图| 国产欧美日韩一级| 一区二区三区欧美激情| 亚洲日本一区二区三区| 久久精彩免费视频| 午夜亚洲激情| 国产精品地址| 亚洲国产视频一区二区| 狠狠色综合网| 午夜精品在线视频| 亚洲综合首页| 欧美日韩中文字幕精品| 欧美激情第10页| 1769国内精品视频在线播放| 午夜在线精品| 欧美一区二区三区视频免费播放 | 久久影音先锋| 欧美一级久久| 国产精品v欧美精品v日韩| 亚洲日本欧美| 一区二区免费在线观看| 欧美国产精品专区| 亚洲国产99| 亚洲精品日本| 欧美国产欧美亚洲国产日韩mv天天看完整 | 久久国产精品亚洲va麻豆| 欧美体内she精视频在线观看| 亚洲精品黄色| 亚洲视频欧美视频| 欧美日韩一级黄| 一本色道久久88综合亚洲精品ⅰ| av成人激情| 国产精品www.| 午夜精品福利电影| 久久香蕉国产线看观看av| 伊人春色精品| 欧美成人免费全部| 亚洲毛片在线看| 亚洲欧美成人综合| 国产一区二区高清不卡| 久久久不卡网国产精品一区| 免费成人美女女| 亚洲精品中文字幕有码专区| 欧美成人首页| 中文一区二区| 久久精品一区四区| 在线看不卡av| 欧美伦理在线观看| 亚洲在线日韩| 欧美ab在线视频| 亚洲天堂第二页| 一区二区亚洲欧洲国产日韩| 欧美激情一区二区久久久| 亚洲一区二区高清视频| 另类图片国产| 亚洲私人黄色宅男| 国产一区二区按摩在线观看| 美脚丝袜一区二区三区在线观看| 亚洲日韩欧美视频一区| 欧美亚洲在线观看| 亚洲日本电影在线| 国产农村妇女毛片精品久久莱园子| 久久久久九九视频| 一本色道久久综合亚洲91| 久久五月天婷婷| 亚洲一区二区三区午夜| 激情国产一区| 国产精品高潮粉嫩av| 久久综合久色欧美综合狠狠| 99re热这里只有精品免费视频| 久久久久久91香蕉国产| 一本色道久久加勒比88综合| 国产欧美日韩免费| 欧美巨乳在线观看| 久久九九国产| 欧美一区久久| 日韩午夜在线| 亚洲福利视频网站| 国产精品日韩欧美一区二区| 欧美电影免费观看高清| 性色一区二区| 一区二区三区偷拍| 欧美国产精品va在线观看| 欧美在线播放一区二区| 一区二区毛片| 亚洲精选在线| 亚洲国产日韩欧美| 加勒比av一区二区| 国产日韩精品久久| 国产精品综合色区在线观看| 欧美日韩性视频在线|