실시간이 사용자 시간보다 낮은 이유


31

비디오 파일을 변환하는 스크립트가 있으며 테스트 데이터를 서버에서 실행하고 시간을 측정합니다 time. 결과적으로 나는 보았다 :

real    2m48.326s
user    6m57.498s
sys     0m3.120s

실시간이 사용자 시간보다 훨씬 낮은 이유는 무엇입니까? 이것이 멀티 스레딩과 관련이 있습니까? 아니면 다른 무엇입니까?

편집 : 그리고 스크립트가 2m48s 경에 실행되고 있다고 생각합니다.


이후, 완벽한 의미가 있습니다 - 당신의 편집을 다시 real시간이 (즉, 우리가 정지 시계가 있다면 우리가 측정 한 것의) 아래에 설명 된대로 벽 시계 시간입니다
Levon

답변:


42

실시간은 일반적으로 다른 두 개보다 크기 때문에 표시되는 출력은 약간 이상합니다.

  • Real시간은 벽시계 시간입니다. (스톱워치로 측정 할 수있는 것)
  • User 시간은 프로세스 내에서 사용자 모드에서 소비 한 시간입니다.
  • Sys 프로세스 내 커널에서 소비 한 CPU 시간입니다.

따라서 여러 프로세서가 동시에 작업을 수행 한 경우 CPU 시간이 경과 된 벽시계 시간보다 높을 것으로 가정합니다.

이것이 동시 / 멀티 스레드 / 병렬 유형의 응용 프로그램입니까?

예를 들어, 이것은 time find .명령을 실행할 때 Linux 시스템에서 얻는 것입니다 . 예상대로이 real단일 사용자 / 단일 코어 프로세스 에서 경과 시간이 다른 시간보다 훨씬 큽니다.

real    0m5.231s
user    0m0.072s
sys     0m0.088s

경험의 법칙은 다음과 같습니다.

  • real <user : 프로세스가 CPU 바운드이며 여러 코어 / CPU에서 병렬 실행을 활용합니다.
  • 실제 사용자 : 프로세스가 CPU 바운드이며 병렬 실행을 이용하지 않습니다.
  • real> user : 프로세스가 I / O 바운드입니다. 여러 코어에서 실행하면 이점이 거의 없습니다.

avconv멀티 스레드 인지 모르겠습니다 . 그것은 할 수있다. avconv의 새로운 세대입니다 ffmpeg. 짧은 flv 파일 7 개를 변환했습니다 (각 약 20 초).
kobylecki 2016 년

실시간은 일반적으로 다른 두보다 큰 것 -하지만 난 다른 상황에 대해 물어
kobylecki

4
이 설명은 정확합니다. 이 프로세스는 4 개의 코어에서 실행 된 것으로 보입니다. 실제 / 시스템 / 사용자 시간 계산 방법에 대한 자세한 내용은 하이퍼 스레딩에 대한 설명도 참조하십시오 . 정확히 관련이 없지만 개념은 동일합니다.
bahamat

@kobylecki 실시간은 avconv가 여러 코어에서 실행되는 것처럼 보이기 때문에 다른 것보다 적습니다. 소프트웨어 나 실행 방법을 모르기 때문에 100 % 클레임을하고 싶지 않지만 사용 가능한 정보 (3 줄의 시간 측정 및 지식 :- )
Levon 2016 년

find예제 에서는 usr값이 훨씬 낮습니다. 대부분의 시간이 인터럽트 중에 소비 되었기 때문에 find멀티 스레드 일지라도 낮게 유지되었을 것입니다 (영어 시제를 마스터하지 않으면 죄송합니다).
Emmanuel

13

두 개의 스레드 프로세스가 계산을 수행하면서 말한 내용을 설명하기 위해.

/*a.c/*
    #include <pthread.h>
    static void  * dosomething () {
        unsigned long a,b=1;
        for (a=1000000000; a>0; a--) b*=3;
        return NULL;
    }
    main () {
        pthread_t one, two;
        pthread_create(&one,NULL, dosomething, NULL);
        pthread_create(&two,NULL, dosomething, NULL);
        pthread_join (one, NULL);
        pthread_join (two, NULL);
    }
/* end of a.c */

엮다

gcc a.c -lpthread

(실제로 -D_REENTRANT 플래그를 추가해야 함을 보여주기 위해 설명했습니다)

$ time ./a.out

real    0m7.415s
user    0m13.105s
sys     0m0.032s

(시간은 두 개의 느린 코어가있는 Intel Atom에 있습니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.