지피는 언제 늘어나나요? 프로세스가 어떻게 빠르게 실행되나요?

지피는 언제 늘어나나요? 프로세스가 어떻게 빠르게 실행되나요?

jiffies 길이는 커널 컴파일 타임에 선택되고 기본값은 250(4ms)이라는 것을 알고 있습니다.
원천:man 7 time - 소프트웨어 시계, HZ 및 Jiffies

한순간에 무슨 일이 일어날지 궁금하네요. utime아니면 stimein 값이 증가하는 조건은 무엇입니까 /proc/pid/stat? 언제 발생합니까?

몇 가지 아이디어가 있지만 그것이 올바른지 확실하지 않습니다.

  • 프로세스가 실행될 시간이 생기면 jiffy 개수가 즉시 증가합니다.
  • Linux는 1분 안에 얼마나 많은 작업이 수행되었는지 알 수 없습니다.
  • 게다가, 리눅스는 현재 프로세스가 1 jiffy에 얼마나 많은 시간을 사용했는지 알 방법이 없습니다. (4밀리초를 모두 사용했습니까, 아니면 그 이하입니까?)
  • 현재 프로세스는 즉시 시작되며 나중에 시작되지 않습니다.
  • 프로세스가 완료되고 현재 순간부터 남은 시간이 있으면 아무 일도 일어나지 않습니다(nop).
  • 더 높은 우선순위 프로세스가 나타나면 현재 jiffy에는 영향을 미치지 않습니다.

이를 이해하면 많은 도움이 될 수 있습니다.

답변1

jiffy 횟수가 증가하면 프로세스가 실행될 시간이 있는 것입니다. jiffies는 타이머 인터럽트에 의해 증가되어 스케줄러에게 일정을 변경하라고 지시합니다. jiffy는 일정을 변경하지 않고 프로세스가 실행될 수 있는 최대 기간을 정의합니다. 예를 들어, 프로세스가 yield()또는 을 호출하면 일정 조정이 즉시 발생합니다. sleep()따라서 사용 가능한 다음 실행 프로세스로의 컨텍스트 전환이 반드시 짧은 경계에서 발생하는 것은 아닙니다.

그러나 실제 커널 동작은 커널이 컴파일될 때(linux/kernel/Kconfig.preempt) 정의됩니다.

choice
    prompt "Preemption Model"
    default PREEMPT_NONE

config PREEMPT_NONE
    bool "No Forced Preemption (Server)"
    help
      This is the traditional Linux preemption model, geared towards
      throughput. It will still provide good latencies most of the
      time, but there are no guarantees and occasional longer delays
      are possible.

      Select this option if you are building a kernel for a server or
      scientific/computation system, or if you want to maximize the
      raw processing power of the kernel, irrespective of scheduling
      latencies.

config PREEMPT_VOLUNTARY
    bool "Voluntary Kernel Preemption (Desktop)"
    help
      This option reduces the latency of the kernel by adding more
      "explicit preemption points" to the kernel code. These new
      preemption points have been selected to reduce the maximum
      latency of rescheduling, providing faster application reactions,
      at the cost of slightly lower throughput.

      This allows reaction to interactive events by allowing a
      low priority process to voluntarily preempt itself even if it
      is in kernel mode executing a system call. This allows
      applications to run more 'smoothly' even when the system is
      under load.

      Select this if you are building a kernel for a desktop system.

config PREEMPT
    bool "Preemptible Kernel (Low-Latency Desktop)"
    select PREEMPT_COUNT
    select UNINLINE_SPIN_UNLOCK if !ARCH_INLINE_SPIN_UNLOCK
    help
      This option reduces the latency of the kernel by making
      all kernel code (that is not executing in a critical section)
      preemptible.  This allows reaction to interactive events by
      permitting a low priority process to be preempted involuntarily
      even if it is in kernel mode executing a system call and would
      otherwise not be about to reach a natural preemption point.
      This allows applications to run more 'smoothly' even when the
      system is under load, at the cost of slightly lower throughput
      and a slight runtime overhead to kernel code.

      Select this if you are building a kernel for a desktop or
      embedded system with latency requirements in the milliseconds
      range.

endchoice

예, Linux는 1지피 내에 수행되는 작업 수를 결정할 수 없습니다. 왜냐하면 명령어마다 실행 시간이 다르고 명령어 파이프라인이 단위 시간당 실행되는 명령어 수에 영향을 미치기 때문입니다.

관련 정보