当前位置: 首页>>技术问答>>正文


什么是“Waiting Channel”的流程?

, ,

问题描述

在GNOME系统监视器的进程选项卡中有一个”Waiting Channel”列。到目前为止,我在这里看到的最常见的值是poll_schedule_timeout,但我也看到其他值:0,do_exit,do_wait,futex_wait_queue_me,pipe_wait,__ skb_recv_datagram和unix_stream_data_wait。

那么这个”Waiting Channel”列是什么意思呢?也许这些价值观中的一些意味着什么呢?

process,system-monitor,ubuntu

最佳解决思路

等待通道是任务当前正在等待的内核中的位置。任务必须等待资源,可以是数据或处理时间。这两个包括网络套接字,硬件,文件等;因为大多数只是文件,在Unix-like系统中。

  • 0:这个过程没有等待

  • poll_schedule_timeout poll()是用于处理I /O的系统调用1。它与select()类似.2使用non-blocking I /O的应用程序使用这些调用来查看它们是否可以读取或写入文件,而不必阻止它。它们通常用于输入/输出流,可能不会被阻塞(否则,您的鼠标可能会停止移动)。等待通道poll_schedule_timeout表示任务正在等待I /O,硬件如键盘和鼠标,声音设备甚至网络插座。

    1. 内核中的一个函数

    2. 它们在<linux/poll.h>中定义。 poll是System V中首次出现的实现,select是BSD UNIX的等价物。

  • futex_wait_queue_me:为了解释这一点,我们必须看一下Locks。锁是系统中保存的状态,表示任务使用资源。例如,可以只有一个任务读取文件。此任务将锁定文件,尝试读取文件的任何其他任务1将知道它已被锁定,并等待锁定消失,然后才能访问它。处理器时间也会发生同样的事情。现代版Linux(在大多数架构上)在内核中使用Futex(快速用户空间互斥锁)锁。 Mutex,互斥,指的是公共资源只能由一个任务随时访问。为此,设置系统中的标志。如果一个进程正在等待一个锁定的资源,这称为忙等待或”Spinning”,指的是它试图反复访问它,直到它可以。据说任务在旋转时被阻止。可以将Futex锁定为用户空间中的数字,可以通过任务递增或递减(在多个任务可以访问资源的情况下,此数字可以变为大于1)。这是图4中显示的数字。这些任务在等待队列中排队,这是一个需要完成一些工作的简单任务队列,一旦处理时间可用,任务就完成了工作并从队列中删除。 futex_wait_queue_me将任务排入队列。然后等待信号,超时或唤醒。此等待通道中的任务不等待等待队列,它们等待入队。

    1. 任务可以是Process3或Thread2

    2. 线程是进程的sub-section。许多线程可以并行运行

    3. 进程是一个full-blown程序,它由一个或多个线程组成,但程序也可以包含多个进程。

    4. 请记住,这仍然是一个非常高级别的视图,它不考虑实现细节

  • __skb_recv_datagram等待锁定网络套接字上的某些数据。

  • sk_wait_data等待网络套接字上的某些数据。

  • do_exit这是退出流程的最后一部分。 do_exit()接下来调用schedule(),以安排另一个进程。调用do_exit()时,该过程为ZOMBIE

  • do_wait将一个进程添加到调度程序等待队列中。

  • pipe_waitunix_stream_data_wait

    进程正在等待子进程中的数据。例如,当您运行此类代码时会发生这种情况:

    echo | sleep 10 && echo hallo              # pipe
    

    要么

    cat < hello.c                              # unix data stream
    
  • hrtimer_nanosleep使用hrtimer_nanosleep()方法进行休眠。该方法可用于程序以特定的时间间隔睡眠,精确到纳秒。

这些并非全部,但我没有观察到任何其他人。如果我错过任何内容,发表评论。

次佳解决思路

等待通道值是当前阻止进程的内核函数的名称。

该名称通常与系统调用相关,系统调用将具有手动页面。

  • futex_wait_queue_me与futex有关。它指的是一种互斥体lock(快速用户空间互斥),用于安排在一个处理器上工作的许多进程。状态表示您的进程已加入队列以接收锁定。 2

  • do_wait与wait相关。

  • 等等

如果您真的想要更详细的信息,可以查看内核source

如果在终端中键入cat /proc/some_pid/stack,您将得到一些类似的输出:

[<c0227f4e>] poll_schedule_timeout+0x3e/0x60
[<c022879f>] do_select+0x55f/0x670
[<c0228f40>] core_sys_select+0x140/0x240
[<c0229241>] sys_select+0x31/0xc0
[<c05c9cc4>] syscall_call+0x7/0xb
[<ffffffff>] 0xffffffff

在第一行,您将获得系统监视器上显示的内容。据我所知,poll_schedule_timeout表示您的进程正在等待某事。

它涉及asynchronous I/Opolling

来源:1。process wait channel (WCHAN) and alarm? – 2. AskUbuntu answer

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2241.html,未经允许,请勿转载。