Làm thế nào để lệnh thời gian trung bình?


18

Tôi đang timeing một số lệnh của tôi. Bây giờ để tính trung bình các biện pháp, tôi muốn chạy và tính thời gian cho các lệnh của tôi một số lần được chỉ định và nhận kết quả với giá trị trung bình và độ lệch chuẩn được tính toán. Kết quả sẽ như sau:

avgtime -n 100 my_command

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

Có một công cụ UNIX cho việc này? GNU / Linux có một cái không?

Câu trả lời:


7

Bạn có thể thử sử dụng mô-đun thời gian, có sẵn trong bất kỳ hệ thống nào với Python:

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

bằng cách sử dụng os.system(), gây ra chi phí gọi / tạo shell với mỗi lệnh. Có lẽ tốt hơn nên sử dụng sub process.call ()
Anthon

đúng, nhưng dù sao cũng có thể là hằng số
bhdnx

4

Nó không chính xác là một công cụ UNIX hoặc GNU / Linux, nhưng bạn hoàn toàn có thể sử dụng môi trường phần mềm R để tính toán thống kê cho việc này. (Tuy nhiên, tôi không thể tìm thấy bất cứ điều gì cụ thể hơn cho nhiệm vụ của bạn .)

Chỉnh sửa Làm thế nào tôi có thể nghi ngờ nó, tất nhiên có một gói điểm chuẩn cho R: rbenchmark. Nó dường như kết thúc tốt đẹp system.time()mà bạn cũng có thể chỉ cần sử dụng trực tiếp. Hoặc có một cái nhìn về điều này, một cặp chức năng đồng hồ bấm giờ đơn giản. Đồng thời xem "Thực thi lệnh hệ thống" @Rosetta Code (hoặc không, nó system("command").)

Edit2 Tôi vừa thấy câu hỏi này, "Đo thời gian trong một tập lệnh" trong cột "Liên quan" bên phải, điều này cũng có thể được sử dụng, tức là mất thời gian, thực hiện vòng lặp ( Nthời gian), tính lại thời gian, tính thời gian, chia cho N. (Thậm chí dễ dàng hơn, hãy thử time ( for-loop ), phân tích đầu ra của nó, chia cho N).


3

Bạn có thể sử dụng Rđể nhanh chóng tính toán giá trị trung bình, độ lệch chuẩn và các giá trị thú vị khác.

Ví dụ: bạn có thể sử dụng thời gian GNU để ghi một số phép đo thời gian chạy vào tệp 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
}

Sau đó, bạn có thể tạo các giá trị với R như thế này:

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

Tôi đã tạo một tập lệnh điểm chuẩn nhỏ cũng thực hiện một số bản in đẹp của đầu ra R, ví dụ:

$ 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

Tùy chọn 1 - sqlite :

tạo bảng đơn giản với các cột lệnh và thời gian và xem với các phép tính tổng hợp thích hợp . Sau khi tính thời gian, thêm một hàng vào bảng.

Ưu điểm: đơn giản hơn để xác định bảng so với giải pháp 2.

Nhược điểm: bạn cần (phải không?) Quan tâm đến việc lưu giữ dữ liệu.

Tùy chọn 2 - rrdtool :

Xác định tệp cơ sở dữ liệu rrd, định nghĩa dữ liệu và hàm tổng hợp. Sau thời gian, cung cấp cơ sở dữ liệu với rrdtool update ....

Ưu điểm: bạn có thể dễ dàng tạo đồ thị với rrdtool graph .... Không có vấn đề lưu giữ dữ liệu (cơ sở dữ liệu vòng tròn).

Nhược điểm: khó xác định cơ sở dữ liệu rrd hơn một chút so với bảng / khung nhìn SQL đơn giản


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.