ทำไมเวลาจริงถึงต่ำกว่าเวลาของผู้ใช้


31

timeฉันมีสคริปต์การแปลงไฟล์วิดีโอและฉันใช้มันที่เซิร์ฟเวอร์จากข้อมูลการทดสอบและการวัดเวลาของตนโดย ในผลที่ฉันเห็น:

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

เหตุใดเวลาจริงจึงต่ำกว่าเวลาของผู้ใช้มาก สิ่งนี้มีการเชื่อมต่อกับมัลติเธรดหรือไม่? หรืออะไรอีก

แก้ไข:และฉันคิดว่าสคริปต์ทำงานประมาณ 2m48s


แก้ไขใหม่ของคุณ - ซึ่งสมเหตุสมผลดีเนื่องจากrealเวลาเป็นนาฬิกาแขวนตามที่อธิบายไว้ด้านล่าง (เช่นสิ่งที่เราจะวัดได้ถ้าเรามีนาฬิกาจับเวลา)
Levon

คำตอบ:


42

ผลลัพธ์ที่คุณแสดงค่อนข้างแปลกเนื่องจากเวลาจริงมักจะใหญ่กว่าอีกสองรายการ

  • Realเวลาคือเวลาของนาฬิกาแขวน (สิ่งที่เราสามารถวัดได้ด้วยนาฬิกาจับเวลา)
  • User time คือจำนวนเวลาที่ใช้ในโหมดผู้ใช้ภายในกระบวนการ
  • Sys คือเวลา CPU ที่ใช้ในเคอร์เนลภายในกระบวนการ

ดังนั้นฉันจึงคิดว่าหากการทำงานของโปรเซสเซอร์หลายตัวพร้อมกันเวลา CPU จะสูงกว่าเวลานาฬิกาแขวนที่ผ่านไป

นี่เป็นแอปพลิเคชันที่เกิดขึ้นพร้อมกัน / หลายเธรด / ขนานหรือไม่

นี่เป็นสิ่งที่ฉันได้รับจากระบบลีนุกซ์เมื่อฉันออกtime find .คำสั่ง ตามที่คาดไว้เวลาที่ผ่านไปrealนั้นใหญ่กว่าช่วงเวลาอื่น ๆ ในกระบวนการผู้ใช้เดี่ยว / หลักเดียวนี้

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

กฎของหัวแม่มือคือ:

  • ผู้ใช้ <จริง: กระบวนการนั้นถูกผูกไว้กับ CPU และใช้ประโยชน์จากการประมวลผลแบบขนานบนหลายคอร์ / ซีพียู
  • ผู้ใช้จริง: กระบวนการนี้ถูกผูกไว้กับ CPU และไม่ได้รับประโยชน์จากการ exeuction แบบขนาน
  • ผู้ใช้จริง>: กระบวนการเป็น I / O ที่ถูกผูกไว้ การดำเนินการกับหลายคอร์จะมีประโยชน์เพียงเล็กน้อยถึงไม่มีประโยชน์

ฉันไม่รู้ว่าavconvมีหลายเธรดหรือไม่ มันอาจจะเป็น. เป็นคนรุ่นใหม่ของavconv ffmpegฉันกำลังแปลงไฟล์ FLV สั้น 7 ไฟล์ (ประมาณ 20 วินาทีต่อไฟล์)
kobylecki

เรียลไทม์มักจะใหญ่กว่าอีกสองคน - แต่ฉันถามเกี่ยวกับสถานการณ์อื่น ๆ
kobylecki

4
คำอธิบายนี้ถูกต้อง ดูเหมือนว่ากระบวนการนี้ทำงานบน 4 คอร์ ดูคำอธิบายของฉันของhyperthreadingสำหรับข้อมูลเพิ่มเติมเกี่ยวกับการคำนวณเวลาจริง / sys / ผู้ใช้ มันไม่เกี่ยวข้องอย่างแน่นอน แต่แนวคิดเหมือนกัน
บาฮามาต

@ kobylecki เรียลไทม์น้อยกว่าที่อื่นเพราะดูเหมือนว่า avconv นั้นทำงานบนหลายคอร์ เนื่องจากฉันไม่ทราบว่าซอฟต์แวร์หรือวิธีการทำงานฉันไม่ต้องการเรียกร้อง 100% แต่นี่เป็นสิ่งที่ดูเหมือนว่าอิงจากข้อมูลที่มีอยู่ (การวัดเวลา 3 บรรทัดและความรู้: - )
Levon

ในค่า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.