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

    A Perfect Knob to Scale Thread Pool on Runtime

    2022-08-24 12:56:32FaisalBahadurArifIqbalUmarInsafUllahFahadAlgarniMuhammadAsgharKhanandSamihMostafa
    Computers Materials&Continua 2022年7期

    Faisal Bahadur, Arif Iqbal Umar, Insaf Ullah, Fahad Algarni, Muhammad Asghar Khanand Samih M.Mostafa

    1Department of Information Technology, Hazara University, Mansehra, 21300, Pakistan

    2Hamdard Institute of Engineering and Technology, Islamabad Campus, Pakistan

    3College of Computing and Information Technology, The University of Bisha, Bisha, Saudi Arabia

    4Faculty of Computers and Information, South Valley University, Qena, 83523, Egypt

    Abstract: Scalability is one of the utmost nonfunctional requirement of server applications, because it maintains an effective performance parallel to the large fluctuating and sometimes unpredictable workload.In order to achieve scalability, thread pool system (TPS) has been used extensively as a middleware service in server applications.The size of thread pool is the most significant factor, that affects the overall performance of servers.Determining the optimal size of thread pool dynamically on runtime is a challenging problem.The most widely used and simple method to tackle this problem is to keep the size of thread pool equal to the request rate, i.e., the frequencyoriented thread pool (FOTP).The FOTPs are the most widely used TPSs in the industry, because of the implementation simplicity, the negligible overhead and the capability to use in any system.However, the frequency-based schemes only focused on one aspect of changes in the load, and that is the fluctuations in request rate.The request rate alone is an imperfect knob to scale thread pool.Thus, this paper presents a workload profiling based FOTP, that focuses on request size (service time of request) besides the request rate as a knob to scale thread pool on runtime, because we argue that the combination of both truly represents the load fluctuation in server-side applications.We evaluated the results of the proposed system against state of the art TPS of Oracle Corporation (by a client-server-based simulator) and concluded that our system outperformed in terms of both; the response times and throughput.

    Keywords: Scalability; performance; middleware; workload profiling; multithreading; thread pool

    1 Introduction

    Scalability is one of the utmost non-functional requirements of server-side applications [1],because it increases performance proportional to the resources added in the system on high loads[2].The scalability is entirely dependent upon the middleware architecture, which means that the middleware must be designed in the view of scaling [3].A high scalable system can be achieved only, if the designers and software engineers consider scalability at the initial stages of software development life cycle, when architectural choices are made.Thus, middleware architecture makes server-side applications scalable, highly available and highly performant [4,5].

    The most significant approach used by most of the middleware in order to improve performance and scalability is TPS [6].The TPS is a multithreading architecture, that is used as a middleware, that executes incoming tasks (requests) simultaneously.The TPS has been used frequently as a middleware concurrency control service in web servers, application servers, distributed object computing infrastructures, ultra-large-scale (ULS) systems, for better performance.

    The key concern in TPS is the dynamic optimization of thread pool size, that determines the overall performance of TPS and improves quality of service [7].The experimental studies have proved that the most significant factor that effects the overall performance of application servers is the size of thread pool [8].The TPS-based systems are overloaded either due to the smaller or larger thread pool sizes, instead of adopting an optimal one.Smaller than the optimal pool size wastes processing resources and requests waitmost of the time for the availability of thread, that suffers response times and throughput [9].On the other hand, large pool size than system’s capacity increases thread related overheads that suffer response times [9].These overheads ultimately make the system busymost of the time to manage these overheads instead of letting threads execute requests, thus degrade system performance.These overheads include context switching overhead, scheduling overhead and synchronization overhead.Furthermore, if there are more shared resources between threads, then more synchronization causes additional scheduling overhead that further reduces system performance.

    Thus, the key concern in TPS-based systems is the dynamic optimization of thread pool size that avoids too small or too large pool size in order to elude execution time overhead [7].However,determining the optimal size of thread pool dynamically on runtime is a challenging problem [9].Therefore, majority of the commercial server applications use a simple frequency oriented TPS [6],that uses fluctuations in the request rate to optimize pool size.Using the request rate as a knob to scale thread pool is widely used because of its implementation simplicity, the negligible overhead and the capability to use it in any system.These systems are either bounded, where thread pool size is specified empirically by minimum and maximum limits at server initialization time [10], or unbounded [6], that avoids specifying upper limit and always keeps thread pool size equal to the request rate.

    However, the request rate alone is an imperfect knob to scale thread pool, because request rate is not the only reason that changes the load on the server [11].There is another way in which the load on the server can be changed besides request rate, and that is the request size (service time of request) [11].This type of load fluctuation is too common in server-side applications.However, the service times of newly submitted requests are unknown at schedule time [12].

    Thus, in this paper, the proposed scheme uses a dynamic workload profiling procedure, that computes the service times of newly entered requests in the system and records these times in a hash table.In every second, the average of service times of requests (submitted to the system) is calculated.The average service time is multiplied by the current request rate to yield a number that represents an optimal thread pool size.

    The rest of the paper is organized as follows.Related work is given in Section 2.The design of the proposed system is presented in Section 3.Section 4 is a validation of the proposed system.And finally, the conclusion and future work are presented in Section 5.

    2 Related Work

    This section explores the tuning strategies for thread pool size optimization presented in the past.

    The system resource based TPS has been presented in [13], where CPU and memory utilization metrics are used to optimize thread pool size.However, the system resource metric is a low-level metric that cannot be used as an actual pointer to overload condition.Moreover, successively measuring different types of resource usages after short intervals consumes computational resources and decrease machine capacity [14].

    The response time is considered as a performance metric in [15,16] for TPS optimization.The optimization policies are based on response time observations.After specified time intervals, an algorithm compares successive response times on specific pool size and either increases pool size if response times are higher or decreases pool size if response times are better.However, the response time metric becomes vague and useless for server applications that have requests of different processing times, e.g., multi-tier web applications.Hence, policies [17] have been suggested to smooth response time metric to make it effective in multi-tier applications.

    The average idle time (AIT) of queued requests has been used in [18,19] to optimize the pool size, however, periodically calculating AIT involves stalling the request queue that increases synchronization overhead that effects system performance.

    The throughput metric is used in [20] to optimize the pool size.On throughput fall, the algorithm gradually increases pool size until throughput stability.However, assessing only throughput fall to tune the pool size may affect the response times of the clients.

    The prediction based TPSs have been presented in [21-23], that predict an expected thread pool size that may require in the future, so that, the pool size can be configured in priori.An obvious limitation of all the prediction-based schemes presented is that, the predictions might be inaccurate due the unpredictable workload on the servers.

    The fuzzy [24] and heuristic approaches [25] have been attempted in TPS optimization.However,systems having variation in the nature and size of requests can affect these algorithms.

    The frequency based schemes [26-32] are the most widely used TPSs in the industry [6], that optimizes thread pool size based on request rate on the server.The Oracle Corporation’s Java5.0 provides ThreadPoolExecutor [26], that optimizes pool size on the basis of client’s request rate (i.e., frequency).The pool size increases gradually on high request rate up to amaximumlimit, that defines a boundary that cannot be exceeded.The maximum limit must be defined initially and can’t be changed on run time.If the maximum limit is initialized with an unbounded option (Integer.MAX_VALUE), then ThreadPoolExecutor behaves as an unbounded TPS, where an unlimited upscaling of thread pool size is considered.TheApache Software Foundation provides a TPS calledWatermark Executor [27] to boost up the performance of web services.This TPS is an extension of ThreadPoolExecutor [26] in the formof a balancing act between request frequency and queue draining speed.If the request queue gets to a certain size (watermark), more threads will be added until the maximum number of threads.This is different from ThreadPoolExecutor [26] that starts adding threads as soon as all the other threads are used.A real time middleware is presented in [28], that optimized the size of thread pool by linear approach.The middleware is presented for Cyber Physical Systems (CPS).The thread pool size is optimized based on the incoming load condition (frequency).Similarly, another real time middleware is presented in [29] that utilized a dynamic thread pool that receives, processes and retransmits the requests arrived in a distributed IoT environment.This scheme optimized thread pool size by the rate of received packets (frequency) and the retransmission time of packets.A distributed FOTP is presented in [30] for clusters, that uses non-blocking queue that drives thread safety not from locks but from atomic operation.This design was targeted to only distributed shared memory systems.The TPSs at each node of the cluster are optimized on the basis of request rate on corresponding node.Another distributed FOTP is presented in [31], where FOTPs running at the backend servers are optimized on request rate, and memory utilization is assessed to detect an overload condition on backend servers.The queuing theory based TPS is presented in [32], however, an offline system profiling strategy is adopted and run the offline profiling strategy on n-tier system for 100 min in order to generate near optimal thread pool size of each tier.The offline system profiling procedure is tedious, cumbersome, and impractical.Moreover, this approach is ineffective due to the dynamics and unpredictability of the workload, especially in the cloud, hence it needs to regenerate thread pool size when workload characteristics change.

    None of the frequency based TPS considered to calculate the combination of request size (service time) and request rate on run time to represent a true load on the system, because the real load fluctuation is truly represented by these two factors which must be calculated on runtime.Hence, this paper presents a dynamic workload profiling based FOTP, that computes the service times of newly entered requests in the system (on runtime) and records these times in a hash table.In every second,the average of service times of requests (submitted to the system) is calculated and multiplied by the current request rate to determine an optimal thread pool size.

    3 System Architecture of Proposed FOTP

    This section discusses the system architecture of the dyna mic workload profiling based FOTP.The FOTP is composed of collection of components shown in Fig.1.

    Figure 1: System architecture of workload profiling based FOTP running in a multi-threaded server

    The Receiver is a thread, that receives client’s requests for processing.On every request arrival,it increments the Counter object that is used to keep track of the request rate per second on FOTP.After every second, the value of the Counter is repeatedly saved and reset to zero by the Frequency Detector (timer).In this way, both Counter and Frequency Detector keep track of the request rate per second on FOTP.The Receiver forwards request to the Tag_Binder for further processing, that uses the request’s identifier (ID) as an index into the hash table to fetch the service time of requests.If it is found, then it adds the service time to the variable named total_ST (i.e., total service time), binds a service time tag with the request and finally push the request in the request queue.If request’s ID does not exist in the hash table, then the request is simply pushed into the request queue.Eq.(1) is used to calculate the sum of service times of all requests entered in the system per second, which is represented by total_ST variable.

    The total_ST is accessed by the Frequency Detector to calculate the average of service time per second.This is a timer thread, that activates after every second, and keeps track of the frequency of change in the real load every second on the system.The real load comprises of the combination of request rate and the service times of all requests entered per second in the system.The request rate per second is tracked by the Counter and saved in the Frequency object.The service times of all requests entered per second in the system is tracked by the total_ST variable.Eq.(2) is used by the Frequency Detector to calculate the average of service times of all requests entered per second in the system.

    For all requests entered per second in the system from 1 to Counter, the avg_ST (i.e., average service time) is calculated by dividing the sum of their service time by Counter.However, the service time of requests are unknown when they first time enter in the system.Thus, the dynamic workload profiling procedure computes the service times of newly entered requests by time stamping and records the service times in a hash table.The requests are time stamped at two stages, right before the request execution (StartTime), and finally, after request completion (EndTime).The stamps are only marked on those requests that are entered first time in the system and their service time is not present in the hash table.This table maintains the service times of each request.The request_ID is used as an indexed into the hash table by a hash function, that keeps the service time of request if index exists.By using the request_ID as an index, the average search time complexity of any element is O (1).The untagged requests are marked with the StartTime stamp by thread just before their execution.After request completion, these untagged requests are again marked with the EndTime stamp and handover to the ST_Calculator (i.e., service time calculator).Eq.(3) is used by the ST_Calculator to calculates the service time of request.The ST_Calculator records the service time in the hash table.Finally, it enqueues the request in the Response Queue.

    When Frequency Detector runs, it saves the Counter in the Frequency object, computes the avg_ST, resets the total_ST and Counter to zero and finally, it runs the dynamic tuning strategy (DTS)thread, that is responsible to optimize the size of thread pool.The thread pool is a dynamic linked list,that holds threads to execute client’s request.The thread pool expands dynamically, when threads are added in it by the DTS, when needed.It also shrinks, when request rate falls down from high to low request rate, and some threads becomes idle in the pool till certain specified threshold time.Every thread of thread pool is equipped with a timer, that starts only when thread is idle in the pool.The timer destroys corresponding thread, if it is idle for threshold time (500 milliseconds), in order to reduce the pool size.

    TheDTS thread is run by the FrequencyDetector every second before finishing its own execution.It dynamically optimizes thread pool size by assessing the request rate and service times of queued requests.When it starts running for the first time, it keeps its pool size parallel to the request rate, however, in the subsequent runs, it also assesses the workload’s service times.

    The avg_ST (Eq.(2)) is passed to the DTS by the Frequency Detector and the current request rate is read by theDTS fromFrequency object.The DTSmaintains an appropriate number of threads in the thread pool by assessing avg_ST (Eq.(2)) and request rate.Eq.(4) is used to calculate an appropriate number of threads in thread pool by the DTS.

    where, the λ in Eq.(4) is the request rate per second.

    Suppose that, the request rate is 10 requests per second, where all requests have service times of 2s,then according to Eq.(4), thePoolSize=10*2=20.In case, if all requests have service time of 0.5 s, thenPoolSize=10*0.5=5.Since 5 threads can handle 10 requests (of 0.5 s) in one second, hence this will not affect the throughput.However, the response times of 5 out of 10 requests will be compromised,i.e., 5 requests will have to wait for 0.5 s for thread availability and consecutive request arrival will further increase the wait times of requests.Hence, for small service timed workload (having avg_ST less than or equal to 1 s), we only consider λ(i.e., request arrival rate) to set a pool size, so that 10 threads can be assigned to 10 requests to gain response time improvement.Hence, Eq.(4) is used to tune the pool size only whenService Time(k)/nis greater than 1, that represents high service time intensity workload of greater than 1 s.Otherwise, we only consider λ as the pool size.In short, this paper uses the following if-else construct to tune the pool size.

    The algorithm of DTS to tune the pool size is given in Fig.2.

    Figure 2: Algorithm of dynamic tuning strategy

    At the start of the algorithm, the pool size is set to the request rate, if workload (avg_ST) per second is smaller than or equal to 1 s.Otherwise, if the workload is greater than 1 s, then pool size is set to the product of the request rate and average service times of requests.

    4 Validating the Proposed FOTP

    In this section, we compared the performance of workload profiling based FOTP with Thread-PoolExecutor [26] on different workloads.The ThreadPoolExecutor uses request rate to optimize thread pool size.Both of the TPSs are initialized with 10 threads.This test has been performed on a single system, through jPoolRunner [33] simulation toolkit.We embedded both of the TPSs in the server-tier of simulation system through its extension framework.The client and the server tiers of the simulation system are running on the localhost i.e., single machine.

    The workload used for this test is depicted Tab.1.The workload is mostly I/O bound, because we are performing this simulation test on a single system.The dynamic workload is kept small to protect seizing processing resources.The 50% of workload is high I/O intensive (2 s) in order to show the effectiveness of proposed FOTP system over pool size that improves system performance.Fig.3 depicts the load generated for 1 min, that follows poisson distribution, with λ=100.In Fig.3 the x axis represents time in seconds and y axis represents total number of requests sent on specific time.

    Table 1: Workload detail

    Figure 3: The generated load on the server

    Fig.4 presents a comparative analysis of pool sizes maintained by both of the TPSs in the wholetest run.The ThreadPoolExecutor kept its pool size equals to the highest request rate generated duringthe test run.Initially, the pool size is 10, afterward, the pool size is parallel to the next highest requestrate.The proposed FOTP kept its pool size equal to the request rate at the start, as the service timesare unknown to the FOTP.The service times of four different types of requests are measured andrecorded by the dynamic workload profiler on the very first arrival in the first second, hence the poolsize raised (≈114) further in the next second due to assessing both request rate and service time ofthe Fig.4, that on 10thsecond, the FOTP increased the pool size more than ThreadPoolExecutor.The FOTP created threads more than the request rate due to the large service times of requests, hence all of the requests got a proper response.

    Figure 4: Comparative analysis of pool sizes

    Fig.5 is a comparative analysis of throughputs of both schemes, which shows that the FOTP produces higher throughput than ThreadPoolExecutor due to its appropriate pool size in the whole test run.It can be seen in the figure, that the ThreadPoolExecutor took a little bit long time to complete than FOTP.The FOTP produces all responses in less amount of time (60 s) than ThreadPoolExecutor, because of its appropriate pool size.In case of FOTP, all of the requests almost got a proper response by available threads in the pool, hence the average throughput is 98 responses per second in Fig.6, whereas, the ThreadPoolExecutor produces 80 responses per second.

    Figure 5: Comparative analysis of throughputs

    Figure 6: Comparative analysis of average responses produced per second by both schemes

    Fig.7 presents a comparative analysis of response times of both systems.The FOTP reduces response times as compared to ThreadPoolExecutor, because it provides an optimal number of threads in the pool that picks and executes requests in performance efficient manner.ThreadPoolExecutor created small number of threads in the pool, as a result, the requests have to wait more in the queue for thread availability, hence, response times increased ultimately.The 50th, 90thand 95thpercentiles of FOTP are around 2 s.This is due to the workload characteristic of service time, because 50% workload has service time of 2 s.In case of ThreadPoolExecutor, the percentile response times have increased due to the waiting of requests in the request queue due to inappropriate quantity of threads in the pool.

    Figure 7: Comparative analysis of response times percentiles produced by both schemes

    5 Conclusion and Future Work

    This paper presented a workload profiling based frequency-oriented thread pool system, that focused on the combination of request size (service time) and the request rate to represent the real load on the server.The real load is used to set an optimal thread pool size of frequency-oriented thread pool system on runtime.Thus, the paper presented a combination of both; the request size (service time)and the request rate, as a knob to scale thread pool on runtime.We evaluated the proposed scheme against a request rate based TPS on high service time workload, and we found that, the proposed scheme is creating an optimal pool size.Hence, as compared to the request rate based TPS, the average throughput of the proposed scheme is increased by 22.5% and the response time reduction is 35% for 50thpercentile, 59.8% for 90thpercentile and 73.5% for 95thpercentile.

    In the future, we will implement an overload management scheme in the proposed system.Moreover, we will provide a distributed form of the proposed scheme for distributed server applications.

    Funding Statement:The authors received no specific funding for this study.

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

    男女啪啪激烈高潮av片| 久久精品久久精品一区二区三区| 久久久久精品性色| 99热这里只有是精品50| 久久久久久久久久久免费av| 免费播放大片免费观看视频在线观看| 在线观看美女被高潮喷水网站| 三级毛片av免费| videos熟女内射| 伦理电影大哥的女人| 久久99蜜桃精品久久| 日本猛色少妇xxxxx猛交久久| 免费观看的影片在线观看| 成人亚洲精品av一区二区| 日韩成人伦理影院| 我的老师免费观看完整版| 成人国产麻豆网| 综合色av麻豆| 人妻少妇偷人精品九色| 午夜免费男女啪啪视频观看| 日韩精品青青久久久久久| 国产欧美另类精品又又久久亚洲欧美| 91精品伊人久久大香线蕉| 99久国产av精品| 91狼人影院| 汤姆久久久久久久影院中文字幕 | 国产精品熟女久久久久浪| 国产在线一区二区三区精| 欧美激情久久久久久爽电影| 热99在线观看视频| 午夜老司机福利剧场| 熟妇人妻不卡中文字幕| 熟女电影av网| 亚洲av免费在线观看| 成人无遮挡网站| 丝瓜视频免费看黄片| 免费无遮挡裸体视频| 3wmmmm亚洲av在线观看| 亚洲婷婷狠狠爱综合网| 亚洲人成网站高清观看| 欧美三级亚洲精品| 99久久中文字幕三级久久日本| 少妇猛男粗大的猛烈进出视频 | 黄色一级大片看看| 美女国产视频在线观看| 午夜福利视频1000在线观看| 大又大粗又爽又黄少妇毛片口| 国产一级毛片七仙女欲春2| 亚州av有码| 婷婷色综合www| 精品人妻一区二区三区麻豆| 国产午夜福利久久久久久| 丰满人妻一区二区三区视频av| av国产久精品久网站免费入址| 成年av动漫网址| 看免费成人av毛片| 美女国产视频在线观看| 亚洲精品日本国产第一区| 老师上课跳d突然被开到最大视频| 免费av不卡在线播放| 日韩精品青青久久久久久| 91av网一区二区| 国产综合精华液| 少妇猛男粗大的猛烈进出视频 | 国产精品国产三级国产av玫瑰| 毛片一级片免费看久久久久| 狠狠精品人妻久久久久久综合| 国产探花极品一区二区| 日韩欧美 国产精品| 午夜激情久久久久久久| 人妻少妇偷人精品九色| 小蜜桃在线观看免费完整版高清| 日产精品乱码卡一卡2卡三| 淫秽高清视频在线观看| 婷婷色av中文字幕| av福利片在线观看| 丰满人妻一区二区三区视频av| 久久国内精品自在自线图片| 九九爱精品视频在线观看| 伦理电影大哥的女人| 国产伦精品一区二区三区视频9| 啦啦啦中文免费视频观看日本| 如何舔出高潮| 国产老妇女一区| 我的女老师完整版在线观看| 日韩欧美精品免费久久| 大又大粗又爽又黄少妇毛片口| 中文天堂在线官网| 深爱激情五月婷婷| 亚洲美女搞黄在线观看| 精品国产露脸久久av麻豆 | 高清毛片免费看| 欧美最新免费一区二区三区| 欧美精品国产亚洲| 久久久久性生活片| 国产精品.久久久| 亚洲美女视频黄频| av国产久精品久网站免费入址| 国产 一区 欧美 日韩| av.在线天堂| 久久久国产一区二区| 国产精品美女特级片免费视频播放器| 欧美激情国产日韩精品一区| 在线观看一区二区三区| 久久久色成人| 日日摸夜夜添夜夜添av毛片| 日本午夜av视频| 国产成人a∨麻豆精品| 高清在线视频一区二区三区| 22中文网久久字幕| 在线观看美女被高潮喷水网站| 中文字幕亚洲精品专区| 夜夜看夜夜爽夜夜摸| 天堂√8在线中文| 午夜激情欧美在线| 一个人看视频在线观看www免费| 亚洲欧洲国产日韩| 男人爽女人下面视频在线观看| 小蜜桃在线观看免费完整版高清| 日本午夜av视频| 91精品伊人久久大香线蕉| 亚洲美女搞黄在线观看| 国产成人精品久久久久久| 中文精品一卡2卡3卡4更新| 国产精品一区www在线观看| 80岁老熟妇乱子伦牲交| 最新中文字幕久久久久| 久99久视频精品免费| 小蜜桃在线观看免费完整版高清| 国产不卡一卡二| 一区二区三区乱码不卡18| 成人综合一区亚洲| 日本与韩国留学比较| 日本av手机在线免费观看| 特大巨黑吊av在线直播| 高清午夜精品一区二区三区| 欧美性猛交╳xxx乱大交人| 91精品国产九色| 国产白丝娇喘喷水9色精品| 免费不卡的大黄色大毛片视频在线观看 | 久久久久久久久久久丰满| 高清午夜精品一区二区三区| 国产亚洲最大av| 国产精品伦人一区二区| av.在线天堂| 精品一区在线观看国产| 亚洲久久久久久中文字幕| 国产精品久久久久久久电影| 国产精品精品国产色婷婷| 午夜福利成人在线免费观看| 国产免费一级a男人的天堂| 淫秽高清视频在线观看| 日韩欧美国产在线观看| 日日啪夜夜撸| 春色校园在线视频观看| 麻豆成人av视频| 亚洲伊人久久精品综合| 成人av在线播放网站| 国产精品99久久久久久久久| 婷婷六月久久综合丁香| 狂野欧美白嫩少妇大欣赏| 亚洲欧美日韩东京热| 婷婷六月久久综合丁香| 三级国产精品片| 99久久九九国产精品国产免费| 免费电影在线观看免费观看| 韩国av在线不卡| 欧美不卡视频在线免费观看| 亚洲欧洲日产国产| 欧美日韩亚洲高清精品| 成人毛片a级毛片在线播放| 亚洲最大成人av| 久久精品国产亚洲av天美| 纵有疾风起免费观看全集完整版 | 精品久久久久久久人妻蜜臀av| 免费观看a级毛片全部| 亚洲综合精品二区| 特级一级黄色大片| 精品久久久久久久久av| 欧美成人午夜免费资源| 91久久精品电影网| 国产成人a∨麻豆精品| 欧美潮喷喷水| 精品久久久久久电影网| 色视频www国产| 欧美最新免费一区二区三区| 欧美日韩视频高清一区二区三区二| 久久久久久久久久久丰满| 国产欧美日韩精品一区二区| 免费播放大片免费观看视频在线观看| 非洲黑人性xxxx精品又粗又长| 精品人妻一区二区三区麻豆| 亚洲欧美精品专区久久| 久久久久精品性色| 大陆偷拍与自拍| 亚洲欧洲日产国产| 别揉我奶头 嗯啊视频| 男的添女的下面高潮视频| 国产精品蜜桃在线观看| 国产永久视频网站| 男插女下体视频免费在线播放| 欧美变态另类bdsm刘玥| 又大又黄又爽视频免费| 久久人人爽人人片av| 一个人看的www免费观看视频| 日本猛色少妇xxxxx猛交久久| 亚洲av不卡在线观看| 欧美精品一区二区大全| 嫩草影院入口| 日韩国内少妇激情av| 亚洲av福利一区| 一级黄片播放器| 成人亚洲精品一区在线观看 | 91久久精品电影网| 两个人视频免费观看高清| 大又大粗又爽又黄少妇毛片口| 精华霜和精华液先用哪个| 日韩亚洲欧美综合| 女人久久www免费人成看片| 国产黄a三级三级三级人| 晚上一个人看的免费电影| 全区人妻精品视频| av在线播放精品| 亚洲在线自拍视频| 亚洲欧美成人综合另类久久久| 能在线免费观看的黄片| 免费观看在线日韩| 深爱激情五月婷婷| 国产欧美日韩精品一区二区| 精品国产三级普通话版| 亚洲精品中文字幕在线视频 | 一个人观看的视频www高清免费观看| 男女那种视频在线观看| 日本wwww免费看| 99热6这里只有精品| 国产精品一区二区在线观看99 | 伊人久久国产一区二区| 日本色播在线视频| 一级黄片播放器| 国产熟女欧美一区二区| 国产av国产精品国产| 可以在线观看毛片的网站| 在线观看一区二区三区| 久久99热6这里只有精品| 你懂的网址亚洲精品在线观看| 青青草视频在线视频观看| 国产日韩欧美在线精品| 久久久久精品久久久久真实原创| 久久精品久久久久久久性| 日本免费在线观看一区| 日日干狠狠操夜夜爽| 男女啪啪激烈高潮av片| 色播亚洲综合网| 国产成人午夜福利电影在线观看| 亚洲熟妇中文字幕五十中出| 国产大屁股一区二区在线视频| av在线观看视频网站免费| 久久久久九九精品影院| 九草在线视频观看| 亚洲av一区综合| 欧美潮喷喷水| av又黄又爽大尺度在线免费看| 狠狠精品人妻久久久久久综合| 久久精品人妻少妇| 国产精品熟女久久久久浪| 99久久九九国产精品国产免费| 91久久精品国产一区二区三区| 国产综合懂色| 少妇人妻一区二区三区视频| 三级毛片av免费| 人人妻人人澡人人爽人人夜夜 | 狂野欧美白嫩少妇大欣赏| 国产高清不卡午夜福利| 色播亚洲综合网| 国产精品不卡视频一区二区| 国产国拍精品亚洲av在线观看| 欧美成人午夜免费资源| 日韩中字成人| 久久精品久久久久久久性| 人妻夜夜爽99麻豆av| 久久97久久精品| 国产午夜精品一二区理论片| 床上黄色一级片| 日本三级黄在线观看| 日韩欧美 国产精品| 18禁在线无遮挡免费观看视频| 国产精品99久久久久久久久| 亚洲最大成人av| 欧美97在线视频| 国产成人免费观看mmmm| 日本三级黄在线观看| 中文欧美无线码| 国产黄色视频一区二区在线观看| 国产成人精品久久久久久| 好男人视频免费观看在线| 国产成人一区二区在线| 乱人视频在线观看| 国产在线男女| 亚洲国产欧美人成| 精品一区二区三卡| 日韩制服骚丝袜av| 18禁动态无遮挡网站| 免费看a级黄色片| 在线免费十八禁| 国产熟女欧美一区二区| 性色avwww在线观看| 看免费成人av毛片| 国产一区二区亚洲精品在线观看| 精品久久久噜噜| 菩萨蛮人人尽说江南好唐韦庄| 国产精品伦人一区二区| 欧美日韩在线观看h| 少妇人妻精品综合一区二区| 国产乱人视频| 久久精品夜色国产| 久久精品人妻少妇| 丰满少妇做爰视频| 看十八女毛片水多多多| 日韩av在线大香蕉| 天天一区二区日本电影三级| 嫩草影院新地址| 国产成人午夜福利电影在线观看| 男女国产视频网站| 久久久久久久久中文| xxx大片免费视频| 国产 一区 欧美 日韩| 热99在线观看视频| 久久精品国产鲁丝片午夜精品| 亚洲熟女精品中文字幕| 嘟嘟电影网在线观看| 久久久午夜欧美精品| 人妻少妇偷人精品九色| 久久热精品热| 久久精品夜色国产| 久久久午夜欧美精品| 国产成人aa在线观看| 寂寞人妻少妇视频99o| 春色校园在线视频观看| 欧美三级亚洲精品| 五月天丁香电影| 高清午夜精品一区二区三区| 亚洲婷婷狠狠爱综合网| 97超碰精品成人国产| 亚洲av.av天堂| 国产久久久一区二区三区| 麻豆久久精品国产亚洲av| 久久99热这里只频精品6学生| 国产欧美日韩精品一区二区| 丰满乱子伦码专区| 91精品一卡2卡3卡4卡| 国产一区二区亚洲精品在线观看| 久久久精品免费免费高清| 有码 亚洲区| 成人综合一区亚洲| 久久久国产一区二区| 国产日韩欧美在线精品| 九色成人免费人妻av| 国产免费又黄又爽又色| 又粗又硬又长又爽又黄的视频| 国产色爽女视频免费观看| 久久久久久伊人网av| 丝瓜视频免费看黄片| 日韩中字成人| 亚洲精品乱码久久久v下载方式| 国内揄拍国产精品人妻在线| 99热这里只有精品一区| av在线观看视频网站免费| 免费黄色在线免费观看| 男女啪啪激烈高潮av片| 久久精品国产亚洲网站| 日韩一本色道免费dvd| 国产亚洲精品久久久com| 国产有黄有色有爽视频| 亚洲av免费高清在线观看| 国产免费福利视频在线观看| 精品一区二区三区视频在线| 日韩av在线免费看完整版不卡| 久99久视频精品免费| 国产精品综合久久久久久久免费| 久久精品夜色国产| 午夜日本视频在线| 三级国产精品片| 人人妻人人澡欧美一区二区| 亚洲精品456在线播放app| 哪个播放器可以免费观看大片| 一级av片app| av国产免费在线观看| 男人狂女人下面高潮的视频| 国内揄拍国产精品人妻在线| 又爽又黄a免费视频| 色吧在线观看| 国产色婷婷99| av一本久久久久| 久久亚洲国产成人精品v| 日韩强制内射视频| 麻豆成人av视频| 搡老妇女老女人老熟妇| 欧美人与善性xxx| 免费看美女性在线毛片视频| 免费大片黄手机在线观看| 一二三四中文在线观看免费高清| 三级经典国产精品| 全区人妻精品视频| 精品一区二区三区视频在线| 午夜日本视频在线| 91精品国产九色| 国产不卡一卡二| 亚洲av在线观看美女高潮| 日日撸夜夜添| 成人一区二区视频在线观看| 噜噜噜噜噜久久久久久91| 国产精品不卡视频一区二区| 最近中文字幕高清免费大全6| 国产精品.久久久| 亚洲婷婷狠狠爱综合网| 欧美三级亚洲精品| 亚洲成人久久爱视频| 国产精品国产三级专区第一集| 美女高潮的动态| 亚洲精品日韩av片在线观看| 欧美 日韩 精品 国产| 亚洲精品日韩在线中文字幕| 一区二区三区乱码不卡18| 日韩,欧美,国产一区二区三区| 午夜福利高清视频| av免费观看日本| 亚洲高清免费不卡视频| 亚洲av中文字字幕乱码综合| 日韩精品有码人妻一区| 国产成人aa在线观看| 免费av不卡在线播放| 久久精品久久精品一区二区三区| 国产激情偷乱视频一区二区| 婷婷六月久久综合丁香| 蜜桃亚洲精品一区二区三区| 天天躁夜夜躁狠狠久久av| 亚洲国产色片| 国产精品一区二区性色av| 99久国产av精品国产电影| 免费av不卡在线播放| 搡老妇女老女人老熟妇| 亚洲国产日韩欧美精品在线观看| xxx大片免费视频| 亚洲天堂国产精品一区在线| 欧美日韩精品成人综合77777| 一级黄片播放器| 中文天堂在线官网| 亚洲精品国产av成人精品| 网址你懂的国产日韩在线| 国产免费视频播放在线视频 | 少妇的逼好多水| 一级毛片aaaaaa免费看小| 乱人视频在线观看| 欧美不卡视频在线免费观看| 美女cb高潮喷水在线观看| 18禁在线播放成人免费| 精品酒店卫生间| 美女cb高潮喷水在线观看| ponron亚洲| 亚洲成人一二三区av| 日本wwww免费看| 成人综合一区亚洲| 欧美性感艳星| 欧美最新免费一区二区三区| 精品欧美国产一区二区三| 男女边摸边吃奶| 女人被狂操c到高潮| 久久久成人免费电影| 亚洲人成网站高清观看| 噜噜噜噜噜久久久久久91| 国内精品一区二区在线观看| 免费观看的影片在线观看| 午夜日本视频在线| 亚洲久久久久久中文字幕| av又黄又爽大尺度在线免费看| 人人妻人人看人人澡| av在线播放精品| 你懂的网址亚洲精品在线观看| 亚洲成人久久爱视频| 亚洲精品成人久久久久久| 亚洲国产精品国产精品| 国国产精品蜜臀av免费| www.av在线官网国产| 免费观看的影片在线观看| 日韩精品青青久久久久久| 午夜精品国产一区二区电影 | 噜噜噜噜噜久久久久久91| 国产毛片a区久久久久| 禁无遮挡网站| 亚洲精品日韩在线中文字幕| 成人亚洲精品av一区二区| 亚洲18禁久久av| 国产成人午夜福利电影在线观看| 国产成人a∨麻豆精品| 日本黄大片高清| 国产精品一二三区在线看| 亚洲国产av新网站| 天堂av国产一区二区熟女人妻| 日本av手机在线免费观看| 精品不卡国产一区二区三区| 午夜激情福利司机影院| 少妇丰满av| 日韩视频在线欧美| 啦啦啦中文免费视频观看日本| 日本-黄色视频高清免费观看| 久久人人爽人人片av| 国产伦精品一区二区三区视频9| 可以在线观看毛片的网站| 亚洲欧美日韩卡通动漫| 一区二区三区高清视频在线| 18禁动态无遮挡网站| 亚洲av福利一区| 欧美人与善性xxx| 婷婷色综合www| 亚洲真实伦在线观看| 又爽又黄a免费视频| 国产视频首页在线观看| 亚洲色图av天堂| 亚洲国产色片| 久久精品国产自在天天线| 大又大粗又爽又黄少妇毛片口| 一个人免费在线观看电影| 国产熟女欧美一区二区| 麻豆精品久久久久久蜜桃| 久久久久久久久大av| 日韩欧美一区视频在线观看 | 免费观看av网站的网址| 好男人视频免费观看在线| 99视频精品全部免费 在线| 亚洲综合精品二区| 国产有黄有色有爽视频| 久久久色成人| 91久久精品国产一区二区成人| 国产成人精品一,二区| 日韩av免费高清视频| 中文字幕av在线有码专区| 亚洲av电影在线观看一区二区三区 | 亚洲av免费高清在线观看| 成人毛片a级毛片在线播放| 午夜爱爱视频在线播放| av网站免费在线观看视频 | 日韩电影二区| 有码 亚洲区| 日韩电影二区| 国产成人福利小说| 成年女人在线观看亚洲视频 | 欧美一区二区亚洲| 日韩在线高清观看一区二区三区| 日韩大片免费观看网站| 色尼玛亚洲综合影院| 久久99热这里只有精品18| 午夜福利成人在线免费观看| eeuss影院久久| 丝瓜视频免费看黄片| 久久久成人免费电影| 亚洲精品一区蜜桃| 美女国产视频在线观看| 国产大屁股一区二区在线视频| 丰满人妻一区二区三区视频av| 亚洲天堂国产精品一区在线| 综合色av麻豆| 熟女电影av网| 国产一级毛片在线| 高清av免费在线| 欧美不卡视频在线免费观看| 少妇人妻精品综合一区二区| 国产成人免费观看mmmm| 国产精品99久久久久久久久| 五月天丁香电影| 日韩不卡一区二区三区视频在线| a级一级毛片免费在线观看| 午夜福利在线观看吧| 国产三级在线视频| 亚洲在线观看片| 女人十人毛片免费观看3o分钟| 亚洲第一区二区三区不卡| 一级av片app| 一边亲一边摸免费视频| 波野结衣二区三区在线| 国产精品一二三区在线看| 亚洲av福利一区| 国产黄片美女视频| 一级黄片播放器| 日韩三级伦理在线观看| 黄色配什么色好看| 久久人人爽人人片av| 日韩三级伦理在线观看| 九草在线视频观看| 99热全是精品| 日韩欧美三级三区| 国产精品一区二区三区四区免费观看| 能在线免费观看的黄片| 一级毛片 在线播放| 少妇熟女aⅴ在线视频| 国产黄色视频一区二区在线观看| av免费在线看不卡| 精品少妇黑人巨大在线播放| 精品欧美国产一区二区三| 久久这里只有精品中国| 色5月婷婷丁香| 久久久久精品性色| 色综合亚洲欧美另类图片| 搞女人的毛片| 狂野欧美白嫩少妇大欣赏| 免费电影在线观看免费观看| 十八禁网站网址无遮挡 | 国产一区二区在线观看日韩| 午夜免费观看性视频| 欧美日韩国产mv在线观看视频 | 亚洲精品视频女| 国产色爽女视频免费观看| 国产免费视频播放在线视频 | 尤物成人国产欧美一区二区三区| 一级毛片久久久久久久久女| 久久热精品热|