프로세스의 "대기 채널"이란 무엇입니까?


36

그놈 시스템 모니터의 프로세스 탭에는 "대기 채널"열이 있습니다. 지금까지 내가 볼 수있는 가장 일반적인 값은 poll_schedule_timeout 이지만 0 , do_exit , do_wait , futex_wait_queue_me , pipe_wait , __skb_recv_datagramunix_stream_data_wait같은 다른 값도 볼 수 있습니다.

그렇다면이 "대기 채널"열은 무엇을 의미합니까? 그리고 아마도 그 가치 중 일부는 무엇을 의미합니까?

스크린 샷

답변:


42

대기 채널은 작업이 현재 대기중인 커널의 위치입니다. 작업은 데이터 또는 처리 시간이 될 수있는 리소스를 기다려야합니다. 이 두 가지는 네트워크 소켓, 하드웨어, 파일 등을 포함합니다. 유닉스 계열 시스템에서는 대부분 파일 일뿐입니다.

  • 0: 프로세스가 기다리고 있지 않습니다

  • poll_schedule_timeout

    poll()I / O를 처리하는 데 사용되는 시스템 호출 1 입니다. 와 비슷합니다 select(). 2

    비 차단 I / O를 사용하는 응용 프로그램은 이러한 호출을 사용하여 파일을 차단하지 않고도 파일을 읽거나 쓸 수 있는지 확인합니다. 그것들은 종종 입 / 출력 스트림에 사용되며 차단되지 않을 수도 있습니다 (그렇지 않으면 마우스가 움직이지 않을 수도 있습니다).

    대기 채널 poll_schedule_timeout은 작업이 키보드 및 마우스와 같은 하드웨어, 사운드 장치 또는 네트워크 소켓과 같은 I / O를 기다리고 있음을 나타냅니다.

    1. 커널의 기능
    2. 에 정의되어 <linux/poll.h>있습니다. pollSystem V에서 처음 본 구현 select은 BSD UNIX와 동일합니다.
  • futex_wait_queue_me:

    이를 설명하기 위해 잠금을 살펴 봐야합니다. 잠금은 시스템에서 작업이 리소스와 함께 작동 함을 나타내는 저장된 상태입니다. 예를 들어 파일을 읽는 작업이 하나만있을 수 있습니다. 이 작업은 파일을 잠그고 파일 을 읽으려고 하는 다른 작업 1 은 파일이 잠겨 있다는 것을 알고 잠금이 사라질 때까지 기다렸다가 파일에 액세스 할 수 있습니다. 프로세서 시간에서도 마찬가지입니다.

    최신 버전의 Linux (대부분의 아키텍처에서)는 커널에서 Futex (고속 사용자 공간 뮤텍스) 잠금을 사용합니다. 상호 배제 인 Mutex는 언제든지 한 작업만으로 공통 리소스에 액세스 할 수 있다는 아이디어를 말합니다. 이를 위해 시스템의 플래그가 설정됩니다.

    프로세스가 잠긴 자원을 대기하는 경우이를 대기 중 또는 "회전"이라고하며, 가능할 때까지 계속해서 액세스하려고한다는 사실을 나타냅니다. 작업이 회전하면 차단 되었다고합니다 .

    이것을 읽을 수 있다면이 답변에서 적어도 하나의 실수를 수정해야합니다.

    Futex 잠금은 사용자 공간에서 숫자로 생각할 수 있으며, 이는 작업에 의해 증가 또는 감소 수 있습니다 (여러 작업이 리소스에 액세스 할 있는 경우이 수가 1보다 클 수 있음). 이것은 도표 4에 표시된 숫자 입니다.

    이러한 작업은 대기 시간, 즉 작업 시간이 필요하면 작업을 수행하고 대기열에서 제거되는 간단한 작업 대기열 인 대기열에 대기합니다.

    futex_wait_queue_me작업을 대기열에 넣습니다. 그런 다음 신호, 시간 초과 또는 웨이크 업을 기다립니다. 이 대기 채널에 있는 작업 은 대기 대기열이 아닌 대기 중이며 대기열에 대기 중입니다.


    1. 작업은 프로세스 3 또는 스레드 2 일 수 있습니다.
    2. 스레드는 프로세스의 하위 섹션입니다. 많은 스레드가 병렬로 실행될 수 있습니다
    3. 프로세스는 완전한 프로그램이며 하나 이상의 스레드로 구성되지만 프로그램은 여러 프로세스로 구성 될 수도 있습니다.
    4. 이것은 여전히 ​​매우 높은 수준의 관점이며 구현 세부 사항을 고려하지 않습니다.
  • __skb_recv_datagram

    잠긴 네트워크 소켓에서 일부 데이터를 기다립니다.

  • sk_wait_data

    네트워크 소켓에서 일부 데이터를 기다립니다.

  • do_exit

    이것은 프로세스 종료의 마지막 부분입니다. 다른 프로세스를 예약하기 do_exit()위해 schedule()다음을 호출합니다 . 때 do_exit()호출, 프로세스는 것입니다 ZOMBIE.

  • do_wait

    프로세스가 스케줄러 대기 큐에 추가됩니다.

  • pipe_wait, unix_stream_data_wait

    프로세스가 서브 프로세스의 데이터를 기다리고 있습니다. 예를 들어 이런 종류의 코드를 실행할 때 이런 일이 발생합니다.

    echo | sleep 10 && echo hallo              # pipe
    

    또는

    cat < hello.c                              # unix data stream
    
  • hrtimer_nanosleep

    hrtimer_nanosleep()방법을 사용하여 프로세스가 대기 중 입니다. 이 방법은 프로그램이 나노초 정확도로 특정 시간 간격 동안 휴면 상태를 유지하는 데 사용할 수 있습니다.

이것들은 전부는 아니지만 다른 사람은 관찰하지 못했습니다. 내가 놓친 부분이 있으면 의견을 게시하십시오.


sleep_on_page_killable을 보았습니다.
Mr Axilus

sleep_on_page_killable의 가장 큰 원인은 프로세스가 메모리에없는 페이지를로드하려고 시도하기 때문에 페이지 오류가 발생하고 페이지가로드 될 때까지 프로세스가 휴면 상태에 있어야한다는 것입니다. I / O 하위 시스템에 과부하가 걸리면 (많은 I / O를 수행하고 있기 때문에) 자주 나타날 수 있습니다.
tsuna September

무엇에 대해 signal? 나는 그것에 부딪쳤다. 프로세스가 종료 되었습니까? 좀비? 또는 무엇을? 프로세스는 어떻게 되나요?
itsnotmyrealname

11

대기 채널 값은 프로세스가 현재 차단 된 커널 기능의 이름입니다.

이름은 일반적으로 시스템 호출과 관련이 있으며 매뉴얼 페이지가 있습니다.

  • futex_wait_queue_mefutex 와 관련이 있습니다. 그것은 뮤텍스의 유형을 지칭 로크 하나 개의 프로세서에 많은 프로세스 작업을 예약하는 데 사용된다 (고속 사용자 공간 상호 배제). 상태는 프로세스가 잠금을 받기 위해 대기 중임을 나타냅니다. 2
  • do_waitwait 와 관련이 있습니다.
  • 기타

더 자세한 정보를 원한다면 커널 소스를 확인하십시오 .

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 은 프로세스가 무언가를 기다리고 있음을 나타냅니다.

그것은 다루는 비동기 I / O폴링 .

소스 : 1. 프로세스 대기 채널 (WCHAN) 및 알람? -2. AskUbuntu 답변



귀하의 답변을 재사용하여 그 중 하나를 개선 한 것으로 나타났습니다. ;-) 어떤 종류의 기여를 원하십니까?
Maxime R.

2
귀하의 의견은 나를 만족시키기에 충분합니다 :) 기여의 작동 방식에 대해 배우고 싶다면 주제에 대한 멋진 SO 블로그 게시물이 있습니다. 그래도 걱정하지 마십시오. 사람들이 가능한 한 많이 내 작업을 재사용하기를 바랍니다.
Stefano Palazzo

1
글쎄, 나는 메타에 관한이 주제에 대한 질문을하고 있었다. (이미 블로그 게시물을 읽었 음)
Maxime R.

그것은이다 여기 . 그리고 나는 당신의 대답이 어느 시점에서 내 위로 끝날 것입니다 ^^
Maxime R.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.