คำสั่งเวลาเฉลี่ยวิธีการ?


18

ฉันกำลังใช้timeคำสั่งของฉันอยู่ ตอนนี้เพื่อเฉลี่ยการวัดฉันต้องการเรียกใช้และเวลาที่คำสั่งของฉันตามจำนวนครั้งที่ระบุและรับผลลัพธ์ด้วยค่าเฉลี่ยที่คำนวณและส่วนเบี่ยงเบนมาตรฐาน ผลลัพธ์จะเป็นเช่น:

avgtime -n 100 my_command

real    0m5.388s stdev 0m0.068s
user    0m5.380s stdev 0m0.067s
sys     0m0.004s stdev 0m0.000s

มีเครื่องมือ UNIX สำหรับสิ่งนี้หรือไม่? GNU / Linux มีหรือไม่

คำตอบ:


7

คุณสามารถลองใช้โมดูล timeit ที่มีอยู่ในระบบใด ๆ กับ Python:

$ python -m timeit "__import__('os').system('my command here')"
10 loops, best of 3: 591 msec per loop

ใช้os.system()ทำให้เกิดค่าใช้จ่ายในการโทร / สร้างเปลือกด้วยแต่ละคำสั่ง น่าจะใช้ดีกว่า subprocess.call ()
โธ

จริง แต่น่าจะเป็นค่าคงที่ - อย่างไรก็ตาม
bhdnx

4

ไม่ใช่เครื่องมือ UNIX หรือ GNU / Linux แต่คุณสามารถใช้สภาพแวดล้อมซอฟต์แวร์Rเพื่อการคำนวณทางสถิติได้ (ฉันไม่สามารถหาอะไรที่เฉพาะเจาะจงสำหรับงานของคุณได้)

แก้ไขฉันจะสงสัยมันมีแน่นอนเป็นแพคเกจมาตรฐานสำหรับ:R rbenchmarkเห็นได้ชัดว่ามันหุ้มsystem.time()ซึ่งคุณสามารถใช้งานได้โดยตรง หรือดูที่นี่ฟังก์ชั่นนาฬิกาจับเวลาที่เรียบง่ายคู่ โปรดดูเพิ่มเติมที่"การเรียกใช้คำสั่งระบบ" @Rosetta Code (หรือไม่เช่นนั้นsystem("command"))

Edit2ฉันเพิ่งเห็นคำถามนี้ "การวัดเวลาภายในสคริปต์"ในคอลัมน์ "ที่เกี่ยวข้อง" ที่ถูกต้องซึ่งสามารถใช้เช่นกันใช้เวลาทำ for-loop ( Nครั้ง) ใช้เวลาอีกครั้งคำนวณเวลาหารด้วยN. (ง่ายยิ่งขึ้นลองtime ( for-loop )แยกวิเคราะห์เอาท์พุNทหารด้วย)


3

คุณสามารถใช้Rเพื่อคำนวณค่าเฉลี่ยค่าเบี่ยงเบนมาตรฐานและค่าที่น่าสนใจอื่น ๆ ได้อย่างรวดเร็ว

ตัวอย่างเช่นคุณสามารถใช้เวลา GNU เพื่อเขียนการวัดรันไทม์หลายรายการลงในไฟล์ CSV:

function measure
{
  f=$1; shift
  n=$2; shift
  echo wall,user,sys,rss > "$f"
  for i in $(seq $n); do
    /usr/bin/time --output "$f" --append --format '%e,%U,%S,%M' "$@" >/dev/null
  done
}

จากนั้นคุณสามารถสร้างค่าด้วย R ดังนี้:

Rscript --vanilla -e "b=read.csv(file='$f');summary(b);sapply(b, sd);"

ฉันได้สร้างสคริปต์มาตรฐานขนาดเล็กที่สามารถทำการพิมพ์ R ผลลัพธ์ได้เช่น:

$ benchmark.sh 100 ./some_prog arg1 arg2
n=100 | min    | Q1     | med    | mean   | Q3     | max    | std
wall  | 0.0400 | 0.0400 | 0.0500 | 0.0471 | 0.0500 | 0.0800 | 0.00624
user  | 0.0400 | 0.0400 | 0.0400 | 0.0426 | 0.0400 | 0.0700 | 0.00562
sys   | 0      | 0      | 0      | 0      | 0      | 0      | 0.00000
rss   | 2608   | 2657   | 2704   | 2728   | 2764   | 2920   | 95.06524

1

ตัวเลือก 1 - sqlite :

สร้างตารางอย่างง่ายพร้อมคอลัมน์คำสั่งและเวลาและดูด้วยการคำนวณการรวมที่เหมาะสม หลังจากหมดเวลาให้เพิ่มแถวลงในตาราง

ข้อดี: กำหนดตารางได้ง่ายกว่าเมื่อเทียบกับโซลูชัน 2

ข้อเสีย: คุณต้องการ (คุณหรือไม่) ดูแลเกี่ยวกับการเก็บข้อมูล

ตัวเลือก 2 - rrdtool :

กำหนดไฟล์ฐานข้อมูล rrd นิยามข้อมูลและฟังก์ชันการรวม rrdtool update ...หลังจากระยะเวลาการให้อาหารฐานข้อมูลด้วย

ข้อดี: rrdtool graph ...คุณสามารถสร้างกราฟด้วย ไม่มีปัญหาการเก็บข้อมูล (ฐานข้อมูลรอบโรบิน)

ข้อเสีย: บิตยากที่จะกำหนดฐานข้อมูล rrd เมื่อเทียบกับตาราง / มุมมอง SQL ที่เรียบง่าย


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.