• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    Improving Cache Management with Redundant RDDs Eviction in Spark

    2021-12-14 09:59:08YaoZhaoJianDongHongweiLiuJinWuandYanxinLiu
    Computers Materials&Continua 2021年7期

    Yao Zhao,Jian Dong,*,Hongwei Liu,Jin Wu and Yanxin Liu

    1School of Computer Science and Technology,Harbin Institute of Technology,Harbin,150001,China

    2School of Engineering,University of Georgia,Athens,30602,USA

    Abstract: Effcient cache management plays a vital role in in-memory dataparallel systems, such as Spark, Tez, Storm and HANA.Recent research,notably research on the Least Reference Count (LRC) and Most Reference Distance(MRD)policies,has shown that dependency-aware caching management practices that consider the application’s directed acyclic graph (DAG)perform well in Spark.However,these practices ignore the further relationship between RDDs and cached some redundant RDDs with the same child RDDs,which degrades the memory performance.Hence,in memory-constrained situations, systems may encounter a performance bottleneck due to frequent data block replacement.In addition,the prefetch mechanisms in some cache management policies, such as MRD, are hard to trigger.In this paper, we propose a new cache management method called RDE (Redundant Data Eviction) that can fully utilize applications’ DAG information to optimize the management result.By considering both RDDs’ dependencies and the reference sequence, we effectively evict RDDs with redundant features and perfect the memory for incoming data blocks.Experiments show that RDE improves performance by an average of 55% compared to LRU and by up to 48%and 20%compared to LRC and MRD,respectively.RDE also shows less sensitivity to memory bottlenecks, which means better availability in memory-constrained environments.

    Keywords: Dependency-aware; cache management; in-memory computing; spark

    1 Introduction

    With the increasing demand for data analytics, in-memory data-parallel systems, such as Spark [1], Tez [2], HANA, and Storm [3], have shown advantages in iterative data processing with lower latency [4–7].These in-memory frameworks lead to great performance improvements compared with disk-based frameworks and have become popular in industry.However, even with the lower prices of RAM, memory remains a constrained resource as the amount of data grows in big data analytics [6,8].Therefore, cache management has a crucial infuence on the performance of in-memory data-parallel systems.

    Cache optimization has been widely studied, and many effcient algorithms have been proposed to satisfy various systems [9].Traditional cache management focuses on improving the hit ratio using certain prediction methods.However, traditional cache management is oblivious to data dependencies and shows poor performance in in-memory data-parallel systems [5].In typical data-parallel systems, data dependency can be concluded before the execution of jobs by analyzing the structure of directed acyclic graphs (DAGs) [10].Tasks in these parallel systems are executed in a determined workfow according to the DAGs, which can be exploited for scheduling and data caching [11,12].

    Recent studies show that a cache policy considering data dependencies in data-parallel systems has a better performance than traditional history-based methods.Several dependency-aware cache policies for Spark, such as LRC [13], LCRC [14] and MRD [15], have been proposed.All of these policies have led to progress in improving the cache hit ratio compared to the default LRU cache policy in Spark [16].LRC traverses the DAG and sets each Resilient Distributed Dataset (RDD)with different caching priorities according to its reference count, and RDDs with low reference counts tend to be evicted when memory is full.LCRC and MRD further exploit the DAGs of jobs and consider the reference gap, which makes the cached RDD more time-sensitive and achieves a better hit ratio than LRC.However, all these cache policies neglect the fact that RDDs with certain dependencies always share similar priorities in these algorithms.These RDDs tend to be cached together but play the same role in computing, which results in performance degradation when memory is a constrained resource.

    In this paper, we discuss how the DAG can be further exploited to optimize cache management.The solution should traverse the DAGs of applications and implement DAG-based cache management with an effcient redundant block eviction strategy.Moreover, the policy should have low overhead and be applicable to DAG-based in-memory data-parallel computing systems.

    We propose a novel cache management policy, Redundant Data Eviction (RDE), that can release more available memory space with low overhead.RDE can fnd the deeper relationships between data blocks and evict redundant blocks as a function.Furthermore, with the memory space freed by evicting redundant data, we launch a prefetching mechanism in cache management for further performance improvement.RDE has the following advantages:

    First, RDE can minimize the caching blocks by evicting target redundant data blocks.We analyze mass DAGs of typical applications to exploit the features of redundant data blocks.As a result, we can precisely target redundant data using RDDs’ dependencies and the schedule sequence in the workfow of applications.By evicting these redundant data, systems will have more memory space for computing and data caching, which will surely improve the performance.

    Second, a cache management policy with redundant data eviction is more likely to attach a prefetching policy to achieve a better hit ratio in future workfows.As mentioned above,memory is always a constrained resource in data-parallel systems.RDE has less memory sensitivity and could have a better performance in resource-strict situations compared to previous cache management policies.

    We implement RDE as a pluggable memory manager in Spark 2.4.To verify the effciency of RDE, we conduct extensive evaluations on a six-node cluster with ten different data analysis workloads.For all the benchmarks, RDE shows high performance and large advantages in memory-constrained situations.According to our experimental results, RDE reduces the application runtime by 41% on average compared with the default LRU caching policy in Spark and generally improves the performance of the system by 35% and 20% compared to LRC and MRD, respectively.

    The structure of the remainder of this paper is organized as follows.Section 2 presents the background and describes the ineffciency of existing cache strategies based on DAGs derived from system schedulers.The design of RDE and its implementation details are proposed in Section 3.The evaluation results are reported in Section 4.Finally, we conclude the paper in Section 5.

    2 Background and Motivation

    In this section, we discuss the background of data access in Spark jobs and provide the motivation for introducing a novel cache management policy.We limit our discussion to the context of Spark in this paper.However, the discussion is also applicable in other in-memory computing frameworks.

    2.1 RDD and Data Dependency

    Spark is a distributed, in-memory computing framework for big data that provides the Resilient Distributed Dataset (RDD) as its primary abstraction in computing.RDDs are distributed datasets stored in memory.Spark can only transform an RDD into a new RDD using a transformation operation.The workfows of data on parallel computing frameworks are determined by DAGs consisting of RDDs.These DAGs contain rich information on data dependencies, which is crucial for data caching and has not been fully explored in default cache management policies.

    For example, as a key abstraction in Spark, an RDD is a collection of objects partitioned across nodes in a Spark cluster [17], and all the partitions can be computed in parallel.In Spark, operations are divided into transformations and actions, and all the operations are based on RDDs.As shown in Fig.1, the scheduler of Spark is composed of RDD objects, a DAG scheduler, task scheduling and task operations.During the construction of the RDD objects, the scheduler will analyze the RDDs of upcoming tasks and submit them to the DAG scheduler while the action operation is triggered.Then, the DAG scheduler forms a DAG by implying a task execution sequence that is divided into several stages.During the execution, the dragging or failing tasks are recomputed.Therefore, cache replacement strategies have signifcant infuences on recomputing costs.

    Figure 1:Schedule in spark

    2.2 Memory Management in Spark

    In Spark, memory is divided into three parts:System memory (other and system reserved),execution memory and storage memory, as shown in Fig.2 [18].RDDs are cached in storage memory.A uniform memory management mechanism was implemented in Spark after version 1.6 was updated.The execution memory and storage memory share the same memory pool, and their space can be dynamically changed to satisfy different memory requirements.This mechanism reduces the diffculty of managing the memory.This means that the utilization of storage memory will also have an infuence on the available execution memory, which is responsible for the computing effciency of applications [19,20].

    Figure 2:Memory management model of spark

    We apply SparkBench [21] with different workloads on our cluster and analyze the logs of the system to explore the relationship between the storage memory and execution memory.The system logs show that when the storage memory is full and the execution memory drops to the minimum percentage, the system experiences degraded performance because of the frequent block replacement in computing RDDs.In some memory-constrained situations with heavy workloads,the RDD in computing even evicts its own blocks from the execution memory due to their low priority in existing DAG-based cache polices.

    2.3 History-Based and DAG-Based Cache Management

    History-based cache management is widely used in various systems.LRU is a classic historybased cache management method and is used as the cache replacement algorithm in Spark.LRU keeps tracking the data in memory and evicts the blocks that have not been accessed for the longest periods of time.However, LRU is oblivious to the lineage of Spark jobs, resulting in poor effciency of the eviction of RDDs.

    To fully utilize the DAGs and achieve a more signifcant performance improvement, several DAG-based cache management policies have been proposed.LRC and MRD are both representative DAG-based cache policies and have been proven to have high performance on common benchmarks.LRC traverses the lineage and keeps tracking the dependency count of each RDD.This count is updated continuously as a priority for evicting RDD blocks from memory as the Spark jobs run.An RDD with a higher reference count is more likely to be used in future computations and should be cached in memory.To save the maximum amount of memory space,the RDD with the lowest dependency count should be evicted from memory.Compared with the default LRU policy, LRC improves the cache hit ratio and presents a better comprehensive application workfow.MRD analyzes the shortness of LRC and aims at improving the time sensitivity for caching.MRD always evicts data blocks whose reference distances are the largest and prefetches the data blocks with the lowest reference distances if possible.MRD performs better than LRC in systems with effcient memory.

    However, when it is diffcult to conduct prefetching and memory is constrained, frequent data block replacement will result in a signifcant performance degradation in MRD, while LRC can still obtain a better performance improvement on the system.Existing cache policies neglect the waste of memory resulting from redundant RDDs.

    For example, in the lineage of the Connected Component (CC) shown in Fig.3, RDD12 and RDD16 always appear in the same stage, and RDD16 is a child of RDD12 according to the dependency.This means that in most situations, RDD12 is redundant when RDD16 has been cached.However, in existing cache policies, including LRC and MRD, RDDs with the features mentioned above generally share similar cache priorities.These RDDs usually have high priority and are hard to evict throughout the workfow, which will reduce the space for the storage memory and prevent the allocation of more space to the execution memory because of the dynamic memory management in Spark.With an effcient redundant RDD eviction strategy, more memory space will be released for data caching and RDD prefetching.We further examine the CC’s lineage.According to the reference distance frst policy defned by the MRD policy, RDD9,RDD12 and RDD16 have the same high caching priority in the workfow and are hard to replace with other RDDs.RDD3, RDD14 and RDD22, which are also crucial RDDs in the workfow,are hard to cache due to the constrained memory.

    Figure 3:Partial lineage of a connected component (CC)

    3 System Design

    In this section, we propose a new cache management method, RDE (Redundant Data Eviction), which can make cache decisions based on the DAGs of applications with an effcient redundant RDD eviction policy.We also describe our implementation in Spark.

    3.1 Eviction Policy in RDE

    Defnition 1 (Candidate RDDs):RDDs in a stage with the same computing sequence are defned as candidate RDDs.

    The computing sequence ofRDDirepresents the stage sequence includingRDDiin the workfow, and it is denoted asCS(RDDi).CS(RDDi)is described as the distance between the present stage and the next stage, includingRDDi.If the present stage is the last stage includingRDDi, thenCS(RDDi)is considered to reach infnity.

    Defnition 2 (Redundant RDD):An RDD is called a redundant RDD in a candidate RDD set if and only if the RDD is not the leaf RDD after implementing a depth-frst search in the candidate RDD workfow, which is derived from the DAG of the application.

    The two defnitions compose the criterion for locating redundant RDDs in a DAG derived from the Spark scheduler.RDE is a DAG-based cache management policy with an effcient redundant RDD eviction strategy.Each RDD in a DAG has two parameters:The basic cache priority and the CS.We frst traverse the DAG and compute each RDD’s CS according to the stage distance, which is utilized to represent the RDD computing sequence.In each stage, we perform a depth-frst search among candidate RDDs with the same CS, only preserve the leaf RDD as the cache candidate, and view the remaining RDDs as redundant RDDs according to Defnition 2.Then, we set the redundant RDDs with the lowest cache priority and recreate a new DAG to provide other RDDs with new cache priority.To coordinate with the prefetching algorithm, we use the stage distance to measure the basic cache priority of each RDD.For example, in Stage 6 of the PageRank lineage (Fig.4), RDD9, RDD14, RDD16, RDD26, RDD35,RDD36 and RDD38 have the same CS, which is 9, and can be seen as candidate RDDs in Stage 6.After performing a depth-frst search among candidate RDDs according to the dependency derived from the DAG, RDD16 is reserved as a candidate caching RDD.The others will be seen as redundant RDDs, and their cache priority will be set as the lowest.Stage 3, Stage 4 and Stage 15 share similar processes in the lineage of PageRank.This cache policy is oblivious to redundant RDDs, which is surely benefcial for future caching and prefetching.RDE shows advantages in memory utilization.

    Figure 4:Lineage of stage 6 in pagerank

    RDE can locate redundant RDDs quickly and avoid unnecessary overhead in memory.RDE provides systems with higher performance in memory-constrained situations.Moreover, the systems log of various workloads shows that the memory occupation remains at a high level due to Spark’s effcient memory management in all stages, which means that the prefetching process in existing cache management policies may lead to frequent block replacement and degrade the performance in Spark.RDE is less memory sensitive and can cache more essential RDDs.RDE will decrease the frequency of prefetching and reduce the overhead introduced by the prefetching mechanism in Spark.The eviction method can be described using the following algorithm.

    Algorithm 1:Eviction in RDE 1:Input:DAG of application 2:RDD_CS_table:a table with CS of RDDs in DAG 3:RDD_disk_CS:a table with CS of RDDs in disk 4://locate redundant RDDs 5:for each RDDi of DAG do 6:RDDi.CS ←stage distance from DAG 7:end for 8:for each stage m of DAG do 9:sort RDDs based on RDD.CS 10:CandidateRDDs m ←RDD with same CS 11:do depth-frst search in CandidateRDDs m 12:if RDDi in CandiateRDDs m is not leaf RDD 13:RedundantRDDs ←RDDi 14:end if 15:end for 16:for each RDDi in DAG removed Redundant RDDs 17:update(RDD_CS_table) //update CS of RDDs 18:end for 19://Block Eviction 20:if data block size of (RDDi)>free memory do 21:RDDj ←highest(RDD_CS_table)22:if(RDDj·CS>RDDi·CS)23:If(RDDj·CS is not infnity)24:evict(RDDj)25:write RDDj to Disk 26:update(RDD_disk_CS)27:else 28:evict(RDDj)29:end if 30:end if 31:end if

    3.2 Prefetching Mechanism

    As mentioned above, we choos e the computing sequence to measure the cache priority for each RDD.Computation in Spark occurs when a new stage is established.The RDD computing sequence can be represented by the stage computing sequence.Each RDD has various stage distances that represent the different schedule orders in the entire workfow.An RDD with a noninfnite CS implies that this RDD will be used in future computations in current applications,and we consider this RDD to be a prefetchable RDD.However, prefetchable RDDs with lower cache priority need to be written to a disk to make room for higher priority RDDs.We keep a computing sequence table for prefetchable RDDs written to a disk.When the cache priority of prefetchable RDDs increases as a job runs and becomes higher than that of cached RDDs,the prefetching mechanism begins to work and cache prefetchable RDDs from the disk.RDE shows less memory sensitivity in computing, and the frequency of prefetching is lower than that of existing cache policies.RDDs with high priorities have less opportunity to be evicted by a prefetching mechanism, which will surely reduce the overhead caused by introducing a prefetch mechanism.The RDE cache management policy with prefetching can be described by the following algorithm.

    ?

    We observe that to achieve basic cache priority, we need to traverse the entire application’s DAG.However, in systems such as Spark, applications usually consist of several jobs, and we can only obtain the DAG of the present job from the Spark scheduler.Therefore, it is a challenge to achieve the entire DAG of applications.To solve this problem, we reconsider our cache policy in two situations.

    Mostly, applications that run on in-memory data-parallel systems are recurring and usually repeat certain jobs with the same DAG to process different data sets.Therefore, it is feasible to learn the entire DAG from previous jobs so that our cache policy performs better in these applications.

    For nonrecurring applications with jobs that have different DAGs, in each single job, RDE works in the same way as in recurring applications, but the redundant RDDs and the cache priority should be recomputed when a new job is coming.The hit ratio will drop by a certain percentage compared with recurring applications.

    3.3 Spark Implementation

    Architectural overview.Fig.5 shows the architectural overview and the interaction between the modules of the cache manager.Our implementation is composed of 3 pluggable modules:DAGAnalyzer and REManager are deployed on the master node and CacheMonitor is deployed on each slave node.The other modules, such as DAGScheduler, BlockManager EndpointMaster and BlockManager SlaveEndpoint, are original components of Spark.The details of the main APIs for our implementation are given in Tab.1.

    Figure 5:Overall system architecture of spark with RDE cache management.Our modules are highlighted as shaded boxes

    DAGAnalyzer.DAGAnalyzer derives a job’s DAG from the Spark DAGScheduler to prepare the essential information for REManager.In recurring applications, DAGAnalyzer creates the entire DAG of the application by analyzing the previous job’s DAG.Then, it analyzes the DAG and calculates the CS for each RDD.Finally, DAGAnalyzer sends the application’s DAG together with the RDDs’ computing sequence to REManager.

    REManager.REManager is the key component of this architecture.REManager reconstructs the application’s DAG according to the information received from DAGAnalyzer.After updating the DAG by re-evaluating redundant RDDs, REManager recomputes the cache priority for other RDDs according to their stage distance in the new DAG.Moreover, with the information collected by CacheMonitor deployed on the slave nodes, REManager is also responsible for RDDs’eviction and prefetching algorithm at runtime.

    CacheMonitor.CacheMonitors are deployed on the slave nodes in the cluster.CacheMonitors access various APIs and collect necessary information for data eviction and prefetching.Moreover,CacheMonitors also conduct the RDD eviction strategy according to the instructions sent back from REManager.

    Table 1:APIs of spark implementation

    Workfow.After submitting the application, the Spark driver creates a SparkContext within which DAGAnalyzer and REManager are established.Meanwhile, other modules in Spark are also established.The driver then informs the slave nodes to launch the Spark executors and then deploys CacheManager and BlockManager.After establishing the connection between the driver and the executor, DAGAnalyzer analyzes the job’s DAG from DAGScheduler, and the entire application’s DAG together with the CS of each RDD are sent to REManager.REManager reconstructs the DAG and recomputes the RDDs’ cache priority.Combined with the running information received from CacheMonitor and the new cache priority, REManager sends the eviction and prefetching strategy of present stages to BlockManager MasterEndpoint.Then,BlockManager communicates with BlockManager MasterEndpoint to conduct the specifc cache operation, such as evicting RDDs from the cache or conducting prefetching by pulling data from the disk.

    Communication overhead.RDE results in a slight communication overhead for Spark.While REManager reconstructs the DAG and determines the cache priority for each RDD, the cache priority fle is sent to each slave node and can be kept locally during the workfow.REManager only updates the cache priority when necessary through heartbeats between the master and slave nodes.Specifcally, REManager should inform the slave nodes to update their initial RDD caching priority when DAGAnalyzer receives a new job’s DAG.Thus, the overhead from communication could be neglected during this workfow.

    Prefetching overhead.In most situations, prefetching will surely improve the system’s performance by increasing the cache hit ratio.Only in some extreme memory-constrained systems does prefetching cause frequent data replacement, and data with high priority, which should be computed in the next stage, could be evicted from the cache due to severe memory occupation.RDE evicts redundant RDDs and is more unlikely to experience a memory bottleneck compared to existing DAG-based cache polices.Therefore, the prefetching overhead could be ignored.

    4 Evaluations

    In this section, we evaluate the performance of our cache policy with typical benchmarks.

    4.1 Experimental Environment

    Our experimental platform was composed of several virtualized machines in two highperformance blade servers, which had 32 cores and 64 GB of memory each.The main tests were conducted in this virtual environment with nine nodes, which consisted of one master and eight slave nodes.The master node obtained a better confguration to satisfy the computing demand for cache policies.All the nodes were deployed with Spark 2.4.0 and Hadoop 2.8.0.The datasets were generated by SparkBench.The workloads and the amounts of input data are given in Tab.2.

    Table 2:Workloads and data input

    4.2 Overall Performance

    The master is confgured with 8 cores and 8 GB of memory, while the slave nodes are confgured with 4 cores and 4 GB of memory.We compared RDE with the Spark native cache policy LRU and two typical DAG-based cache policies, known as LRC and MRD.We show the results for two different scenarios:RDE with eviction-only and RDE with both eviction and prefetching.In both scenarios, RDE performs well, especially with prefetching; and RDE signifcantly decreases the benchmark runtime by increasing the hit ratio of the cache.

    RDE with eviction-only.We conducted RDE eviction-only on several Spark benchmarks and compared its performance with the performances of the LRU, LRC and MRD polices.The results are shown in Fig.6.

    Figure 6:Overall performance compared with existing cache policies (eviction-only)

    It is clear that the application runtimes are reduced by up to 56% compared to the original cache policy LRU.Furthermore, RDE considers both the dependency and computing sequence of RDD, is more time sensitive than LRC in caching RDDs and achieves as high as a 30%improvement in performance over the Connected Component (CC) workload.RDE with the eviction-only policy also has a 9% to 15% performance improvement compared to MRD with the eviction-only policy since RDE caches less redundant RDDs to obtain a better hit ratio.In general, RDE provides a signifcant performance improvement due to its effcient eviction policy.

    RDE with prefetching.RDE evicts redundant RDDs to free memory space for more valuable RDDs.With this mechanism, RDE can be more suitable for prefetching policies in memoryconstrained situations.We conducted RDE with prefetching on the same benchmarks and datasets above, and the results of this method compared with those of LRU, LRC and MRD-Prefetch are shown in Fig.7.

    Figure 7:Overall performance compared with existing cache policies

    RDE with prefetching combines the eviction policy with the prefetching method to obtain a performance.Compared to eviction-only policies, RDE improves the cache hit ratio with prefetching.It can be concluded that the performance improvement reaches 63% and 48% compared to LRU and LRC, respectively.We also compared our policy to MRD-Prefetch, which is also a DAG-based cache policy with prefetching.RDE achieves an approximately 9% to 20% advantage in performance, which benefts from the eviction policy of redundant RDDs.Especially in memory-constrained situations, RDE can take full use of memory space and make a prefetch policy easier to trigger.

    4.3 Performance Comparison with Different Memory Sizes

    As we mentioned above, RDE shows less memory sensitivity and performs well in memoryconstrained situations.We deploy each executor memory size from 2 to 6 GB and compare RDEPrefetch with LRU, LRC and MRD-Prefetch in several benchmarks with different confgurations.Our purpose is to fnd the infuence of the memory size on different cache policies.

    Figure 8:Performance under four cache management policies with different cache sizes

    As shown in Fig.8, each cache policy performs better as the amount of memory is increased.Policies with prefetching, such as MRD-Prefetch and RDE-Prefetch, show more advantages in clusters with more memory.However, in memory-constrained situations, such as when executors are deployed with 2 GB of memory, the cache system with MRD-Prefetch seems to be the frst to encounter a memory bottleneck.The results show that with suffcient memory, MRDPrefetch performs well with various workloads.In regard to a memory-constrained situation,MRD-Prefetch achieves a worse performance, and the application running time equals that of the system with LRC in k-means and PageRank.After analyzing the system logs, we fnd frequent RDD eviction occurring in memory, and there is not enough memory space to trigger the prefetch method in MRD.The prefetching method in MRD-Prefetch is limited in memory-constrained situations.RDE still outperforms in clusters deployed with low memory.It reduces the execution time by 40% to 56% compared to LRU, which means that the prefetch method in RDE works well in memory-constrained situations.We can expect RDE to have good performance in some new felds with constrained resources, such as edge computing [22,23].

    5 Conclusion

    In this paper, we present a DAG-based cache management policy with redundant eviction data in Spark named RDE.RDE traverses the lineage of an application and computes the degree of dependency similarity for each RDD.Redundant RDDs have no opportunity to be cached in the workfow, which makes RDE perform better in memory-constrained situations.Moreover, we also adapt a prefetch mechanism to RDE to obtain a better cache hit ratio.Compared to the LRC and MRD policies, RDE achieves 35% and 20% improvements in performance, respectively,under memory-constrained circumstances.

    Funding Statement:This work was supported by the National Natural Science Foundation of China under Grant 61100029.

    Conficts of Interest:The authors declare that they have no conficts of interest to report regarding the present study.

    亚洲精品乱久久久久久| 12—13女人毛片做爰片一| 久久人妻福利社区极品人妻图片| 亚洲伊人色综图| 国产日韩欧美视频二区| 亚洲av片天天在线观看| 女人精品久久久久毛片| 叶爱在线成人免费视频播放| 欧美精品高潮呻吟av久久| 老熟女久久久| 成年av动漫网址| 自线自在国产av| a级毛片黄视频| 91九色精品人成在线观看| 亚洲色图综合在线观看| 欧美另类亚洲清纯唯美| 99热国产这里只有精品6| 男女免费视频国产| 国产有黄有色有爽视频| 天天添夜夜摸| 国产日韩欧美亚洲二区| 黑人巨大精品欧美一区二区mp4| 久久久久久久精品精品| 欧美少妇被猛烈插入视频| 日韩有码中文字幕| 男女下面插进去视频免费观看| 国产在线免费精品| 午夜福利视频在线观看免费| 国产成人系列免费观看| 丝瓜视频免费看黄片| 国产成人精品久久二区二区免费| 久久热在线av| 黄片播放在线免费| 一本—道久久a久久精品蜜桃钙片| 男人操女人黄网站| 桃红色精品国产亚洲av| 亚洲av国产av综合av卡| cao死你这个sao货| 大陆偷拍与自拍| 99国产精品一区二区蜜桃av | 国产精品久久久av美女十八| 欧美激情久久久久久爽电影 | 久久天堂一区二区三区四区| 国产野战对白在线观看| 国产在线一区二区三区精| 精品亚洲成国产av| 午夜视频精品福利| 中文字幕精品免费在线观看视频| 正在播放国产对白刺激| av又黄又爽大尺度在线免费看| 国产成人av教育| 国产熟女午夜一区二区三区| 久久久久国内视频| 亚洲一码二码三码区别大吗| 久久中文字幕一级| 少妇精品久久久久久久| 麻豆乱淫一区二区| 黄色视频在线播放观看不卡| 亚洲国产精品成人久久小说| 色老头精品视频在线观看| 啦啦啦视频在线资源免费观看| 淫妇啪啪啪对白视频 | 黄色毛片三级朝国网站| 国产精品亚洲av一区麻豆| 亚洲熟女精品中文字幕| 日本a在线网址| 成年av动漫网址| 韩国高清视频一区二区三区| 午夜激情av网站| 中文字幕高清在线视频| 国产精品久久久久成人av| 男男h啪啪无遮挡| 久久精品久久久久久噜噜老黄| 国产欧美亚洲国产| 国产91精品成人一区二区三区 | 老司机深夜福利视频在线观看 | 精品视频人人做人人爽| 日韩欧美国产一区二区入口| 黑人巨大精品欧美一区二区mp4| 97在线人人人人妻| 黄色视频在线播放观看不卡| 国产人伦9x9x在线观看| √禁漫天堂资源中文www| 人妻久久中文字幕网| 国产精品一区二区在线不卡| 色综合欧美亚洲国产小说| 操美女的视频在线观看| 香蕉国产在线看| 男女免费视频国产| 亚洲九九香蕉| 国产av精品麻豆| 亚洲,欧美精品.| 国产亚洲av片在线观看秒播厂| 国产亚洲精品第一综合不卡| 97在线人人人人妻| 午夜免费成人在线视频| 18禁观看日本| 国产精品影院久久| 天天躁夜夜躁狠狠躁躁| 免费少妇av软件| 亚洲国产毛片av蜜桃av| 99久久99久久久精品蜜桃| 欧美日韩国产mv在线观看视频| 色婷婷久久久亚洲欧美| 欧美 亚洲 国产 日韩一| 欧美国产精品va在线观看不卡| www日本在线高清视频| 国产精品99久久99久久久不卡| 国产精品免费视频内射| 999精品在线视频| 97在线人人人人妻| 97在线人人人人妻| 国产精品麻豆人妻色哟哟久久| 午夜激情av网站| 两性午夜刺激爽爽歪歪视频在线观看 | 日韩视频一区二区在线观看| 亚洲国产日韩一区二区| 欧美黑人欧美精品刺激| 岛国毛片在线播放| 一个人免费在线观看的高清视频 | 国产欧美日韩综合在线一区二区| 亚洲美女黄色视频免费看| 最黄视频免费看| av片东京热男人的天堂| 各种免费的搞黄视频| 日本猛色少妇xxxxx猛交久久| 国产男女内射视频| 制服人妻中文乱码| av国产精品久久久久影院| 一本久久精品| 少妇 在线观看| 天天躁夜夜躁狠狠躁躁| 国产日韩欧美在线精品| 国产主播在线观看一区二区| a级片在线免费高清观看视频| 中文字幕人妻丝袜一区二区| 免费观看人在逋| 视频在线观看一区二区三区| 国产黄频视频在线观看| 日本vs欧美在线观看视频| 亚洲欧洲日产国产| 真人做人爱边吃奶动态| 两性午夜刺激爽爽歪歪视频在线观看 | 超碰97精品在线观看| 国产精品香港三级国产av潘金莲| 亚洲欧美色中文字幕在线| 大陆偷拍与自拍| 亚洲欧美成人综合另类久久久| av网站在线播放免费| 我的亚洲天堂| av免费在线观看网站| 在线亚洲精品国产二区图片欧美| 午夜免费观看性视频| 啦啦啦 在线观看视频| 国产一区二区三区在线臀色熟女 | 99久久国产精品久久久| 国产成人免费观看mmmm| 777米奇影视久久| 精品国产乱子伦一区二区三区 | www.999成人在线观看| 一二三四社区在线视频社区8| 99精品欧美一区二区三区四区| 1024视频免费在线观看| 国产成人影院久久av| 久久久精品国产亚洲av高清涩受| 亚洲综合色网址| 丝袜美足系列| 亚洲欧美一区二区三区久久| 老司机深夜福利视频在线观看 | 99精品欧美一区二区三区四区| 超色免费av| 国产精品偷伦视频观看了| 69精品国产乱码久久久| 丰满人妻熟妇乱又伦精品不卡| 黑人操中国人逼视频| 丝袜脚勾引网站| 国产欧美日韩一区二区三区在线| 考比视频在线观看| 中文字幕另类日韩欧美亚洲嫩草| 99热国产这里只有精品6| 亚洲国产中文字幕在线视频| 精品一区二区三区av网在线观看 | 午夜福利乱码中文字幕| 亚洲精品一卡2卡三卡4卡5卡 | 国产不卡av网站在线观看| 国产精品久久久人人做人人爽| 一二三四社区在线视频社区8| 一级片免费观看大全| 又大又爽又粗| 一进一出抽搐动态| 国产成人啪精品午夜网站| 欧美乱码精品一区二区三区| 亚洲一区中文字幕在线| 天天躁夜夜躁狠狠躁躁| 午夜福利视频在线观看免费| 他把我摸到了高潮在线观看 | 最近中文字幕2019免费版| 中亚洲国语对白在线视频| 一本—道久久a久久精品蜜桃钙片| 搡老乐熟女国产| 曰老女人黄片| 人人妻,人人澡人人爽秒播| 国产又爽黄色视频| 啦啦啦 在线观看视频| 亚洲精品自拍成人| 夜夜夜夜夜久久久久| 精品一区二区三区av网在线观看 | 精品久久久久久电影网| 欧美另类一区| 王馨瑶露胸无遮挡在线观看| 国产亚洲一区二区精品| 精品人妻1区二区| kizo精华| 男女下面插进去视频免费观看| 人人妻人人澡人人看| 亚洲国产精品一区三区| 丝袜脚勾引网站| av在线老鸭窝| 捣出白浆h1v1| 一级,二级,三级黄色视频| 高清av免费在线| 亚洲精品久久午夜乱码| 免费日韩欧美在线观看| 狠狠精品人妻久久久久久综合| 久久中文看片网| 永久免费av网站大全| 在线观看免费日韩欧美大片| 熟女少妇亚洲综合色aaa.| 久久国产亚洲av麻豆专区| www日本在线高清视频| 老汉色∧v一级毛片| 日韩精品免费视频一区二区三区| 大陆偷拍与自拍| 欧美日韩一级在线毛片| 50天的宝宝边吃奶边哭怎么回事| 色老头精品视频在线观看| 老熟女久久久| 成人免费观看视频高清| 桃红色精品国产亚洲av| 国产精品欧美亚洲77777| 一本综合久久免费| 不卡一级毛片| 蜜桃在线观看..| 中文字幕人妻丝袜制服| 99热国产这里只有精品6| 中国国产av一级| 国产精品免费视频内射| 精品一区二区三卡| 成在线人永久免费视频| 国产一区二区三区av在线| 午夜久久久在线观看| 欧美国产精品va在线观看不卡| 99国产极品粉嫩在线观看| 十八禁网站网址无遮挡| 电影成人av| 18禁裸乳无遮挡动漫免费视频| netflix在线观看网站| 亚洲国产成人一精品久久久| h视频一区二区三区| 女性生殖器流出的白浆| 日韩大码丰满熟妇| 欧美少妇被猛烈插入视频| 欧美国产精品va在线观看不卡| 国产欧美日韩一区二区三区在线| 男女床上黄色一级片免费看| 中国美女看黄片| 精品久久蜜臀av无| 我要看黄色一级片免费的| 国产亚洲一区二区精品| 国产日韩欧美在线精品| 性高湖久久久久久久久免费观看| 丝袜人妻中文字幕| 日韩中文字幕视频在线看片| 色视频在线一区二区三区| 超碰成人久久| 免费黄频网站在线观看国产| www.av在线官网国产| tocl精华| 亚洲国产av影院在线观看| 国产成人啪精品午夜网站| 丝袜美足系列| 国产亚洲一区二区精品| 国产又爽黄色视频| 久久国产精品大桥未久av| 99精品久久久久人妻精品| 男女国产视频网站| 久久99热这里只频精品6学生| 亚洲av片天天在线观看| 热re99久久精品国产66热6| 美女午夜性视频免费| 久久人妻福利社区极品人妻图片| 中文字幕人妻熟女乱码| 黄色a级毛片大全视频| 另类精品久久| 国产在线一区二区三区精| 女性生殖器流出的白浆| 香蕉国产在线看| 极品少妇高潮喷水抽搐| 久久天堂一区二区三区四区| 狠狠狠狠99中文字幕| 国产区一区二久久| 亚洲色图综合在线观看| 精品少妇一区二区三区视频日本电影| 国产成人欧美| 成年动漫av网址| 日韩视频一区二区在线观看| 一区二区av电影网| 黄色毛片三级朝国网站| 久久久精品区二区三区| 十八禁网站免费在线| 后天国语完整版免费观看| 国产成人啪精品午夜网站| 岛国在线观看网站| 新久久久久国产一级毛片| 人妻一区二区av| 久久精品亚洲av国产电影网| 国产日韩一区二区三区精品不卡| 韩国高清视频一区二区三区| 他把我摸到了高潮在线观看 | 国产男女超爽视频在线观看| 久久精品久久久久久噜噜老黄| 国产精品一区二区在线不卡| 在线观看免费高清a一片| 91国产中文字幕| 9191精品国产免费久久| 宅男免费午夜| 免费在线观看黄色视频的| 叶爱在线成人免费视频播放| 亚洲激情五月婷婷啪啪| 2018国产大陆天天弄谢| 老司机亚洲免费影院| 国产精品国产av在线观看| 欧美日韩视频精品一区| xxxhd国产人妻xxx| 黑人巨大精品欧美一区二区蜜桃| 亚洲九九香蕉| 婷婷丁香在线五月| 女性被躁到高潮视频| 免费少妇av软件| 91av网站免费观看| 桃花免费在线播放| 精品久久久精品久久久| 精品亚洲乱码少妇综合久久| 久久人妻福利社区极品人妻图片| 精品一区二区三区四区五区乱码| 青青草视频在线视频观看| 999久久久国产精品视频| 精品国产一区二区三区久久久樱花| 日韩一卡2卡3卡4卡2021年| 久久久久网色| 精品人妻在线不人妻| 母亲3免费完整高清在线观看| 青春草亚洲视频在线观看| 亚洲欧美激情在线| 一本一本久久a久久精品综合妖精| 国产一区二区三区av在线| 淫妇啪啪啪对白视频 | 欧美黑人精品巨大| 亚洲av国产av综合av卡| 欧美少妇被猛烈插入视频| 一级a爱视频在线免费观看| 在线观看一区二区三区激情| 免费女性裸体啪啪无遮挡网站| 各种免费的搞黄视频| 国产亚洲精品一区二区www | 亚洲国产欧美一区二区综合| 国产97色在线日韩免费| 色播在线永久视频| 老熟妇仑乱视频hdxx| 国产一区二区三区综合在线观看| 免费看十八禁软件| 高清在线国产一区| 中文字幕制服av| 黑丝袜美女国产一区| 老司机福利观看| 亚洲精品第二区| 人妻一区二区av| 欧美黄色淫秽网站| 一区二区三区激情视频| 女人久久www免费人成看片| 国产一区二区在线观看av| 午夜91福利影院| 极品少妇高潮喷水抽搐| 亚洲欧美一区二区三区黑人| 国产高清国产精品国产三级| 国产亚洲一区二区精品| 日韩视频一区二区在线观看| 高清av免费在线| 午夜91福利影院| 久久国产精品男人的天堂亚洲| 欧美xxⅹ黑人| 亚洲欧洲日产国产| 天堂俺去俺来也www色官网| 考比视频在线观看| 欧美精品一区二区免费开放| 大片免费播放器 马上看| 无遮挡黄片免费观看| 久久人妻熟女aⅴ| 黑人欧美特级aaaaaa片| 国产xxxxx性猛交| 久9热在线精品视频| av国产精品久久久久影院| 欧美+亚洲+日韩+国产| 国产精品自产拍在线观看55亚洲 | 亚洲国产欧美日韩在线播放| av有码第一页| 男女国产视频网站| 在线亚洲精品国产二区图片欧美| 国产一区二区三区在线臀色熟女 | 日本vs欧美在线观看视频| 欧美日韩av久久| 男女床上黄色一级片免费看| 国产区一区二久久| 亚洲精品在线美女| 老司机影院毛片| 午夜激情久久久久久久| 久久久久久久国产电影| 久久天躁狠狠躁夜夜2o2o| 亚洲国产精品一区三区| 国产高清视频在线播放一区 | 可以免费在线观看a视频的电影网站| 老司机亚洲免费影院| 精品视频人人做人人爽| 久久香蕉激情| 色老头精品视频在线观看| 丝袜美腿诱惑在线| 国产99久久九九免费精品| 99久久人妻综合| 亚洲精品久久久久久婷婷小说| 午夜福利视频精品| 一边摸一边抽搐一进一出视频| 欧美激情极品国产一区二区三区| 女人精品久久久久毛片| 亚洲精品在线美女| 久久99一区二区三区| 色综合欧美亚洲国产小说| 老熟妇仑乱视频hdxx| 成年美女黄网站色视频大全免费| 丰满人妻熟妇乱又伦精品不卡| 好男人电影高清在线观看| 亚洲精品中文字幕一二三四区 | 亚洲av欧美aⅴ国产| 夜夜骑夜夜射夜夜干| 蜜桃在线观看..| 老司机午夜福利在线观看视频 | 亚洲国产精品一区三区| 美女午夜性视频免费| 久久精品久久久久久噜噜老黄| 91九色精品人成在线观看| 成年动漫av网址| 久久这里只有精品19| 999久久久精品免费观看国产| 永久免费av网站大全| 亚洲中文日韩欧美视频| 久久亚洲国产成人精品v| 国产精品秋霞免费鲁丝片| 性色av一级| 男女下面插进去视频免费观看| 亚洲欧美一区二区三区久久| 亚洲精品一二三| 欧美日韩亚洲国产一区二区在线观看 | 欧美日韩亚洲高清精品| 男女之事视频高清在线观看| 久久国产亚洲av麻豆专区| 日韩欧美一区二区三区在线观看 | 五月天丁香电影| 岛国毛片在线播放| www.熟女人妻精品国产| 女人高潮潮喷娇喘18禁视频| 久久天躁狠狠躁夜夜2o2o| 热99国产精品久久久久久7| www.av在线官网国产| 91大片在线观看| 少妇精品久久久久久久| 国产欧美日韩综合在线一区二区| 侵犯人妻中文字幕一二三四区| 亚洲欧美精品自产自拍| 国产免费一区二区三区四区乱码| 高清视频免费观看一区二区| 亚洲国产中文字幕在线视频| 精品亚洲成国产av| 亚洲一卡2卡3卡4卡5卡精品中文| 亚洲专区国产一区二区| 中文字幕人妻丝袜制服| 国产av国产精品国产| 亚洲成av片中文字幕在线观看| 久久ye,这里只有精品| 精品一区二区三卡| 菩萨蛮人人尽说江南好唐韦庄| 99热全是精品| 精品福利永久在线观看| 国产免费一区二区三区四区乱码| 一本一本久久a久久精品综合妖精| 亚洲综合色网址| 精品亚洲成国产av| 后天国语完整版免费观看| 成年人午夜在线观看视频| 亚洲人成77777在线视频| 啦啦啦在线免费观看视频4| 国产又色又爽无遮挡免| 91麻豆av在线| 精品亚洲成国产av| 午夜老司机福利片| 国产精品久久久久久精品古装| 亚洲av国产av综合av卡| 两性午夜刺激爽爽歪歪视频在线观看 | 国产区一区二久久| 成年av动漫网址| 亚洲人成电影观看| 手机成人av网站| 俄罗斯特黄特色一大片| 美女福利国产在线| 久久久久精品人妻al黑| 国产日韩一区二区三区精品不卡| 国产日韩欧美在线精品| 国产成人欧美在线观看 | 老司机午夜十八禁免费视频| 黄色 视频免费看| 日本av免费视频播放| 日韩一区二区三区影片| 一级片免费观看大全| 水蜜桃什么品种好| 纵有疾风起免费观看全集完整版| 夜夜骑夜夜射夜夜干| 久久人妻熟女aⅴ| 两性午夜刺激爽爽歪歪视频在线观看 | 一本综合久久免费| 午夜福利免费观看在线| 亚洲欧洲精品一区二区精品久久久| 少妇精品久久久久久久| 成人国语在线视频| 日本91视频免费播放| 国产一区二区在线观看av| 亚洲国产欧美日韩在线播放| 久久性视频一级片| 侵犯人妻中文字幕一二三四区| av网站免费在线观看视频| a 毛片基地| 美女脱内裤让男人舔精品视频| 午夜福利视频精品| 国产一区二区激情短视频 | 一本一本久久a久久精品综合妖精| 国产片内射在线| 日韩精品免费视频一区二区三区| 91麻豆av在线| 80岁老熟妇乱子伦牲交| 欧美中文综合在线视频| 国产av一区二区精品久久| 妹子高潮喷水视频| 中亚洲国语对白在线视频| 欧美日韩精品网址| 俄罗斯特黄特色一大片| 人妻人人澡人人爽人人| 黄色视频,在线免费观看| 啦啦啦中文免费视频观看日本| 日韩,欧美,国产一区二区三区| 啦啦啦中文免费视频观看日本| videosex国产| 丝袜美足系列| 成在线人永久免费视频| 日韩免费高清中文字幕av| 大型av网站在线播放| 黄色视频在线播放观看不卡| 精品福利永久在线观看| 亚洲五月色婷婷综合| 青草久久国产| 日韩中文字幕欧美一区二区| 制服诱惑二区| 日韩制服丝袜自拍偷拍| 精品久久久久久电影网| 丁香六月天网| 后天国语完整版免费观看| 中文字幕制服av| 国产一区二区在线观看av| 十八禁高潮呻吟视频| 国产97色在线日韩免费| 啦啦啦免费观看视频1| 首页视频小说图片口味搜索| 欧美97在线视频| 欧美国产精品一级二级三级| 在线永久观看黄色视频| av天堂久久9| 一本一本久久a久久精品综合妖精| av在线播放精品| 国产欧美亚洲国产| 色视频在线一区二区三区| 亚洲中文av在线| 久久精品国产综合久久久| 天堂中文最新版在线下载| 美女国产高潮福利片在线看| a级毛片在线看网站| 亚洲国产精品成人久久小说| av超薄肉色丝袜交足视频| 一区二区三区激情视频| 久9热在线精品视频| 成人国产一区最新在线观看| 亚洲免费av在线视频| 国产在线观看jvid| 人妻久久中文字幕网| a级片在线免费高清观看视频| 久久国产精品人妻蜜桃| 91精品三级在线观看| 亚洲av成人一区二区三| 免费观看人在逋| 丝袜脚勾引网站| 国产黄色免费在线视频| 国产无遮挡羞羞视频在线观看| 国产av又大| 丝瓜视频免费看黄片| 国产区一区二久久| 久久精品aⅴ一区二区三区四区| 久久久久久久久免费视频了| 一本一本久久a久久精品综合妖精| 亚洲色图综合在线观看| 欧美激情高清一区二区三区|