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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Using KernelShark to analyze the real-time scheduler【转】

發布時間:2023/12/10 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Using KernelShark to analyze the real-time scheduler【转】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:https://lwn.net/Articles/425583/

This article brought to you by LWN subscribers

Subscribers to LWN.net made this article — and everything that surrounds it — possible. If you appreciate our content, please buy a subscription and make the next set of articles possible.

?

February 2, 2011

This article was contributed by Steven Rostedt

The last LWN article on Ftrace described trace-cmd, which is a front end tool to interface with Ftrace. trace-cmd is all command line based, and works well for embedded devices or tracing on a remote system. But reading the output in a text format may be a bit overwhelming, and make it hard to see the bigger picture. To be able to understand how processes interact, a GUI can help humans see what is happening at a global scale. KernelShark has been written to fulfill this requirement. It is a GUI front end to trace-cmd.

KernelShark is distributed in the same repository that trace-cmd is:

git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/trace-cmd.git

To build it, you just need to type make?gui, as just typing make will only build trace-cmd. These two tools have been kept separate since a lot of embedded devices do not have the libraries needed to build KernelShark. A full HTML help is included in the repository and is installed with make install_doc. After installing the documentation, you can access the help directly from KernelShark from the "Help" menu.

This article is not a tutorial on using KernelShark, as everything you need to know about the tool is kept up-to-date in the KernelShark repository. Instead, this article will describe a use case that KernelShark was instrumental in helping to solve.

Analyzing the real-time scheduler

Some time ago, when the push/pull algorithm of the real-time scheduler in Linux was being developed, a decision had to be made about what to do when a high priority process wakes up on a CPU running a lower real-time priority process, where both processes have multiple CPU affinity, and both can be migrated to a CPU running a non-real-time task. One would think that the proper thing to do would be to simply wake up the high priority process on that CPU which would cause the lower priority process to be pushed off the running CPU. But a theory was that by doing so, we move a cache hot real-time process onto a cache cold CPU and possibly replace it with a cache cold process.

After some debate, the decision was made to migrate the high priority process to the CPU running the lowest priority task (or no task at all) and wake it there. Some time later, after the code was incorporated into mainline, I started to question this decision even though I was the one that fought for it. With the introduction of Ftrace, we now have a utility to truly examine the impact that decision has made.

The decision to move the higher priority task was based on an assumption that if the task was waking up, that it is more likely to be cache cold than a task that is already running. Thinking more about this case, one must think about what would cause a high priority task to wake up in the first place. If it is woken up periodically to do some work, then it can very well be the case that it will be cache cold. Any task that was scheduled in between can easily push out the cache of this high priority task. But what if the high priority task was blocked on a mutex? If the task was blocked on a mutex and another RT task was scheduled in its place then when the high priority task wakes up again, there is a good chance that the task will be cache hot.

A mutex in most real-time programs will usually be held for a short period of time. The PREEMPT_RT patch, which this code was developed from, converts spinlocks into mutexes, and those mutexes are held for very small code segments, as all spinlocks should be. Migrating a task simply because it blocked on a mutex increases the impact these locks have on the throughput. Why punish the high priority task even more because it blocked and had to wait for another task to run?

Before making any decision to change the code, I needed to have a test case that can show that the moving of a high priority task instead of preempting the lower priority task will cause the high priority task to ping pong around the CPUs when there is lock contention. A high priority task should not be punished (migrated) if it simply encounters lock contention with lower priority real-time tasks. It would also be helpful to know how changing this decision affects the total number of migrations for all the tasks under lock contention.

First try

Having a 4 processor box to play with, I started writing a test case that would possibly cause this scenario, and use Ftrace to analyze the result. The first test case to try was to create five threads (one more than CPUs) and four pthread mutex locks. Have all threads wake up from a barrier wait and then loop 50 times grabbing each lock in sequence and do a small busy loop. The name of this test is called migrate.c.

The test application uses trace_marker as explained in previous articles to write what is happening inside the application to synchronize with kernel tracing.

Running the following with trace-cmd:

# trace-cmd record -e 'sched_wakeup*' -e sched_switch -e 'sched_migrate*' migrate# kernelshark

Like trace-cmd report, KernelShark will, by default, read the file trace.dat. You can specify another file by naming it as the first argument to KernelShark. While the KernelShark display images may be difficult to read fully in the article, clicking any of them will bring up a full-resolution version.

Since all tasks have been recorded, even trace-cmd itself, we want to filter out any tasks that we do not care about. Selecting Filter->Tasks from the KernelShark menu, and then choosing only the migrate threads will remove the extraneous tasks. Note that events that involve two tasks, like sched_switch or sched_wakeup, will not be filtered out if one of the tasks should be displayed.

In the default graph view, each on-line CPU is represented by a plot line. Each task is represented by a different color. The color is determined by running the process ID through a hash function and then parsing that number into a RGB format.

  • The purple (???) colored bar represents thread?4, the highest priority task.
  • The orange(ish) (???) colored bar represents thread?3.
  • The turquoise (???) colored bar represents thread?2.
  • The brown (???) colored bar represents thread?1.
  • The light blue (???) colored bar represents thread?0, the lowest priority task.

The lines sticking out of the top of the bars represent events that appear in the list below the graph.

By examining the graph we can see that the test case was quite naive. The lowest priority task, thread?0, never got to run until the other four tasks were finished. This makes sense as the machine only had four CPUs and there were four higher priority tasks running. The four running tasks were running in lock step, taking the locks in sequence. From this view it looks like the tasks went out of sequence, but if we zoom in to where the migrations happened, we see something different.

To zoom into the graph, press and hold the left mouse button. A line will appear, then drag the mouse to the right. As the mouse moves off the line, another line will appear that follows the mouse. When you let go of the mouse button, the view will zoom in making the locations of the two lines the width of the new window.

Repeating the above procedure, we can get down to the details of the migration of thread?3. Double clicking on the graph brings the list view to the event that was clicked on. A green line appears at the location of that was clicked.

On CPU?0, thread?3 was preempted by the watchdog/0 kernel thread. Because we filtered out all threads but the migration test tasks, we see a small blank on the CPU?0 line. This would have been filled in with a colored bar representing the watchdog/0 thread if the filters were not enabled. The watchdog/0 thread runs at priority 99, which we can see from the sched_switch event as the priority of the tasks is between the two colons. The priority shown is represented by the kernel's view of priority, which is inverse to what user-space uses (user space priority 99 is kernel priority zero).

When the watchdog/0 thread preempted thread?3, the push/pull algorithm of the scheduler pushed it off to CPU?3, which had the lowest priority running task. Zooming into the other migrations that happened on the other CPUs, show that the watchdog kernel thread was responsible for them as well. If it wasn't for the watchdog kernel threads, this test would not have had any migrations.

Test two, second failure

The first test took the naive approach of just setting up four locks and having the tasks grab them in order. But this just kept the tasks in sync. The next approach is to try to mix things up a little more. The concern about the real-time scheduler is how it affects the highest priority task. The next test creates the four locks again (as there are four CPUs) and five tasks each of increasing priority. This time, only the highest priority task grabs all the locks in sequence. The other four tasks will grab a single lock. Each lock will have a single task and the highest priority task grabbing that lock. To try to force contention, pthread barriers are used. For those unfamiliar with pthread barriers, they are synchronization methods to serialize threads. A barrier is first initialized with a number and all threads that hit the barrier will block until that number of threads have hit the barrier, then all the threads are released.

This test case creates two barriers for each lock (lock_wait and lock_go) each initialized with the number 2, for the two tasks (the unique low priority task and the high priority task) that will take the lock. The low priority task will take the lock and wait on a barrier (lock_wait). The high priority task will hit that barrier before it takes the corresponding lock. Because the low priority task is already waiting on the barrier, the high priority task will trigger the barrier to release both tasks because the barrier has a task limit of two. The high priority task will most likely try to take the mutex while the low priority task aleady has it. The low priority task will release the mutex and then wait on the other barrier (lock_go) letting the high priority task take the mutex.

Running this test under trace-cmd yields the following from KernelShark after filtering out all but the migrate test tasks.

As the colors of the tasks are determined by their process IDs, this run has the following:

  • The initial green (???) bar is the main thread that is setting up all the locks and barriers.
  • The light purple (???) bar is the lowest priority thread?0.
  • The red (???) bar is the next-higher priority thread?1.
  • The yellow(ish) (???) bar is the next-higher priority thread?2.
  • The blue (???) bar is the next-higher priority thread?3.
  • The light turquoise (???) bar is the highest priority thread?4.

Looking at the graph it seems that the highest priority thread stayed on the same CPU, and was not affected by the contention. Considering that the scheduler is set to migrate a waking real-time task if it is woken on a CPU that is running another real-time task, regardless of the priorities, one would think the high priority task would have migrated a bit more. Zooming in on the graph brings to light a bit more details to what is occurring.

What we can see from the graph, and from the list, is that the high priority thread did have contention on the lock. But because all threads are waiting for the high priority process to come around to its lock, the other threads are sleeping when the high priority process wakes up. The high priority process is only contending with a single thread at a time. Threads?0 and?2 share CPU?2 without issue, while threads?1 and?3 each still have a CPU for themselves.

The test to force migration

The second test was on the right track. It was able to produce a contention but failed to have the CPUs busy enough to cause the highest priority task to wake up on a CPU running another real-time task. What is needed is to have more tasks. The final test adds twice as many running threads as there are CPUs.

This test goes back to all tasks grabbing all locks in sequence. To prevent the synchronization that has happened before, each thread will hold a lock a different amount of time. The higher the priority of a thread, the shorter time it will hold the lock. Not only that, but the threads will now sleep after they release a lock. The higher the priority of a task, the longer it will sleep:

lock_held = 1 ms * ((nr_threads - thread_id) + 1)sleep_time = 1 ms * thread_id

The lowest priority thread will never sleep and it will hold the lock for the longest time. To make things even more interesting, the mutexes have been given the PTHREAD_PRIO_INHERIT attribute. When a higher priority thread blocks on a mutex held by a lower priority thread, the lower priority thread will inherit the priority of the thread it blocks.

The test records the number of times each task voluntarily schedules, the number of times it is preempted, the number of times it migrates, and the number of times it successfully acquired all locks. When the test finishes, it gives an output of these for each thread. The higher the task number the higher the priority of the thread it represents.

Taskvolnonvolmigratediterations
04330071571108
162113341247108
27777691072108
377517701108
478350699108
57882610109
680189680109
78130693110
Total540152687273868

Running this test under trace-cmd and viewing it with KernelShark yields a graph with lots of pretty colors, which means we likely succeeded in our goal. To prove that the highest priority thread did indeed migrate, we can plot the thread itself.

Using the "Plots" menu and choosing "Tasks" brings up the same type of dialog as the task filter that was described earlier. I selected the highest priority thread (migrate-2158), and zoomed in to get a better view. The colors on a task plot are determined by the CPU number it was running on. When a task migrates, the colors of the plot changes.

This test now demonstrates how a high priority task can migrate substantially when other RT tasks are running on the system. Changes to the real-time scheduler can now be tested. The commit changes the decision on which thread migrates when an real-time task wakes up on a CPU running another real-time task. The original way was to always move the task that is waking up if there is a CPU available that is running a task that is lower in priority than both tasks. Instead, the commit changes this to just wake up the real-time task on its CPU if it is higher priority than the real-time task that is currently running.

The migrate test now shows:

Taskvolnonvolmigratediterations
0:5229232268108
1:56915291457109
2:80119612194109
3:8087891274109
4:81061155109
5:8131057109
6:8273581110
7:82404110
total:550473087490873

The total number of migrations has stayed around the same (several runs will yield a fluctuation of a few hundred), but the number of migrations for the highest priority task has dropped substantially, as it will not migrate simply because it woke up on a CPU running another real-time task. Note, the reason that the highest priority task migrated at all was because it woke up on a CPU that was running the task that owned the mutex that it was blocked on. As these are priority inheritance mutexes, the owner would have the same priority as the highest priority process that it is blocking. The wake up will not preempt a real-time task of equal priority. Perhaps that can be the next change to the real-time scheduler: have the wake up be aware of priority mutexes.

The highest priority thread (migrate-21412) was woken on CPU?3, which was running thread?1 (migrate-21406) which is the task that thread?7 originally blocked on. CPU?2 happened to be running thread?0 (migrate-21405) which was the lowest priority thread running at the time. Note that the empty green box that is at the start of the task plot represents the time between when a task was woken and the time it actually was scheduled in.

Using KernelShark allowed me to analyze each of my tests to see if they were doing what I expected them to do. The final test was able to force a common scenario where a high priority process is woken on a CPU running another real-time task, and cause the decision to be made, whether to migrate the waking task or not. This test allowed me to see how the changes to that decision affected the results.

This article demonstrates a simple use case for KernelShark, but there are a lot more features that aren't explained here. To find out more, download KernelShark and try it out. It is still in beta and is constantly being worked on. Soon there will be plugins that will allow it to read other file formats and even change the way it displays the graph. All the code is available and under the GPL, so you can add your own features as well (hint hint).


(Log in to post comments)

?

Using KernelShark to analyze the real-time scheduler

Posted Feb 3, 2011 2:32 UTC (Thu) by mhelsley (guest, #11324) [Link]

Interesting. Looking at the second table of 8 tasks it's clear there are 4 CPUs. The 4 highest priority threads have much fewer than 1000 migrations -- 150 or less -- while the remaining threads have 1000 or more. The number of non-voluntary pre-emptions is similarly distributed (presumably because those are involved in the push/pull migrations).

?

This looks excellent

Posted Feb 3, 2011 15:03 UTC (Thu) by robert_s (subscriber, #42402) [Link]

I've been looking for something like kernelshark ever since I started doing realtime programming and I'm so glad to know it exists.

?

This looks excellent

Posted Feb 10, 2011 21:56 UTC (Thu) by oak (guest, #2786) [Link]

Did you have some problem with LTT:
http://en.wikipedia.org/wiki/LTTng
?

(It's UI has some usability issues, but otherwise LTT has been used for this kind of stuff on Linux for the past decade.)

?

?

RT bandwidth causing gaps in the test

Posted Feb 4, 2011 3:36 UTC (Fri) by nevets (subscriber, #11875) [Link]

An interesting note:

Those gaps you see in the last test run are caused by the RT bandwidth kicking in. If I perform the following:

# echo -1 > /proc/sys/kernel/sched_rt_runtime_us

Those gaps disappear.

?

Using KernelShark to analyze the real-time scheduler

Posted Feb 5, 2011 11:58 UTC (Sat) by tardyp (subscriber, #58715) [Link]

Looks great!
I wish we could more easily put our efforts in common and put the best of pytimechart (great graphical display), and kernelshark (great textual display and filtering capabilities) into the same tool.

I guess the choice of toolkit and programming language does not help.

Pierre

?

Using KernelShark to analyze the real-time scheduler

Posted Feb 6, 2011 20:55 UTC (Sun) by nevets (subscriber, #11875) [Link]

I thought gtk and python work well together. There's even python plugins for kernelshark. The filter capability is separated out and would be easy to make into a library that python could read. As the parse-events library is already separate, and I'm working on getting perf to use it too.
I'm all for reuse of code, and would love to help in any effort to share capabilities between the tools.

總結

以上是生活随笔為你收集整理的Using KernelShark to analyze the real-time scheduler【转】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

色综合国产 | 国产免费一区二区三区最新 | 91精品国产99久久久久久久 | 四虎在线免费视频 | www.久久久精品 | 国产中文字幕久久 | 狠狠色伊人亚洲综合成人 | 91av网址| 99国产精品免费网站 | 天天爱综合 | 精品福利国产 | 一级精品视频在线观看宜春院 | 婷婷五月在线视频 | 久久久久免费精品 | 国产精品第一页在线观看 | 国产不卡在线观看 | 日韩三级在线观看 | 91九色蝌蚪 | 久久久国产精品一区二区三区 | 日日麻批40分钟视频免费观看 | 97精品视频在线播放 | 91精品国产乱码在线观看 | 成年人网站免费观看 | 久久精品日本啪啪涩涩 | 色偷偷88888欧美精品久久久 | 国产精品一区二区av日韩在线 | 亚洲综合色网站 | 日韩av美女| 丁香六月婷婷综合 | 免费视频你懂得 | 亚洲三级在线播放 | 亚洲三级视频 | 91av福利视频 | 在线视频 一区二区 | 91黄站| 国产精品乱码久久久 | 在线播放精品一区二区三区 | 色久av | 免费的国产精品 | 五月天,com| 色吊丝在线永久观看最新版本 | 国内精品在线一区 | 69亚洲乱| 欧美精品久久久 | 久久精品之 | 中文字幕在线观看日本 | 久久精品国产精品 | 天天草网站 | 99欧美 | 国产香蕉97碰碰碰视频在线观看 | 一区二区视频免费在线观看 | 国产精品一区二区av影院萌芽 | 亚洲一区精品人人爽人人躁 | 91成人精品国产刺激国语对白 | 日韩艹| 日韩在线观看视频中文字幕 | 精品一区二三区 | 蜜臀av夜夜澡人人爽人人 | 一级黄色毛片 | 欧美精品在线视频观看 | 久久国产亚洲视频 | 国产vs久久 | 欧美性生交大片免网 | 香蕉影视在线观看 | 91av欧美| 国产色a在线观看 | 九九热在线观看 | 欧美一级免费在线 | 在线你懂| 成人观看视频 | 国产96精品 | 91久草视频 | 久久夜av | 久久综合电影 | 久久综合色婷婷 | 久久福利综合 | 日韩久久久久久久久久 | 日韩精品久久中文字幕 | 成+人+色综合 | 国产日产在线观看 | 最近中文国产在线视频 | 黄色一区二区在线观看 | 天堂网一区二区 | 久久撸在线视频 | 亚洲影院色 | 成在线播放 | 九月婷婷人人澡人人添人人爽 | 又黄又刺激视频 | 久久国产精品视频免费看 | 亚洲国产69 | 国产成人黄色在线 | 国产成人一级电影 | 国产在线欧美在线 | 久久福利电影 | 久久精品99 | 欧美精品久久久久久久免费 | 天天射天天操天天 | 欧美一区日韩一区 | 91麻豆网| 91在线看黄| 天天操天天干天天 | 日韩三级视频在线观看 | 黄色大片视频网站 | 狠狠五月天| 国产区 在线 | 久久久久国产精品厨房 | 亚洲aⅴ久久精品 | 婷婷色狠狠 | 久色婷婷| 国产在线中文字幕 | 日韩欧美视频免费观看 | 日韩亚洲在线 | 丁香电影小说免费视频观看 | 国产午夜不卡 | 欧美性超爽| 激情图片qvod | 欧美日韩一区二区三区在线观看视频 | 五月天丁香视频 | 午夜精品久久久久久久99热影院 | 97视频人人| 成人免费在线视频 | 精品国产一二三四区 | 夜夜躁日日躁狠狠躁 | www免费网站在线观看 | 久久久精品国产免费观看同学 | 久久精品毛片 | av免费网站 | 久久精品二区 | 在线播放精品一区二区三区 | 日本少妇久久久 | 超碰av在线免费观看 | 久久精品综合视频 | 九热在线| 黄色片网站 | 国产精品免费久久久久久久久久中文 | 黄污视频网站大全 | 欧美黄色特级片 | 一本一道久久a久久精品蜜桃 | 久青草国产在线 | 亚洲 中文 在线 精品 | 中文在线免费一区三区 | 成人免费在线视频观看 | 日韩午夜小视频 | 日本女人b| 日本精品va在线观看 | 色小说av | 精品高清视频 | 久久久久久久久久久网 | 色噜噜在线观看视频 | 久久久久福利视频 | 99国产视频在线 | 国产精品a久久久久 | 免费av在线播放 | 国产精品久久久久影院日本 | 精品国产一区二区三区久久久蜜臀 | 色小说av| 色综合人人| 在线直播av | 欧美伦理一区二区三区 | 欧美久久成人 | 欧美片网站yy | 高清av免费一区中文字幕 | 精品国产一区二区三区四区vr | 99久久国产免费看 | 韩国精品福利一区二区三区 | 中国成人一区 | 成人亚洲欧美 | 国产精品久久久久久久午夜 | 国产精品你懂的在线观看 | 久久综合精品国产一区二区三区 | 久久久国产电影 | 91看片一区二区三区 | 国产999精品久久久久久绿帽 | av爱干 | 视频在线国产 | 日韩精品视频在线免费观看 | va视频在线 | 日韩精品中文字幕久久臀 | 中文字幕一区二区三 | 久久五月婷婷综合 | 欧美一区日韩一区 | 亚洲 欧美变态 另类 综合 | 久久久综合香蕉尹人综合网 | 337p西西人体大胆瓣开下部 | 91亚色视频在线观看 | 肉色欧美久久久久久久免费看 | 久久国产精品久久w女人spa | 99资源网| 婷婷视频 | 好看av在线 | 久草久热 | 国产一级91 | 国产91成人在在线播放 | 国产麻豆剧传媒免费观看 | 国产日产av| 99国内精品久久久久久久 | 日韩高清成人 | 精品理论片 | 麻豆视频免费入口 | 福利av影院 | 99久久夜色精品国产亚洲96 | 日韩xxx视频 | 亚洲福利精品 | 色狠狠狠| 超碰人人干人人 | 国产精品免费不卡 | 99产精品成人啪免费网站 | 日韩av免费网站 | 欧美不卡视频在线 | 国产日韩中文字幕在线 | 99久久夜色精品国产亚洲96 | 日本aa在线 | 亚洲精品在线免费看 | 国产精品久久艹 | 丁香激情婷婷 | 草久久精品 | 伊甸园永久入口www 99热 精品在线 | 久草在线免| 天天骚夜夜操 | 色婷婷视频在线观看 | 九九热在线视频 | 久草视频在线免费 | av片中文字幕 | 日日日操操 | 一区二区三区日韩精品 | 国产精品私人影院 | 五月视频| 久色婷婷| 国产午夜精品一区 | 精品女同一区二区三区在线观看 | 日韩激情小视频 | 日韩av一区二区三区在线观看 | 成人国产网址 | 97视频免费观看2区 亚洲视屏 | 国产成人久久久久 | 99精品视频免费看 | 日韩免费在线观看网站 | 九九热1| 日韩欧美有码在线 | 人人舔人人爱 | 久久久精品国产一区二区三区 | 在线日本看片免费人成视久网 | 日日精品 | 一级性av | 国产精品 亚洲精品 | 欧美亚洲国产日韩 | 欧美午夜理伦三级在线观看 | 色婷五月天 | 国产中文字幕在线看 | 久草在线观 | 最近中文字幕第一页 | 亚洲精品久久久久999中文字幕 | 久久久午夜电影 | 欧美日韩一区二区三区免费视频 | www.亚洲黄 | 亚洲天堂毛片 | 超碰人人在线 | 99精品国自产在线 | 久久久久电影网站 | 成人精品亚洲 | 国产成人精品久久二区二区 | 国内久久 | 成人黄大片 | 中文字幕中文字幕在线一区 | 久久美女电影 | 日韩av图片| 亚洲少妇天堂 | 欧美夫妻性生活电影 | 免费精品久久久 | 久久五月精品 | 国产精品资源在线观看 | 成人免费一区二区三区在线观看 | 欧美激情第八页 | 国内精品视频免费 | 2019中文字幕第一页 | 亚洲黄色成人网 | 国产一线二线三线性视频 | 国产一区成人 | 欧美日韩国产精品一区二区 | 午夜12点| 亚洲第一区在线播放 | 国产精品久久99综合免费观看尤物 | 不卡日韩av| 日日爱av | 一区二区三区四区久久 | 久久成人国产精品一区二区 | 91精品视频免费在线观看 | 天天射天天搞 | 九九免费在线观看视频 | 天天爽夜夜爽人人爽一区二区 | 天天干天天操天天射 | 国产91国语对白在线 | 久久精品国产久精国产 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 国产色婷婷 | 久久精品电影 | 日韩免费观看高清 | 色噜噜狠狠色综合中国 | 91免费在线看片 | 国产在线观看91 | 一级黄色av | 国产一区欧美在线 | 婷婷丁香狠狠爱 | 天天拍天天草 | 中文字幕日韩伦理 | av免费看电影| 久久免费播放视频 | 在线一二三区 | 男女视频国产 | 天堂在线视频中文网 | 国产成人免费网站 | 青青久草在线视频 | 成人午夜电影在线观看 | 国产精品一区二区你懂的 | 色丁香色婷婷 | 久久美女精品 | 国产伦精品一区二区三区免费 | 青青河边草免费直播 | 9在线观看免费 | 91在线视频观看 | 亚洲九九九在线观看 | 免费看的毛片 | 中文字幕精品一区久久久久 | 不卡视频一区二区三区 | 成人午夜免费剧场 | 亚洲人成影院在线 | 日韩精品视频在线观看网址 | 人人澡人人添人人爽一区二区 | www.午夜视频 | 国产麻豆精品一区 | 黄色一级动作片 | 国产精品久久久久高潮 | 人人爱天天操 | 成人h在线观看 | 特级西西444www大精品视频免费看 | 欧美成人视 | 国产成人性色生活片 | 中文在线中文资源 | 一区二区不卡视频在线观看 | 精品久久久久一区二区国产 | 久久精品免费看 | 一区二区三区在线免费观看视频 | 丁香婷婷综合激情 | 五月天色综合 | 日韩一级精品 | 亚洲欧美日韩一二三区 | 啪啪激情网 | 人人干天天射 | 91高清在线看 | 五月婷婷综合在线视频 | 男女精品久久 | 国产精品女视频 | 欧美午夜精品久久久久久孕妇 | 日本高清dvd | 久久国产乱 | 久久草网 | 精品国产乱子伦一区二区 | 日本精品在线 | 亚洲欧洲一级 | 日日操天天操狠狠操 | 中国一级片免费看 | 国产视频精品免费 | 五月激情综合婷婷 | 国产精品s色 | 免费看色视频 | 亚洲成人麻豆 | 久久精品4| 成人免费91 | 亚洲一区二区观看 | 在线www色 | 97超碰人人澡人人 | 成年人在线免费视频观看 | 在线看一区二区 | 亚洲国产成人在线观看 | 国产精品视频免费 | 亚洲成人av电影 | 亚洲区精品 | 亚洲婷婷免费 | 亚洲人成免费网站 | 天天狠狠干 | 久久dvd | 色综合久久久久网 | 国产精品久久久久久一区二区 | 国产1区2区3区在线 亚洲自拍偷拍色图 | 在线看毛片网站 | 最近中文字幕高清字幕在线视频 | 丁香五月亚洲综合在线 | 欧美一区二区伦理片 | 色99色 | 97综合在线 | 国产99久久99热这里精品5 | 国产福利小视频在线 | 久久综合日| 午夜精品久久久久久中宇69 | 精品久久久久国产 | 国产一区电影在线观看 | 欧美有色 | 在线视频观看成人 | 视频国产一区二区三区 | 国产麻豆精品传媒av国产下载 | 国产视频1| 日韩免费三区 | 成人毛片一区二区三区 | 亚洲精品国产日韩 | 亚洲精品一区中文字幕乱码 | 国产蜜臀av | 日韩婷婷 | 操操日| 在线a亚洲视频播放在线观看 | 国产精品一区二区免费在线观看 | 看片的网址 | 亚洲精品视频在线播放 | 国产亚洲精品久久19p | 日本中文字幕在线播放 | 一区二区三区四区在线 | 国产专区在线播放 | 亚洲视频在线观看 | 亚洲午夜精品在线观看 | 天天爽夜夜操 | 亚洲高清色综合 | 国产区网址 | 在线国产中文 | 欧美日韩国产二区三区 | 欧美一级片在线 | 91精品国产福利在线观看 | 中文字幕 第二区 | 99精品黄色 | 在线观看免费黄色 | 99久久精品久久久久久清纯 | 999久久久欧美日韩黑人 | 婷婷夜夜 | 国产免费美女 | av韩国在线 | 久久视奸 | 久久艹久久 | 国产日产精品久久久久快鸭 | 久久精品久久99 | 88av色| 国产精品久久99综合免费观看尤物 | 免费看一及片 | 成人久久久久久久久久 | 国产精品福利在线观看 | 亚洲国产午夜视频 | 久久综合久久综合久久 | 中文字幕精品一区二区精品 | 一级黄色片在线观看 | 精品在线观 | 五月天久久狠狠 | 天天综合天天综合 | 9992tv成人免费看片 | 91精品视频免费看 | 久久久久久久久福利 | 96av视频| 日韩av影片在线观看 | 亚洲精品国产精品乱码在线观看 | 99久久99视频只有精品 | 久久久久久久久久久久99 | 国产精品视频地址 | 在线99视频 | 人人爽人人爽人人爽人人爽 | 中文字幕免费一区 | 91精品国产麻豆国产自产影视 | 中文字幕在线播放日韩 | 91精品综合在线观看 | 久久露脸国产精品 | 欧美精品小视频 | 91精品视频播放 | www.五月婷 | 日韩三级成人 | 免费在线成人av电影 | 久久午夜国产精品 | 蜜臀一区二区三区精品免费视频 | 丁香花在线观看免费完整版视频 | 久久草在线免费 | 亚洲好视频 | 2022中文字幕在线观看 | 精品久久久久久国产91 | 一区二区三区四区在线免费观看 | 国产伦精品一区二区三区在线 | 国产精品入口a级 | 国产伦精品一区二区三区高清 | 高潮久久久久久 | 美女视频黄是免费的 | 国产精品久久久一区二区三区网站 | 精品999在线观看 | 在线不卡a | 亚洲精品视频观看 | 99欧美| 亚洲精品视频第一页 | 国产在线精品一区二区三区 | 国内精品中文字幕 | 亚洲国产精品一区二区尤物区 | 美女视频黄在线观看 | 欧美日韩二区在线 | 国产精品色视频 | 中文字幕文字幕一区二区 | 欧美国产视频在线 | 免费成人在线网站 | 精品影院一区二区久久久 | av高清免费在线 | 九九国产视频 | 国产高清av | 91在线看网站 | 婷婷亚洲五月色综合 | 亚洲成人精品影院 | 91最新地址永久入口 | 国产精品久久久久久久av电影 | 久久99亚洲精品 | 欧美日韩一区二区在线 | 久久96 | 久久少妇 | 国产国语在线 | 亚洲视频久久久久 | 狠狠狠狠狠狠狠干 | 在线免费观看视频a | 精品福利视频在线 | 米奇影视7777| 少妇bbw搡bbbb搡bbbb | 一区 二区 精品 | 亚洲一二三久久 | 中文字幕日本电影 | 激情网综合 | 欧美在线视频日韩 | 91完整版 | 精品视频网站 | 免费高清在线观看电视网站 | 黄色的视频网站 | 啪啪凸凸 | 成人97人人超碰人人99 | 日韩毛片在线免费观看 | 不卡视频在线 | 国产一区二区精品久久 | 亚州精品一二三区 | 九九九热精品免费视频观看网站 | 天天爱天天爽 | 精品视频免费在线 | 狠狠狠狠狠狠狠狠干 | 久草视频在线资源 | 国产一区二区在线观看视频 | 欧美精品一区二区免费 | 亚洲国产精品va在线看 | 国产精品男女 | av一二三区 | 成人在线观看免费 | 国产中文字幕久久 | 日韩在线观看网站 | 亚洲专区欧美专区 | 激情综合啪 | 在线色亚洲 | 伊人色**天天综合婷婷 | 手机在线看永久av片免费 | 超碰最新网址 | 91人人干 | 2019久久精品 | 欧美激情第一页xxx 午夜性福利 | 免费日韩电影 | 久久综合操 | a天堂中文在线 | 国产视频一级 | 亚洲欧美在线观看视频 | 国内一区二区视频 | 韩国av一区二区 | 97香蕉久久国产在线观看 | 午夜色性片 | 开心激情五月婷婷 | 免费在线观看中文字幕 | 最近中文字幕高清字幕免费mv | 久久国产精品视频 | 日韩h在线观看 | 国产成人久久av977小说 | 夜夜狠狠 | 国产精品一区二区三区免费视频 | 黄色软件在线看 | 四虎国产免费 | 午夜电影 电影 | 婷婷www | 精品亚洲视频在线观看 | 国产一区二区三区免费在线 | 98超碰在线 | 人人插人人舔 | 久久久久久久精 | 国产黄色片免费在线观看 | 91污在线观看 | 99久久精品免费 | 91精品视频免费看 | 69视频网站| 欧美日韩午夜爽爽 | av888.com| av福利资源 | 日韩久久电影 | 欧美精品一区二区三区四区在线 | 亚洲精品免费在线观看视频 | www.天天干.com | 色多多污污在线观看 | 亚洲理论电影网 | 久 久久影院 | 黄色成人在线观看 | 黄网站免费久久 | 天天综合网在线观看 | 亚洲精品456在线播放第一页 | 中文字幕免费一区二区 | 亚洲精品视频免费在线 | 国产黄色高清 | 国产精品久久伊人 | 国产又黄又爽无遮挡 | 涩涩色亚洲一区 | 99综合久久 | a在线视频v视频 | 最近中文字幕大全 | 中文字幕在线观看免费高清完整版 | 亚洲午夜久久久影院 | 最近中文字幕完整高清 | 三级av片 | 在线中文字幕av观看 | 狂野欧美激情性xxxx欧美 | 99精品视频一区 | 日韩精品偷拍 | 国产视频在线观看一区 | 麻豆传媒视频在线播放 | 黄色片免费在线 | 夜夜高潮夜夜爽国产伦精品 | 五月婷婷激情综合网 | av在线免费播放网站 | 免费av黄色| 亚洲国产激情 | 久久综合成人网 | 色狠狠婷婷 | 91成人精品 | 最近中文字幕免费av | 国产一区二区三区免费视频 | 三上悠亚在线免费 | 亚洲欧洲精品一区二区 | 91片网| 国产精品久久久久久久久久久久 | 欧美色就是色 | 精品国产亚洲一区二区麻豆 | 激情深爱五月 | 国产精品欧美日韩 | 成人免费在线播放视频 | 日韩大陆欧美高清视频区 | 国产精品婷婷 | 91久久人澡人人添人人爽欧美 | 欧美久久电影 | 五月激情婷婷丁香 | 69xx视频| 久久亚洲私人国产精品 | 欧美日韩高清一区二区 | 伊人影院得得 | 亚洲人成人天堂h久久 | 精品成人a区在线观看 | 中文在线免费看视频 | 国产成人久久精品亚洲 | 国内久久久 | 亚欧日韩成人h片 | 伊人永久在线 | 日韩一区二区三区视频在线 | 少妇bbbb | 怡红院成人在线 | 日韩肉感妇bbwbbwbbw | 日韩乱色精品一区二区 | 亚洲精品国产高清 | 亚洲在线观看av | av丝袜在线 | 六月婷婷网 | 操操日日 | 一区二区精品国产 | 超碰在线97观看 | 久草色在线观看 | 免费影视大全推荐 | 久艹在线免费观看 | 欧美一区二区三区四区夜夜大片 | 欧美日本啪啪无遮挡网站 | 欧美热久久 | 久久亚洲影院 | 亚洲精品视频在线看 | 国产网站av | 97在线观看视频免费 | 日韩高清 一区 | 亚洲成人精品久久久 | 日韩久久精品一区二区三区 | 五月天高清欧美mv | 天天操,夜夜操 | 综合色在线观看 | 久草资源免费 | 欧美激情精品久久久久久变态 | 美女视频是黄的免费观看 | 视频一区二区精品 | av久久久久久 | 狠狠躁18三区二区一区ai明星 | 国产 在线 高清 精品 | 夜夜躁狠狠躁日日躁视频黑人 | 天天干天天在线 | 亚洲精品欧美成人 | 看av在线 | www狠狠| 久久午夜精品 | 最近中文字幕高清字幕在线视频 | 狠狠色丁香久久婷婷综合丁香 | 97福利| 精品人人人 | 亚洲精品在线一区二区三区 | 亚洲国产精品久久久久婷婷884 | 久久久久伦理电影 | 日韩黄色在线电影 | 久久精品日产第一区二区三区乱码 | 狠狠色狠狠色综合系列 | 国产精品久久久久久久av电影 | 欧美另类调教 | 中文字幕国语官网在线视频 | 天天操天天添天天吹 | 国产精品久久久久一区二区 | 一级黄色在线免费观看 | 国产精品18久久久久久久久 | 国产午夜精品免费一区二区三区视频 | 欧美精品中文在线免费观看 | 久久视频二区 | 亚洲成a人片77777kkkk1在线观看 | 91九色在线 | 久久高清免费视频 | 在线免费视频一区 | 欧美做受69 | 亚洲资源在线网 | 天天做天天射 | 欧美一级片在线播放 | 国产日本亚洲高清 | 久久午夜电影院 | 91福利视频网站 | 中文字幕在线观看免费高清电影 | 干亚洲少妇 | 欧美日韩高清一区二区 国产亚洲免费看 | 日韩一区二区三免费高清在线观看 | 久久精品影片 | www.av免费 | 天天操天天玩 | 欧美精品久久久久久久久久久 | 五月婷婷在线观看 | 久久人人精 | av 一区二区三区四区 | 天天插视频 | 日韩视频一区二区在线 | 国产精久久久久久妇女av | 奇米影视777影音先锋 | 亚洲综合在线一区二区三区 | 中文字幕在线免费看线人 | 久久精品视频免费播放 | 激情综合网五月 | 性色在线视频 | 日韩av成人在线观看 | 国产一级片久久 | 国产精品久久久久久婷婷天堂 | 亚洲精品白浆高清久久久久久 | 日日爱视频 | 亚洲综合精品在线 | 亚洲激情校园春色 | 国产在线一线 | 美女视频免费精品 | 国产午夜视频在线观看 | 中文字幕在线视频一区 | 91麻豆精品国产自产在线 | 国产香蕉视频在线播放 | 99精品免费在线 | 国产区欧美 | 精品国产诱惑 | 天天操天天干天天操天天干 | 亚洲永久精品视频 | 国内久久精品 | 国产精品 国产精品 | 久久久久这里只有精品 | 日日干日日操 | 国产精品欧美精品 | x99av成人免费 | 国产精品一区二区你懂的 | 国产婷婷精品av在线 | 91热视频在线观看 | 中文字幕日韩精品有码视频 | 国产96av| 亚洲国内精品在线 | 久久这里 | 成片免费观看视频大全 | 97精品国产97久久久久久春色 | 国产精品欧美一区二区三区不卡 | 欧美日本在线视频 | 九九色综合 | 国产理论一区二区三区 | 欧美一区二区三区在线播放 | 激情在线免费视频 | 九九久久视频 | 国产一区二区免费 | 天堂网av在线 | 久久久综合九色合综国产精品 | 91色在线观看视频 | 久久成人国产精品入口 | 视频在线观看入口黄最新永久免费国产 | 国产精品美女视频 | 国产精品无 | 91久久影院| 天堂在线视频中文网 | 国产美女免费视频 | 九九热99视频| 午夜av电影院 | 日韩精品一区二区免费视频 | 国产在线不卡精品 | 国产精品嫩草影院9 | 国产色一区 | 国产精品久久久久高潮 | av在线收看 | 夜夜摸夜夜爽 | 四虎天堂| 中文字幕日韩伦理 | 精品伦理一区二区三区 | 色网免费观看 | 日韩电影中文字幕 | 久久久久久久久久久久久国产精品 | 在线电影 一区 | 日韩有码欧美 | 欧美日韩久久久 | 国产精品第52页 | 久久黄色片子 | 人人澡人人添人人爽一区二区 | 欧美黑人猛交 | 在线综合色 | 久久久亚洲精华液 | 国产一区二区三区免费在线 | 亚洲欧洲日韩 | 麻豆精品传媒视频 | 色99导航| 久草网站| 9797在线看片亚洲精品 | 国产欧美最新羞羞视频在线观看 | 国产在线视频资源 | 99视频在线| 一级黄色片在线观看 | 国产91免费看 | 久久一及片 | 青青久草在线视频 | 免费av网址在线观看 | 九九视频在线播放 | 在线免费色视频 | 超碰97在线资源站 | 久久999久久 | www.狠狠操 | 成年人视频免费在线 | 最新91在线视频 | 粉嫩高清一区二区三区 | av手机版 | 国产成人福利在线观看 | 国产视频一级 | 久久精品日产第一区二区三区乱码 | 狠狠色丁香婷婷综合欧美 | 国产资源免费在线观看 | 精品国产欧美一区二区三区不卡 | 精品无人国产偷自产在线 | 碰天天操天天 | av五月婷婷 | 一区二区三区免费在线观看视频 | 中文字幕a∨在线乱码免费看 | 人人爽爽人人 | 日本成人黄色片 | 九九在线免费视频 | 51精品国自产在线 | 中文字幕在线视频网站 | 日韩 国产 | 五月激情丁香图片 | 久久中文字幕导航 | 在线看一级片 | 99久久99久国产黄毛片 | 欧美日韩精品电影 | 亚洲精品高清一区二区三区四区 | 亚洲欧美激情插 | 日韩欧美视频一区二区 | 五月天免费网站 | 欧美日韩视频观看 | 亚洲 欧美 91 | 精品综合久久 | 国产亚洲精品女人久久久久久 | 人人插人人玩 | 四虎影视久久久 | 精品国产片 | 夜夜干夜夜| 天天天色综合a | 91丨九色丨勾搭 | 久久久99国产精品免费 | 国产精品成人自产拍在线观看 | 香蕉网在线观看 | 日韩 国产 | 婷婷精品国产欧美精品亚洲人人爽 | 五月香婷 | 99这里只有精品视频 | 午夜精品视频在线 | 一区二区不卡 | 很黄很黄的网站免费的 | 日韩精品在线视频 | 国产精品久久久久久久久久久久冷 | 奇米7777狠狠狠琪琪视频 | 成人免费观看网站 | 天天射天天干天天 | 少妇自拍av| 日韩一区二区三免费高清在线观看 | 亚洲成人中文在线 | 婷婷久草 | 亚洲欧美国产日韩在线观看 | 国产精品毛片网 | 91精品在线免费观看 | 日韩午夜三级 | 亚洲精品乱码久久久久久蜜桃不爽 | 日韩乱理 | 97天天综合网 | 欧美日韩不卡在线观看 | 精品国产片 | 久久精品91视频 | 久久久久免费精品 | 国产一区二区影院 | 丁香婷婷自拍 | 国产黄a三级三级三级三级三级 | 精品国产视频在线观看 | 久久99国产精品视频 | 在线色网站 | 精品电影一区二区 | 免费在线观看污网站 | 日韩精品中文字幕在线不卡尤物 | 亚洲最大成人网4388xx | 韩国在线一区二区 | 91成人免费| 中文字幕av免费 | www狠狠操| 国产精品综合在线观看 | 五月天免费网站 | 欧美激情va永久在线播放 | 91热爆在线观看 | 亚洲黄色成人网 | 久久久精品免费观看 | 亚洲精品97| av中文字幕电影 | 91精品少妇偷拍99 | 日韩免费在线播放 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 亚a在线 | 日韩在线观看小视频 | 欧洲激情在线 | 久久久久久久久久久久电影 | 久久国产高清视频 | 综合激情婷婷 | 一级理论片在线观看 | 国产成人精品午夜在线播放 | 亚洲永久国产精品 | 91日韩精品视频 | 黄色午夜 | 四虎www com| 国产精品久久久久久高潮 | 在线国产一区二区三区 | 国产专区精品视频 | 91免费观看视频在线 | 亚洲精品乱码久久久久 | 国产精品麻豆99久久久久久 | 亚洲成人影音 | 国产又粗又猛又爽又黄的视频先 | 亚洲综合在线一区二区三区 | 最近中文字幕在线中文高清版 | 国产破处精品 | av在线最新 | www黄色com| 日韩三级视频在线看 | 美女啪啪图片 | 五月婷婷影院 | 久久精品视频国产 | av专区在线| 午夜性福利 | 又粗又长又大又爽又黄少妇毛片 | 久久久五月天 | 精品国产乱码 | 又黄又爽又刺激 | 日本中文字幕视频 | 天天综合网 天天综合色 | 操综合 | 国产 字幕 制服 中文 在线 | 亚洲国产伊人 | 国产馆在线播放 | 狠狠做六月爱婷婷综合aⅴ 日本高清免费中文字幕 | 欧美成人视 | 91激情视频在线观看 | 国产在线观看二区 | 热久久精品在线 | 久久草草热国产精品直播 | 欧美日韩二区三区 | 福利视频区 | 精品一区二三区 | 成人免费看片网址 | 成人午夜性影院 | 4438全国亚洲精品观看视频 | 麻豆视频网址 | 日韩精品视频在线免费观看 | 国产成人精品一区二三区 | 深爱激情五月婷婷 | 91精品啪在线观看国产 | 免费的黄色的网站 | 精品日韩在线一区 | 免费影视大全推荐 | 成年人在线视频观看 |