Vì tôi hiện đang thử nghiệm những thứ mới trong lời nhắc của mình, tôi cần một cách để biết tác động hiệu suất là gì.
Làm thế nào tôi có thể theo dõi mất bao lâu để hiển thị lời nhắc của mình và thời gian để lấy nguồn. * RC?
Vì tôi hiện đang thử nghiệm những thứ mới trong lời nhắc của mình, tôi cần một cách để biết tác động hiệu suất là gì.
Làm thế nào tôi có thể theo dõi mất bao lâu để hiển thị lời nhắc của mình và thời gian để lấy nguồn. * RC?
Câu trả lời:
Với các lệnh này, bạn sẽ có thể định chuẩn thời gian khởi động, bao gồm tìm nguồn của các tệp RC (+ một lệnh in, không nên thêm nhiều chi phí):
time zsh -i -c "print -n"
time bash -i -c "echo -n"
Với hơn 1000 dòng trong .zshrc
quá trình này, tôi mất 0,3 giây khi cài đặt cygwin. Và không, nó thực sự không có máy cao cấp (iCore2Duo P8700).
Về thời gian kết xuất nhanh chóng:
trong bash
đó có thể xây time
dựng các lệnh. Tuy nhiên, tôi không biết khả năng hiển thị $PS1
như một dấu nhắc.
trong zsh
đó là chiều ngược lại, với print -P $PS1 $RPS1
bạn có thể làm cho bạn nhắc với một lệnh in. (man zshbuiltins: " [print] -P Thực hiện mở rộng nhanh chóng"). Nhưng dường như thời gian không hoạt động với các lệnh dựng sẵn. Đó là lý do tại sao tôi đã hack cái này:
cumul=0; for i ({0..99}) {
start=$(date +%s.%N)
end=$(date +%s.%N)
(( cumul+= (end-start) ))
}
overhead=$((cumul/100.))
cumul=0; for i ({0..99}) {
start=$(date +%s.%N)
print -P $PS1 $RPS1
end=$(date +%s.%N)
(( cumul+= (end-start) ))
}
print $((cumul/100. - overhead))
Đầu tiên, điều này đo lường chi phí gây ra bởi các date
lệnh. Nó được thực hiện 100 lần để thống kê tốt hơn. Sau đó, print -P $PS1 $RPS1
bao gồm, cũng thực hiện 100 lần và chi phí được xác định trong phần đầu tiên được trừ. Các lệnh liên tiếp cho thấy rằng bạn không thể tin tưởng vào chữ số 1ms, nhưng chữ số 10ms có vẻ đáng tin cậy. Với một giá trị dự kiến theo thứ tự giây sẽ đủ.
Nhưng, như @Michael Kjorling đã được đề cập trong một bình luận, lời nhắc sẽ hiển thị ngay lập tức. Vì vậy, bạn cũng nên suy nghĩ về cách tối ưu hóa lời nhắc của mình hoặc tính đến, theo kinh nghiệm của tôi, thời gian kết xuất nhanh chóng (như trong câu hỏi của bạn) chỉ là một phần rất nhỏ của thời gian hiển thị lời nhắc . (Tôi nói ở đây chủ yếu về shell Z, nhưng tôi giả sử trong bash có các khái niệm tương tự.) Bởi vì có các hàm khác được thực thi trước khi dấu nhắc được hiển thị. Đây là những gì xuất hiện ngay trong tâm trí của tôi:
precmd
: Được thực hiện trước mỗi dấu nhắc; sử dụng which precmd
để xem nó là gì trong trường hợp của bạnsharedhistory
bật tùy chọn , tệp ~/.zsh_history
(hoặc bất cứ thứ gì bạn đặt tên) sẽ được đọc. Đặc biệt nếu thư mục chính của bạn nằm trên một hệ thống tập tin từ xa, có thể gây ra sự chậm trễ đáng kể. Tôi cũng quan sát thỉnh thoảng vài giây trước khi lời nhắc được hiển thị khi máy chủ NFS được tải nặng.Một công cụ để phân tích các yêu cầu về thời gian của các chương trình bên ngoài / các chức năng bên trong một cách chi tiết là zsh/zprof
mô-đun, được tải bởi
zmodload zsh/zprof
Từ man zshmodules
: "Khi được tải, zsh / zprof làm cho các hàm shell được định hình. Kết quả định hình có thể thu được bằng lệnh dựng sẵn zprof được cung cấp bởi mô-đun này."