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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

JIT Code Generation代码生成

發(fā)布時間:2023/11/28 生活经验 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JIT Code Generation代码生成 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

JIT Code Generation代碼生成
一.表達式編譯
代碼生成(Code Generation)技術(shù)廣泛應(yīng)用于現(xiàn)代的數(shù)據(jù)系統(tǒng)中。代碼生成是將用戶輸入的表達式、查詢、存儲過程等現(xiàn)場編譯成二進制代碼再執(zhí)行,相比解釋執(zhí)行的方式,運行效率要高得多。尤其是對于計算密集型查詢、或頻繁重復(fù)使用的計算過程,運用代碼生成技術(shù)能達到數(shù)十倍的性能提升。
代碼生成
很多大數(shù)據(jù)產(chǎn)品都將代碼生成技術(shù)作為賣點,然而事實上往往談?wù)摰牟皇且患虑椤1热?#xff0c;之前就有人提問:Spark 1.x 就已經(jīng)有代碼生成技術(shù),為什么 Spark 2.0 又把代碼生成吹了一番?其中的原因在于,雖然都是代碼生成,但是各個產(chǎn)品生成代碼的粒度是不同的:
o 最簡單的,例如 Spark 1.4,使用代碼生成技術(shù)加速表達式計算;
o Spark 2.0 支持將同一個 Stage 的多個算子組合編譯成一段二進制;
o 支持將自定義函數(shù)、存儲過程等編譯成一段二進制,如 SQL Server。

本節(jié)主要講上面最簡單的表達式編譯。通過一個簡單的例子,初步了解代碼生成的流程。
解析執(zhí)行的缺陷
在講代碼生成前,回顧一下解釋執(zhí)行。以上面圖中的表達式 X×5+log(10)X×5+log?(10) 為例,計算過程是一個深度優(yōu)先搜索(DFS)的過程:
1) 調(diào)用根節(jié)點 + 的 visit() 函數(shù):分別調(diào)用左、右子節(jié)點的 visit() 再相加;
2) 調(diào)用乘法節(jié)點 * 的 visit() 函數(shù):分別調(diào)用左、右子節(jié)點的 visit() 再相乘;
3)調(diào)用變量節(jié)點 X 的 visit() 函數(shù):從環(huán)境中讀取 XX 的值以及類型。
(……略)最終,DFS 回到根節(jié)點,得到最終結(jié)果。
@Override public Object visitPlus(CalculatorParser.PlusContext ctx) {
Object left = visit(ctx.plusOrMinus());
Object right = visit(ctx.multOrDiv());
if (left instanceof Long && right instanceof Long) {
return (Long) left + (Long) right;
} else if (left instanceof Long && right instanceof Double) {
return (Long) left + (Double) right;
} else if (left instanceof Double && right instanceof Long) {
return (Double) left + (Long) right;
} else if (left instanceof Double && right instanceof Double) {
return (Double) left + (Double) right;
}
throw new IllegalArgumentException();
}
上述過程中有幾個顯而易見的性能問題:
o 涉及到大量的虛函數(shù)調(diào)用、即函數(shù)綁定的過程,如 visit() 函數(shù),虛函數(shù)調(diào)用是一個非確定性的跳轉(zhuǎn)指令, CPU 無法做預(yù)測分支,導(dǎo)致打斷 CPU 流水線;
o 在計算前不能確定類型,各個算子的實現(xiàn)中會出現(xiàn)很多動態(tài)類型判斷,例如,如果 + 左邊是 DECIMAL 類型,右邊是 DOUBLE,需要先把左邊轉(zhuǎn)換成 DOUBLE 再相加;
o 遞歸中的函數(shù)調(diào)用打斷了計算過程,不僅調(diào)用本身需要額外的指令,而且函數(shù)調(diào)用傳參是通過棧完成的,不能很好的利用寄存器(這一點在現(xiàn)代的編譯器和硬件體系中已經(jīng)有所緩解,但顯然比不上連續(xù)的計算指令)。
代碼生成基本過程
代碼生成執(zhí)行,顧名思義,最核心的部分是生成出需要的執(zhí)行代碼。
拜編譯器所賜,不需要寫難懂的匯編或字節(jié)碼。在 native 程序中,通常用 LLVM 的中間語言(IR)作為生成代碼的語言。JVM 上更簡單,因為 Java 編譯本身很快,利用運行在 JVM 上的輕量級編譯器 janino,可以直接生成 Java 代碼。
無論是 LLVM IR 還是 Java 都是靜態(tài)類型的語言,在生成的代碼中再去判斷類型,顯然不是個明智的選擇。通常的做法是在編譯之前就確定所有值的類型。幸運的是,表達式和 SQL 執(zhí)行調(diào)度,都可以事先做類型推導(dǎo)。
所以,代碼生成往往是個 2-pass 的過程:先做類型推導(dǎo),再做真正的代碼生成。第一步中,類型推導(dǎo)的同時,其實也是在檢查表達式是否合法,很多地方也稱之為驗證(Validate)。
在代碼生成完成后,調(diào)用編譯器編譯,得到了所需的函數(shù)(類),調(diào)用即可得到計算結(jié)果。如果函數(shù)包含參數(shù),如上面例子中的 X,每次計算可以傳入不同的參數(shù),編譯一次、計算多次。
以下的代碼實現(xiàn)都可以在 GitHub 項目 fuyufjh/calculator 找到。
驗證(Validate)
為了盡可能簡單,例子中僅涉及兩種類型:Long 和 Double

這一步中,將合法的表達式 AST 轉(zhuǎn)換成 Algebra Node,這是一個遞歸語法樹的過程,下面是一個例子(由于 Plus 接收 Long/Double 的任意類型組合,沒有做類型檢查):
@Override public AlgebraNode visitPlus(CalculatorParser.PlusContext ctx) {
return new PlusNode(visit(ctx.plusOrMinus()), visit(ctx.multOrDiv()));
}
AlgebraNode 接口定義如下:
public interface AlgebraNode {
DataType getType(); // Validate 和 CodeGen 都會用到
String generateCode(); // CodeGen 使用
List getInputs();
}
實現(xiàn)類大致與 AST 的中的節(jié)點相對應(yīng),如下圖。

對于加法,類型推導(dǎo)的過程很簡單——如果兩個操作數(shù)都是 Long,結(jié)果為 Long,否則為 Double。
@Override public DataType getType() {
if (dataType == null) {
dataType = inferTypeFromInputs();
}
return dataType;
}

private DataType inferTypeFromInputs() {
for (AlgebraNode input : getInputs()) {
if (input.getType() == DataType.DOUBLE) {
return DataType.DOUBLE;
}
}
return DataType.LONG;
}
生成代碼
依舊以加法為例,利用上面實現(xiàn)的 getType(),可以確定輸入、輸出的類型,生成出強類型的代碼:
@Override public String generateCode() {
if (getLeft().getType() == DataType.DOUBLE && getRight().getType() == DataType.DOUBLE) {
return “(” + getLeft().generateCode() + " + " + getRight().generateCode() + “)”;
} else if (getLeft().getType() == DataType.DOUBLE && getRight().getType() == DataType.LONG) {
return “(” + getLeft().generateCode() + " + (double)" + getRight().generateCode() + “)”;
} else if (getLeft().getType() == DataType.LONG && getRight().getType() == DataType.DOUBLE) {
return “((double)” + getLeft().generateCode() + " + " + getRight().generateCode() + “)”;
} else if (getLeft().getType() == DataType.LONG && getRight().getType() == DataType.LONG) {
return “(” + getLeft().generateCode() + " + " + getRight().generateCode() + “)”;
}
throw new IllegalStateException();
}
注意,目前代碼還是以 String 形式存在的,遞歸調(diào)用的過程中通過字符串拼接,一步步拼成完整的表達式函數(shù)。
以表達式 a + 2*3 - 2/x + log(x+1) 為例,最終生成的代碼如下:
(((double)(a + (2 * 3)) - ((double)2 / x)) + java.lang.Math.log((x + (double)1)))
其中,a、x 都是未知數(shù),但類型是已經(jīng)確定的,分別是 Long 型和 Double 型。
編譯器編譯
Janino 是一個流行的輕量級 Java 編譯器,與常用的 javac 相比,最大的優(yōu)勢是:可以在 JVM 上直接調(diào)用,直接在進程內(nèi)存中運行編譯,速度很快。
上述代碼僅僅是一個表達式、不是完整的 Java 代碼,但 janino 提供了方便的 API,能直接編譯表達式:
ExpressionEvaluator evaluator = new ExpressionEvaluator();
evaluator.setParameters(parameterNames, parameterTypes); // 輸入?yún)?shù)名及類型
evaluator.setExpressionType(rootNode.getType() == DataType.DOUBLE ? double.class : long.class); // 輸出類型
evaluator.cook(code); // 編譯代碼
實際上,也可以手工拼接出如下的類代碼,交給 janino 編譯,效果是完全相同的:
class MyGeneratedClass {
public double calculate(long a, double x) {
return (((double)(a + (2 * 3)) - ((double)2 / x)) + java.lang.Math.log((x + (double)1)));
}
}
最后,依次輸入所有參數(shù),即可調(diào)用剛剛編譯的函數(shù):
Object result = evaluator.evaluate(parameterValues);

References
o Apache Spark - GitHub
o Janino by janino-compiler
o fuyufjh/calculator: A simple calculator to demonstrate code gen technology
2. 查詢編譯執(zhí)行
代碼生成(Code Generation)技術(shù)廣泛應(yīng)用于現(xiàn)代的數(shù)據(jù)系統(tǒng)中。代碼生成是將用戶輸入的表達式、查詢、存儲過程等現(xiàn)場,編譯成二進制代碼再執(zhí)行,相比解釋執(zhí)行的方式,運行效率要高得多。
上一節(jié)表達式編譯中提到,雖然表面上都叫“代碼生成”,但是實際可以分出幾種粒度的實現(xiàn)方式,如表達式的代碼生成、查詢的代碼生成、存儲過程的代碼生成等。本節(jié)要講的是查詢級別的代碼生成,有時也稱作算子間(intra-operator)級別,這也是主流數(shù)據(jù)系統(tǒng)所用的編譯執(zhí)行方式。
主要參考了 HyPer 團隊發(fā)表在 VLDB’11 的文章 。
https://www.vldb.org/pvldb/vol4/p539-neumann.pdf
Volcano 經(jīng)典執(zhí)行模型
為什么要用編譯執(zhí)行?編譯執(zhí)行有哪幾種實現(xiàn)?
主角是查詢(Query)的編譯執(zhí)行,看看經(jīng)典 Volcano 模型是怎么做的。Volcano 模型十分簡單(這也是流行的主要原因):每個算子需要實現(xiàn)一個 next() 接口,意為返回下一個 Tuple。

Query 1 是一個很簡單的查詢,Project 會調(diào)用 Filter 的 next() 獲得數(shù)據(jù),Filter 的 next() 又會調(diào)用 TableScan 的 next(),TableScan 讀出表中的一行數(shù)據(jù)并返回。如此往復(fù),直到數(shù)據(jù)全部處理完。
Query 2 復(fù)雜一些,包含一個 HashJoin。HashJoin 的兩個子節(jié)點是不對稱的,一邊稱為 build-side,另一邊稱為 probe 或 stream-side。執(zhí)行時,必須等待 build-side 處理完全部數(shù)據(jù)、構(gòu)建出哈希表之后,才能運行 stream-side。
因為這個原因,執(zhí)行的過程分成了兩個階段(圖中淺灰色的背景)。在 Volcano 模型中,這也很容易實現(xiàn),試著寫一下 HashJoin 的偽代碼:
Row HashJoin::next() {
// Stage 1: Build Hash Table (HT)
if (HT is not built yet) // 注意:Build 僅在第一次調(diào)用 next() 時發(fā)生
while ((r = left.next()) != END)
ht.put(buildKey?, buildValue?)
// Stage 2: Probe tuples one by one
while (r = right.next())
if (HT contains r)
output joined row;
}
這個構(gòu)建哈希表的過程,稱為物化(Materialize),意味著 Tuple 不能繼續(xù)往上傳遞,暫存到某個 buffer 里。大多數(shù)時候,如執(zhí)行 Filter 等算子時,Tuple 一路傳上去,稱為 Pipeline。顯然物化的代價是比較高的,希望盡可能多的 Pipeline 避免物化。
Query 3 中的 Aggregate 算子,有類似的情況:在 Aggregate 返回第一條結(jié)果前,要把下面所有的數(shù)據(jù)都聚合完成才行。
稱 HashJoin、HashAgg 這種打斷 Pipeline 的算子為 Pipeline Breaker,使得執(zhí)行過程分成了不止一個階段。分成多個階段,因為 HashJoin 或 HashAgg 算法本身決定的,跟 Volcano 執(zhí)行模型無關(guān)。
Volcano 的性能問題
Volcano 執(zhí)行模型勝在簡單易懂,在那個硬盤速度跟不上 CPU 的時代,性能方面不需要考慮太多。然而隨著硬件的進步,IO 很多時候已經(jīng)不再是瓶頸,這時候人們就開始重新審視 Volcano 模型,產(chǎn)生了兩種改進思路:
1)將 Volcano 迭代模型和向量化模型結(jié)合,每次返回一批而不是一個 Tuple;
2)利用代碼生成技術(shù),消除迭代計算的性能損耗。
關(guān)于這兩個方案哪個更優(yōu),這里有一篇非常棒的論文做了很詳盡的實驗和分析。
http://www.vldb.org/pvldb/vol11/p2209-kersten.pdf
就像表達式解析執(zhí)行一樣,Volcano 其實是對算子樹的解釋執(zhí)行,同樣存在這些問題:
o 每產(chǎn)生一條結(jié)果就要做很多次虛函數(shù)調(diào)用,消耗了大量的 CPU 時間;
o 過多的函數(shù)調(diào)用導(dǎo)致不能很好的利用寄存器。
如果讓去把 Query 1 寫成代碼來執(zhí)行,會是什么樣的呢?答案非常短,短的令人驚訝:

右圖中用不同顏色標出了原來的算子,其中 condition = true 是一個表達式,按照上一節(jié)講解的方法就能生成出代碼,放到這邊 if 的條件上即可。
這兩個的執(zhí)行效率應(yīng)該很容易看出差距!生成出的代碼完全消除了虛函數(shù)調(diào)用,Tuple 幾乎一直在高速緩存甚至寄存器中。論文中也提到,隨便找個本科生手寫代碼,執(zhí)行性能都能甩迭代模型幾條街。
再看個更復(fù)雜的例子找找感覺,以下查詢(記作 Query 4)混合了 Join、Aggragate 甚至子查詢,這些算子是 Pipeline Breaker,執(zhí)行過程不可避免的分成幾個階段;除此以外,希望其它部分盡可能地做到 Pipeline 執(zhí)行。

這個例子有點長,相信對代碼生成已經(jīng)有了些直覺上的理解,這對理解掌握本節(jié)的內(nèi)容大有幫助。
圖中用不同顏色出了 HashJoin、HashAgg 三個算子各自的代碼,可以看出,各自的代碼邏輯被“分散”到了不止一處地方,甚至代碼中已經(jīng)很難分辨出各個算子,全都融合(Fusion)到一塊。
這就是想要的結(jié)果!如何自動生成出這樣的代碼呢?
很多人有個錯覺,以為數(shù)據(jù)庫查詢過程那么復(fù)雜,生成的代碼一定也很復(fù)雜吧。其實不然,查詢中復(fù)雜的部分,如 HashJoin 中哈希表實現(xiàn)、TableScan 讀取數(shù)據(jù)的實現(xiàn)等,這些不用生成很多代碼,僅僅只是調(diào)用現(xiàn)有的函數(shù)即可,如 LLVM IR 可以調(diào)用已存在的任何函數(shù)。
換個角度看,生成的代碼不過是把這些算子的實現(xiàn),更高效的方式串聯(lián):算子自身邏輯就像齒輪,生成的代碼好比連接齒輪的鏈條。
HyPer 的解決方案
代碼生成是個純粹的工程問題。工程問題沒有什么不能解的,難就難在找到其中最漂亮的解。如現(xiàn)在這個問題,為了編程的優(yōu)雅,希望造一個可擴展的框架:不論哪個算子,只要實現(xiàn)某種接口(就像 Volcano 模型要求實現(xiàn) next() 接口一樣),就能參與到代碼生成中。
模型要求所有算子實現(xiàn)以下兩個接口函數(shù):
o produce()
o consume(attributes, node)
代碼生成的過程總是從調(diào)用根節(jié)點的 produce() 開始;consume() 類似于一個回調(diào)函數(shù),當(dāng)下層的算子完成自己的使命之后,調(diào)用上層的 consume() 來消費剛剛產(chǎn)生的 tuples——注意這里并不是真的消費。
用例子來說明。下面是一個偽代碼版本的若干算子實現(xiàn)。produce() 和 consume() 返回的類型都是生成的代碼片段,這里為了方便演示直接用字符串表示。真實世界中當(dāng)然要更復(fù)雜一些。

表中紅色的字符串是生成的代碼,黑色的則是 code-gen 本身的代碼。回憶一下:代碼生成其實就是用各種手段拼出代碼(字符串)來,沒什么神秘的。

不滿足于偽代碼,可以嘗試閱讀 HyPer 的 論文(生成 LLVM IR),或者 Spark SQL 中的 CodeGenerator 實現(xiàn)(生成 Java 代碼),后者的代碼相對更容易理解些。
思考:這是唯一的解法嗎?
為什么是 produce/consume 呢?是否存在更簡單的解呢?這里給出推導(dǎo)思路。
首先,如果只有一個接口函數(shù),不妨叫 produce(),一定是不夠用的。為什么這么說呢?一個函數(shù)充其量只能做出類似 DFS 的效果:每個算子只會被經(jīng)過一次。這對 Query 1 還不是問題,但對于上文中復(fù)雜的 Query 4,HashJoin 的兩部分代碼離得那么遠,用 DFS 就很難做到了。
為了處理 HashJoin,該增加一個怎樣的函數(shù)呢?應(yīng)該類似于一個回調(diào),如 Query 4 中,當(dāng) DFS 進行到 ?a=b?a=b 時,希望通過一種某種方式告訴下面的 σx=7σx=7:當(dāng)拿到結(jié)果后,只要用傳給方法去消費這些 Tuples(生成消費這些 Tuples 的代碼)。這個方法,不妨叫做 consume()。
順理成章的,consume() 至少有個參數(shù)來傳遞需要消費的 tuples 有哪些列。另外,需要一個參數(shù)用來指示:調(diào)用者是左孩子還是右孩子?等價于傳 this。
論文提出的 produce/consume 模式可能是唯一正確的方法,即使存在其它算法,猜想也是大同小異。
References

  1. Efficiently Compiling Efficient Query Plans for Modern Hardware - VLDB’11
  2. SPARK-12795 - Whole stage codegen
  3. Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask - VLDB’18
    參考鏈接:
    https://ericfu.me/code-gen-of-expression/
    http://ericfu.me/code-gen-of-query/

總結(jié)

以上是生活随笔為你收集整理的JIT Code Generation代码生成的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

日韩电影久久 | 啪一啪在线 | 521色香蕉网站在线观看 | 色在线中文字幕 | 国内精品福利视频 | 久久深夜 | 久久国产精品小视频 | 伊人色综合久久天天 | 久久99久久99精品免观看粉嫩 | 日韩免费一区二区 | 成人蜜桃视频 | 久久久久高清毛片一级 | 亚洲天堂视频在线 | 黄色软件在线观看免费 | 99久热在线精品 | 免费看十八岁美女 | 免费看v片网站 | 欧美日韩一级久久久久久免费看 | 97视频成人| 99久久99热这里只有精品 | 人人爽人人爽人人 | 国产精品网红直播 | 国产美女精品视频免费观看 | 欧美日韩中文字幕在线视频 | 久久国产精品久久精品 | 粉嫩av一区二区三区入口 | 国产精品永久在线 | 中文字幕资源网 国产 | 精品婷婷| 色先锋av资源中文字幕 | 天天操天天射天天操 | 香蕉视频免费看 | 国产精品99页 | 99久久久久久久久 | av丝袜天堂 | 91av视频在线播放 | 欧美日韩不卡在线视频 | 国产精品免费人成网站 | 在线a亚洲视频播放在线观看 | 亚洲综合在线视频 | 中文字幕影片免费在线观看 | 美女av电影 | 国产美女视频一区 | 在线成人免费电影 | 日韩国产欧美在线视频 | 中文字幕一区三区 | 色婷婷色 | 免费视频91蜜桃 | 99视频在线免费观看 | 日韩欧美国产精品 | 成年人免费电影在线观看 | 久久久久免费 | 成人手机在线视频 | 精品在线一区二区三区 | 91麻豆精品国产91久久久无需广告 | 一区二区在线电影 | 综合久久婷婷 | 成年人在线观看视频免费 | 国产在线a视频 | 91成人观看| 女人久久久久 | 成人资源站 | 久久国产影院 | av看片在线| 视频国产在线观看18 | 国产亚洲视频在线观看 | 精品美女在线观看 | 国产精品日韩久久久久 | 国产精品久久99 | www.97视频 | 91激情在线视频 | 婷婷色综合 | 搡bbbb搡bbb视频 | 中文字幕高清在线 | 2024av| 在线看黄网站 | 国产中文字幕在线看 | 狠狠操电影网 | 国产亚洲久一区二区 | 精品视频资源站 | 国产区在线 | www久久久久 | 亚洲一区黄色 | 在线观看av黄色 | 国产亚洲成人精品 | 激情欧美一区二区三区免费看 | 69视频在线播放 | 婷婷四房综合激情五月 | av888.com| 久久视频国产精品免费视频在线 | 色伊人网 | 在线观看韩日电影免费 | 91经典在线 | 国产淫片免费看 | 中文字幕91 | 免费在线a| 国产精品99免视看9 国产精品毛片一区视频 | 色综合久久中文综合久久牛 | 久草热久草视频 | 超碰伊人网 | 色播激情五月 | 欧美一区二区三区在线看 | 手机av电影在线观看 | 亚洲精品乱码久久久久久9色 | 97中文字幕| 成人av午夜 | 日本91在线 | 九九九视频精品 | 精品二区视频 | 九九久久婷婷 | 亚洲精品国产精品国自产在线 | 久久这里只有精品首页 | 首页中文字幕 | 五月婷婷在线观看 | 亚洲一级电影 | 国产亚洲视频在线观看 | 美女福利视频在线 | 成人午夜久久 | 国产亚洲精品久久久久久电影 | 欧美成人按摩 | 日韩精选在线 | 美女视频免费精品 | 一级a性色生活片久久毛片波多野 | 国产高清av在线播放 | 中文字幕亚洲高清 | 一本一本久久a久久精品综合 | 久久国产一二区 | 男女激情麻豆 | 综合久久精品 | 日韩精品一区二区免费 | 精品国产一区二区三区久久久蜜臀 | av一区二区三区在线播放 | 黄色国产高清 | 玖玖国产精品视频 | 成人在线视频论坛 | 黄色成人影院 | 亚洲精品午夜视频 | 丁香六月伊人 | 久久久黄色 | 精品国产观看 | 欧洲av在线| 精品久久久久久综合 | 黄色免费在线视频 | 97久久久免费福利网址 | 国产成人在线一区 | 欧美一进一出抽搐大尺度视频 | 日韩视频精品在线 | 91亚洲永久精品 | 视频一区二区视频 | 欧美日韩一区二区视频在线观看 | 日韩精品免费一区二区三区 | 午夜精品福利一区二区 | 久久综合九色 | 99久久99久久精品国产片果冰 | 性日韩欧美在线视频 | 久久久久久久久久毛片 | 最近中文字幕大全中文字幕免费 | 日韩精品一区在线观看 | 天天插天天干天天操 | 久久免费影院 | 激情久久一区二区三区 | 91在线观看视频网站 | 免费影视大全推荐 | 最近的中文字幕大全免费版 | 国精产品一二三线999 | 啪啪肉肉污av国网站 | 日本在线观看黄色 | 黄色国产在线观看 | 97超碰人人看 | 国产精品视频地址 | 激情久久久久 | 日韩欧美视频免费看 | 国产精品久久久亚洲 | 激情婷婷六月 | av福利资源| 国产精品国产三级国产不产一地 | 亚洲成色777777在线观看影院 | 国产高清av免费在线观看 | 国产午夜精品一区二区三区欧美 | 日韩欧美第二页 | 97在线观看视频 | av福利在线免费观看 | 精品国产99国产精品 | 一区二区在线影院 | 日韩理论片在线观看 | 麻豆国产视频 | 久久热亚洲 | 黄色片免费在线 | 欧美国产一区在线 | 亚洲欧洲av | 亚洲狠狠丁香婷婷综合久久久 | 少妇18xxxx性xxxx片 | 久草久草久草久草 | 亚洲色五月 | 99精品国产一区二区 | 国产一二区免费视频 | 三级性生活视频 | 天天操夜夜逼 | 国产精品美女久久久久久久 | 成人9ⅰ免费影视网站 | 18久久久 | 日本狠狠色 | 国产精品99久久免费观看 | 国产精品色视频 | 欧美精品一区二区蜜臀亚洲 | 欧美色一色 | 美女免费视频观看网站 | 国产美女视频免费观看的网站 | 少妇搡bbb | 亚洲精品黄色片 | 国产精品国产三级国产aⅴ9色 | 伊人亚洲综合网 | 色亚洲激情 | 午夜av免费 | 色综合天天做天天爱 | 成人资源站| 天天射天天舔天天干 | 少妇资源站 | 中文字幕在线观看av | 成年人免费观看在线视频 | 久久久福利视频 | 丝袜一区在线 | 超碰999 | 99精品在线视频观看 | 韩国av三级 | 日本大片免费观看在线 | 最新av免费在线 | 免费在线播放视频 | 精品国模一区二区 | 亚洲最大激情中文字幕 | 99精品在线 | 精品在线观看国产 | 91精品国产综合久久久久久久 | 999久久精品 | 国产精品成人一区二区三区吃奶 | 午夜精品一区二区三区在线观看 | 亚洲精品无 | 九九精品在线观看 | 久久久精品国产一区二区三区 | 亚洲精品在线一区二区三区 | 在线黄色观看 | 中文字幕一区二区三区乱码不卡 | 91片黄在线观看动漫 | 青春草免费视频 | 国产亚洲综合精品 | 国产精品久久久777 成人手机在线视频 | 国产高清视频在线免费观看 | 91九色老 | 日韩免费视频观看 | 四虎成人免费影院 | 在线导航福利 | 精品久久片| 在线观看黄色 | 国产精品成人免费 | 奇米网8888| 成人毛片在线观看 | 日韩欧美专区 | 亚洲精品免费观看视频 | 久99久在线视频 | 色悠悠久久综合 | 欧美在线一二 | 97超碰.com| 国产网红在线 | www最近高清中文国语在线观看 | 日韩欧美在线观看一区二区三区 | 欧美日韩中文在线 | 成人xxxx | 亚洲伦理一区 | 91福利在线导航 | 97精品视频在线播放 | 国产午夜三级一区二区三桃花影视 | 久久免费试看 | 久久综合影音 | 在线观看免费视频你懂的 | 日韩一级黄色大片 | 精品自拍sae8—视频 | 国产视频一区二区在线 | 91最新在线观看 | 亚洲精品综合欧美二区变态 | 伊人影院在线观看 | 一本一本久久a久久精品牛牛影视 | 波多野结衣一区三区 | 91麻豆精品国产自产在线游戏 | 国产第一福利 | 婷婷成人亚洲综合国产xv88 | 日本最新高清不卡中文字幕 | 国产亚州av| 久久精品一二三区白丝高潮 | 国产精品videoxxxx | 五月天六月婷婷 | 人人插人人舔 | 日韩国产在线观看 | 国产成人精品一区二区三区在线观看 | 亚洲理论在线观看电影 | 亚洲国产日韩精品 | 欧美日韩国产免费视频 | 国产高清在线a视频大全 | 久久特级毛片 | 伊人欧美 | 久草在线资源视频 | 亚洲区视频在线观看 | 97av影院 | 亚洲国产精品va在线看 | 日本中文字幕在线观看 | 久久这里有精品 | 在线日韩亚洲 | 国产一级精品在线观看 | 日韩免费电影网 | 日韩激情影院 | 成年人视频免费在线播放 | 久久久久久久久久伊人 | 91你懂的 | 亚洲婷婷综合色高清在线 | 中文字幕av电影下载 | 国产视频二区三区 | 一区精品在线 | 99色网站| 日韩美女免费线视频 | 国产精品久久久久久妇 | 成人av在线影院 | 久久天堂影院 | 亚州国产精品久久久 | 色老板在线视频 | 一区二区三区四区影院 | 久久久久久久久久网站 | 97超在线视频 | 99人久久精品视频最新地址 | 天天操天天玩 | 亚洲精品播放 | 欧美精品在线观看一区 | 在线观看一区二区视频 | 麻豆一区在线观看 | 久草| 国产精品一区二区三区在线免费观看 | 国产精品涩涩屋www在线观看 | 亚洲欧美国产精品va在线观看 | 国产成人精品久久二区二区 | 日韩精品不卡在线 | 久久99久国产精品黄毛片入口 | 欧美大香线蕉线伊人久久 | 欧美韩日视频 | 中文字幕在线视频免费播放 | 91av免费观看 | 日韩精品在线视频 | 日韩在线视频不卡 | 欧美人体xx | 人人干人人艹 | 蜜桃视频在线观看一区 | 久久久精品福利视频 | 麻豆免费精品视频 | 最近中文字幕免费av | 久久久一本精品99久久精品66 | 日韩系列在线观看 | 国产一区视频在线播放 | 久久精品视频免费观看 | 在线电影 一区 | 久久艹久久 | 欧美精品一区二区免费 | 69绿帽绿奴3pvideos | 91天堂影院 | 在线久久 | 国产精品一区二区三区观看 | 中文国产在线观看 | 欧美在线视频免费 | 99热99re6国产在线播放 | 亚洲国产高清在线 | 一区二区中文字幕在线播放 | 色婷婷综合激情 | 婷色在线 | 色成人亚洲| 国产高清在线 | 日本99精品 | 天天插伊人 | 欧美久久影院 | 久久久久国产精品一区二区 | 国产精品爽爽久久久久久蜜臀 | 成人资源在线观看 | 在线免费观看成人 | 欧美 激情在线 | 欧美日韩久 | 婷婷激情av | 在线观看激情av | 在线观看亚洲精品 | 999精品视频 | 久久综合爱 | 国产精品白丝jk白祙 | 日韩深夜在线观看 | 手机av观看 | 99久久久国产精品免费观看 | 成人黄色短片 | 在线免费观看涩涩 | 欧美日韩视频在线一区 | 99精品免费久久久久久久久日本 | 黄色av三级在线 | 在线色亚洲 | 成人性生交大片免费观看网站 | 国产高清成人在线 | 一区二区三区在线播放 | 日韩在线激情 | 欧美一级性生活视频 | 麻豆视频免费观看 | 五月天丁香视频 | 狠狠狠狠狠狠天天爱 | 干 操 插| 四虎影视久久久 | 久久精品视频中文字幕 | 国产精品免费一区二区 | 久草在线免费看视频 | 操久久免费视频 | 国产又粗又猛又色又黄网站 | 久久精品看 | 精品久久九九 | 色婷婷av一区二 | 亚洲成av人片在线观看www | 美女久久视频 | 色播亚洲婷婷 | 欧美日韩一级视频 | 亚洲v欧美v国产v在线观看 | 国内精品视频一区二区三区八戒 | 国产成人免费在线观看 | 天天在线视频色 | 欧美91精品| 亚洲专区路线二 | 国产黄色一级片在线 | 国产亚洲精品久久 | 丁香激情视频 | 精品999在线观看 | 91精品一区二区三区蜜桃 | 在线涩涩 | 亚洲国产三级 | 欧美999| 一级做a爱片性色毛片www | 国产高清网站 | 免费观看福利视频 | 欧美精品一区二区在线观看 | 日韩在线视频线视频免费网站 | 日韩www在线 | 成人免费观看av | 久久免费的精品国产v∧ | 国产日韩欧美综合在线 | 亚洲欧美精品一区 | 亚洲四虎| 夜夜夜影院 | 96超碰在线 | 午夜精品久久久久久久久久 | 国产综合激情 | 国产精品日韩精品 | 日日干夜夜爱 | 色婷婷狠狠干 | 国产韩国精品一区二区三区 | 国产最新精品视频 | 日韩网站免费观看 | a在线视频v视频 | 亚洲蜜桃在线 | 国产小视频91 | 欧美性粗大hdvideo | 欧美激情视频一区 | 天天操天天艹 | 日韩欧美一区二区三区免费观看 | 日韩在线观看免费 | 激情久久综合网 | 精品国产免费观看 | 久草91视频 | 久草www | 中文字幕二区 | 国产精品刺激对白麻豆99 | 欧美一级久久 | 欧美激情第一页xxx 午夜性福利 | 久久不卡电影 | 国产精品久久久影视 | 中文日韩在线视频 | 中文视频在线看 | 久久女同性恋中文字幕 | 91色在线观看视频 | 久久久久免费网 | 国产精品精品国产 | 国产精品久久99综合免费观看尤物 | 亚洲一区二区三区91 | 亚洲精品美女久久久久网站 | 久久精品—区二区三区 | 国产一级黄 | 四虎国产精品永久在线国在线 | 狠狠gao| 亚洲1级片 | 国产成人精品亚洲日本在线观看 | 99热国产在线 | 国产精品1区 | 久久精品国产一区二区 | 久久免费精品一区二区三区 | 天堂网av在线 | 欧美性一级观看 | 99草视频| 国产高潮久久 | 99热这里只有精品8 久久综合毛片 | 亚洲精品va| 欧美日韩在线看 | 91黄色影视| 久9在线 | 久久噜噜少妇网站 | 四虎国产精品成人免费4hu | 国产精品热 | 日韩免费视频一区二区 | 成人黄色一级视频 | 亚洲欧洲久久久 | 狠狠干成人综合网 | 成人理论电影 | 欧美日韩中文国产 | 97视频在线看| 久久久久国产精品视频 | 亚洲日日夜夜 | 亚洲免费成人av电影 | 尤物97国产精品久久精品国产 | 久久精品综合网 | 特黄特黄的视频 | 国产中文字幕在线 | www.色午夜.com| 日韩最新理论电影 | 国产男女免费完整视频 | 亚洲精品在线一区二区三区 | 97超碰超碰久久福利超碰 | 日韩欧美一区二区在线观看 | av片在线看| 亚洲国产成人在线 | 欧美日韩视频一区二区 | 国产亚洲精品福利 | 97看片吧 | 黄色av免费看 | 久久不卡av| 久久99亚洲精品久久 | www夜夜操com | 在线看日韩av | 超碰成人网 | 综合久久婷婷 | 婷婷激情五月 | 深爱激情综合网 | 久久爱综合 | 午夜骚影 | 九九爱免费视频在线观看 | 综合色亚洲 | 亚洲好视频 | 国产免费一区二区三区最新6 | 五月婷色 | 亚洲国产精品女人久久久 | 久久久免费观看完整版 | 久久综合婷婷国产二区高清 | 日韩av美女| 亚洲精品在线视频 | 国产va精品免费观看 | 日韩精品久久久久久久电影竹菊 | 日本mv大片欧洲mv大片 | 中文字幕乱码亚洲精品一区 | 日日爱av | 最新中文字幕在线观看视频 | 中文字幕有码在线播放 | 一区二区三区在线观看中文字幕 | 婷婷六月色| aa一级片| 日韩在线视频一区二区三区 | 免费久久99精品国产婷婷六月 | 国产伦精品一区二区三区四区视频 | 成人一区二区三区在线观看 | 91麻豆精品91久久久久同性 | 久久夜靖品 | 成人黄大片视频在线观看 | 久九视频 | 99久久精品免费看国产一区二区三区 | 亚洲我射av| 欧美 日韩 视频 | av高清一区二区三区 | 亚洲精品中文在线观看 | 亚洲精品人人 | 一本一本久久a久久 | 日日干综合 | 黄色免费高清视频 | 亚洲国产人午在线一二区 | 人人看黄色| 国产1区2区3区精品美女 | 国产精品久久一区二区三区, | 五月婷婷在线播放 | 狠狠色伊人亚洲综合网站色 | 欧美一级看片 | 999久久久免费精品国产 | 99热只有精品在线观看 | 97超碰站 | 国产精品一区二区av日韩在线 | av成年人电影| x99av成人免费| 91高清完整版在线观看 | 国产福利一区二区三区视频 | 日韩av一区二区在线播放 | 中文字幕在线视频网站 | 成人毛片在线观看 | 99爱在线观看 | 日韩精品第1页 | 精品国产一区二区三区四 | 午夜精品久久久99热福利 | 国产精品久久99精品毛片三a | 麻豆视频在线免费观看 | 国产高清免费在线观看 | 精品嫩模福利一区二区蜜臀 | 久久久影院官网 | 国产精品女教师 | 日韩免费小视频 | 亚洲国产精品va在线看 | www.午夜视频 | 亚洲三级国产 | 午夜a区 | 一区二区观看 | 伊人色**天天综合婷婷 | 国产夫妻自拍av | 青青河边草免费视频 | 日韩在线精品一区 | 亚洲艳情| 中文字幕精品一区二区精品 | 大型av综合网站 | 国产精品99久久久久久人免费 | 久久精品女人毛片国产 | 狠狠色伊人亚洲综合网站色 | 91精品国产自产91精品 | 久99久精品视频免费观看 | 91成人午夜| 在线视频观看亚洲 | 欧美午夜a| 国产99久久九九精品免费 | 天堂av官网 | 在线观看av不卡 | 操高跟美女 | 国产亚洲情侣一区二区无 | 91视频高清完整版 | 成人精品国产免费网站 | 久久国内精品 | 免费视频xnxx com | 狂野欧美激情性xxxx | 国产美女视频网站 | 免费看黄20分钟 | 久久精品影视 | 亚洲日韩中文字幕在线播放 | 国产精品久久久久久久久久免费 | 在线亚洲人成电影网站色www | 在线观看完整版 | 国产一区网址 | 国产精品久久久久久久久久久久 | 91av视频导航| 人人澡人 | 婷婷综合导航 | 丁香花在线观看免费完整版视频 | 成人免费观看大片 | 亚洲91在线| 亚洲国产丝袜在线观看 | 婷婷色五 | 麻豆果冻剧传媒在线播放 | 99久久9| 97电院网手机版 | 久精品视频免费观看2 | 天天色天天射天天操 | 精品国产不卡 | 综合久久精品 | 91av视频播放 | 国产婷婷一区二区 | 六月久久婷婷 | 久久国产免费视频 | 视频福利在线观看 | 久久成人精品电影 | 久久久免费毛片 | 伊人电影天堂 | 久久国产精品免费一区二区三区 | 又黄又爽免费视频 | 麻豆免费精品视频 | 夜夜骑天天操 | 美女网站在线免费观看 | 国产精品中文字幕在线 | 婷婷丁香av | 久久久久伦理电影 | 黄色网址国产 | 国内久久久久久 | 草久久久 | 日本黄色免费看 | 久久伦理网 | 免费看毛片在线 | 国产精品第2页 | 99热手机在线 | 97成人精品区在线播放 | 97精品国产| 天天操天天吃 | 色天天综合网 | 国产小视频福利在线 | 天天操夜夜操 | 综合天天| 国产视频一区在线免费观看 | 国色天香永久免费 | 久久精品一区二区三区中文字幕 | 久草在线视频免费资源观看 | 又黄又爽又无遮挡的视频 | 欧美激情精品久久 | 天堂av色婷婷一区二区三区 | 国产精品久久久久久久av电影 | 久久中文字幕在线视频 | 国产黑丝袜在线 | 伊人久久精品久久亚洲一区 | 丁香六月五月婷婷 | 久久人人97超碰精品888 | 在线观看一 | 在线观看播放av | 国产成人精品久久 | 欧美一区二区在线免费看 | 伊人五月天综合 | 狠狠狠色丁香综合久久天下网 | 久av电影| 西西4444www大胆无视频 | 免费高清在线视频一区· | 午夜久久影视 | 国产成人一二片 | 亚洲国产wwwccc36天堂 | 在线电影 一区 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 一区在线电影 | 欧美日韩大片在线观看 | 日韩黄色中文字幕 | 国产三级视频在线 | 韩国精品福利一区二区三区 | 亚洲闷骚少妇在线观看网站 | 国产自偷自拍 | 久久网页 | 日韩精品2区 | 久久草草热国产精品直播 | 成年人app网址 | 日本黄色黄网站 | 蜜桃视频精品 | 亚洲精品xxxx | 日本中文字幕在线观看 | 国产一级视屏 | 国产亚洲精品v | 久草网站在线观看 | 日韩在线高清 | 亚洲一区二区视频 | 日本在线观看视频一区 | 国产一级不卡视频 | 国产视频在线免费 | 欧美精品免费在线 | 丁香六月天婷婷 | 天天做夜夜做 | 国产日产精品一区二区三区四区 | 美腿丝袜av| av成人免费网站 | 九九九热精品免费视频观看网站 | 亚洲午夜精品福利 | 色婷婷亚洲综合 | 欧美久久久久久久久久久久久 | 91av资源在线| 婷婷色在线资源 | 又长又大又黑又粗欧美 | 久久免费一 | 怡红院av| 九九久久婷婷 | 国产视频2区 | 日韩视频在线观看免费 | 亚洲精品成人 | 国产成人在线观看免费 | 国产综合在线视频 | 久久美女免费视频 | 91干干干 | 国产不卡在线 | 国产丝袜网站 | 在线观看免费版高清版 | 久久伊人精品一区二区三区 | 免费看一级一片 | 色91在线视频 | 亚洲成人二区 | 粉嫩高清一区二区三区 | 啪一啪在线 | 成人久久电影 | 国产精品久久久久久久久蜜臀 | 午夜视频久久久 | 丁香六月婷婷开心婷婷网 | 国产精品免费大片视频 | 少妇bbbb搡bbbb搡bbbb | 日韩动态视频 | 免费在线观看视频一区 | 天天干夜夜想 | 亚洲天堂精品视频在线观看 | 国产一区二区三区免费在线观看 | 夜夜操天天操 | 91av视频在线观看 | 成人99免费视频 | 99色亚洲| 亚洲专区欧美专区 | 一区二区三区四区精品 | 亚洲国内精品在线 | 国产剧情一区二区在线观看 | 国产在线观看,日本 | 久久久影院一区二区三区 | 亚洲无吗av | 日韩毛片在线一区二区毛片 | 人人干人人草 | 国产老妇av | 99视频精品免费视频 | 久久激情视频 久久 | 日韩理论片在线观看 | 久久久亚洲麻豆日韩精品一区三区 | 日日夜夜天天久久 | 亚洲日本一区二区在线 | 在线免费黄色毛片 | 亚洲精品视频二区 | 亚洲永久精品视频 | 国产高清不卡一区二区三区 | 亚洲午夜久久久影院 | 国产色视频123区 | av888av.com| 国产精品网红福利 | 欧美福利片在线观看 | 亚洲精品综合一二三区在线观看 | 99久久er热在这里只有精品15 | 日韩国产高清在线 | 午夜影院一级片 | 高清av在线免费观看 | 日日干激情五月 | 国内精品久久久精品电影院 | 丝袜制服天堂 | 伊人五月 | 日韩电影在线观看一区 | 久久综合九色九九 | 天天草天天 | 成人免费观看视频网站 | 二区三区精品 | 亚洲人在线7777777精品 | 激情狠狠干| 一区二区三区在线看 | 亚洲精品午夜久久久久久久 | 美女精品久久久 | 久久久免费看片 | 国产福利91精品一区 | 精品中文字幕在线观看 | 射射射av | 精品一区二区免费在线观看 | 97色国产 | 天天鲁天天干天天射 | 91精品国产一区二区三区 | 国产精品一区二区无线 | 婷婷久久丁香 | 日本精品久久 | 国产视频精品久久 | 亚洲国产精品视频 | 三级av免费观看 | 中文字幕中文字幕在线中文字幕三区 | 亚洲va天堂va欧美ⅴa在线 | 亚洲欧洲精品一区二区精品久久久 | 99在线视频网站 | 免费看黄电影 | 国产一区二区三区在线 | 国产精品一区二区免费在线观看 | 亚洲欧美偷拍另类 | 亚洲视频2 | 午夜国产成人 | 青青草国产成人99久久 | 六月丁香在线视频 | 五月天丁香 | 日日爽 | 日日摸日日 | 国产一区视频导航 | www.夜夜| 九九九电影免费看 | 国产专区第一页 | a'aaa级片在线观看 | 日韩丝袜在线观看 | 中文字幕在线人 | 国产精品精品视频 | 亚洲国产片色 | 天天爽网站| 精品国产伦一区二区三区 | 亚洲免费视频观看 | 2019精品手机国产品在线 | 人人cao| 欧美一级小视频 | 精品亚洲va在线va天堂资源站 | 少妇做爰k8经典 | 狠狠网| 亚洲国产精品500在线观看 | se视频网址 | 超碰在线人人97 | 91色九色 | 九九热免费视频在线观看 | 最新av电影网站 | 免费 在线 中文 日本 | 青青河边草观看完整版高清 | 国产精品www | 黄色三级在线看 | 亚洲精品成人在线 | 黄色电影网站在线观看 | 亚洲天堂自拍视频 | 综合激情伊人 | 色综合久久久久久久 | 久久精品永久免费 | 99久久成人| 视频91在线 | 久久久69| 久久91久久久久麻豆精品 | 久久久久久久久免费视频 | 亚洲精品乱码久久久久久蜜桃欧美 | 成人黄视频 | 日韩亚洲在线视频 | 久久天堂影院 | 波多野结衣在线观看一区二区三区 | 高清免费在线视频 | 黄色综合 | 欧美日韩综合在线观看 | 日韩免费在线视频观看 | 久草视频免费在线播放 | 九九热只有精品 | 韩日精品在线 | 亚洲美女在线国产 | 91精品在线视频观看 | 国产资源精品 | 欧美日韩高清一区二区三区 | 国产亚洲精品无 | 狠狠的干| 99精品视频在线观看播放 | 欧美一级欧美一级 | 4438全国亚洲精品在线观看视频 | 在线有码中文 | 国产69精品久久99不卡的观看体验 | 91久久人澡人人添人人爽欧美 | 一级久久精品 | 久久精品成人欧美大片古装 | 精品国产伦一区二区三区观看说明 | 中文字幕永久在线 | 久艹在线免费观看 | 久久国产高清 | 成人午夜电影在线 | 午夜精品久久久久 | 国产精品久久一区二区无卡 | 婷婷激情五月综合 | 99热这里只有精品8 久久综合毛片 | 国产免码va在线观看免费 | 麻豆成人在线观看 | 国产精品1区2区 | 91精品国产亚洲 | 激情喷水| 精品国产一区二区三区四区在线观看 | 国产小视频91 | 国产一级二级av | 丁香资源影视免费观看 | 欧美性黑人 | 国产视频精品在线 | 国产91对白在线播 | 777久久久| 欧美一二区视频 | 精品久久久久久久久久久院品网 | 欧美日韩国产伦理 | 久久久精品网站 | 日本公乱妇视频 | 中文字幕成人一区 | 久久永久免费 | 日韩免费观看av | 一本一本久久a久久 | 日韩免费大片 | 91综合视频在线观看 | 日韩免费播放 | 欧美一级性 | 国产精品欧美久久 | 四虎永久精品在线 | 免费日韩一级片 | 高清日韩一区二区 | 久久视频在线观看免费 | 91爱爱免费观看 | 黄色性av | 99r在线观看 | 亚洲成人免费 | 99这里只有久久精品视频 | 在线日韩亚洲 | 亚洲色五月 | 97超碰香蕉 | 欧美国产三区 | 国产一区二区三区午夜 | 婷婷精品国产一区二区三区日韩 | 欧美另类交在线观看 | 国产精品手机在线 | 国产色a在线观看 | 久久视频这里有久久精品视频11 | 免费看日韩片 | 国产成人综合在线观看 | 天天草av | 国产精品99免视看9 国产精品毛片一区视频 | 狠狠色丁香久久婷婷综合丁香 | 午夜黄网| 99精品系列 | 日韩狠狠操 | 日韩欧美视频免费在线观看 | 国产综合精品久久 | 三级av在线免费观看 | 欧美午夜理伦三级在线观看 | 一本—道久久a久久精品蜜桃 | 在线观看免费av片 | 久久艹国产视频 | 国产区av在线 | 亚洲精品国产精品久久99热 | 欧美日韩高清在线观看 | 欧美成人黄色片 | 日韩免费播放 |