Phải làm gì khi mà Nice tốt không đủ tốt (FreeBSD)


8

x265Gần đây tôi đã sử dụng để mã hóa một số video trên máy trạm của mình, nhưng tôi gặp một vấn đề: mặc dù tôi đã khởi chạy nó bằng cách nice -n 20 x265khử nó, nhưng nó vẫn làm chậm máy tính khi đang chạy. Mọi thứ vẫn hoạt động, chỉ là ... chậm thôi! Tôi thậm chí còn thấy sự chậm trễ trước khi các ký tự xuất hiện trong khi gõ vào một thiết bị đầu cuối.

Tôi có phải sống với điều này không, hay có một số thứ khác tôi có thể thử?

EDIT: Có lẽ sau đây là bằng chứng cho thấy giá trị tốt đẹp thực sự đang được áp dụng x265? Nhìn vào NIcột.

% ps -awux -O nice | egrep "x265|PID"
USER      PID  %CPU %MEM     VSZ     RSS TT  STAT STARTED       TIME COMMAND            PID NI TT  STAT       TIME COMMAND
nobody  56654 789.3  3.7  785656  623384 11  SN+J 11:56PM    6:05.80 x265 --input-csp 56654 20 11  SN+J    6:05.80 x265 --input-csp i420 --bframes 5 -

2
Đây có thể là một vấn đề I / O. Dữ liệu sống ở đâu? Một ổ SSD nhanh có thể giúp ích.
michas

Tôi nghi ngờ đó là một vấn đề CPU chứ không phải IO. Đó là bởi vì tôi có thể tái tạo vấn đề với video đầu vào 4 MB (khoảng 60 khung hình). Toàn bộ video này có thể được đọc từ SSD trong một giây. X265 mất nhiều thời gian hơn để mã hóa video (ít hơn một khung hình mỗi giây). Tuy nhiên, vấn đề vẫn tồn tại trong toàn bộ hoạt động! Nếu điều đó là không đủ, các video (cả nguồn và đích) đều được lưu trữ trên một ổ SSD chuyên dụng không được sử dụng cho bất kỳ thứ gì khác trên hệ thống.
trọng lực

2
Nó có duy trì mức độ tốt đẹp của nó sau khi bạn thiết lập nó? Nó khởi chạy bao nhiêu luồng và làm thế nào để so sánh với số lượng lõi cpu? Nếu nó bắt đầu rất nhiều chủ đề hoặc ngã ba quá trình khác. Nice có thể không giúp được gì ở đây ...
Bichoy

1
Xin chào @BrandonThomson, hãy kiểm tra câu hỏi Ubuntu này để có được số lượng chủ đề: askubfox.com/questions/88972/ chủ
Bíchoy

3
Ngoài ra, hãy kiểm tra tài liệu x265 x265.readthedocs.org/en/latest/threading.html , bạn có thể chỉ cần kiểm soát số lượng chủ đề bắt đầu bởi x265, hãy bỏ qua một trong 8 lõi của bạn cho các ứng dụng khác ...
Bichoy

Câu trả lời:


3

Hạt nhân FreeBSD thực hiện một cái gì đó giống như một bộ lập lịch I / O, cụ thể là gsched . Xem lại trang hướng dẫn, nó có vẻ là một bộ lập lịch IO dành riêng cho thiết bị. Cá nhân, tôi nghĩ rằng đây là một bài phát biểu hay về các ứng dụng FreeBSD thời gian thực và một lý do tuyệt vời để tìm kiếm tài liệu FreeBSD hiện có, một cách trung thực.

Mặc dù theo suy đoán, có lẽ với thiết bị khối của phân vùng gốc được định cấu hình để sử dụng bộ lập rrlịch, sử dụng gschedvà các tệp phương tiện được lưu trữ trên một thiết bị khối riêng biệt, có lẽ nó có thể phục vụ để cho phép hệ điều hành hoạt động nhạy hơn, trong I / O, thậm chí với nút cổ chai I / O?

Có lẽ, với việc gschedáp dụng cùng với cấu hình cho các ưu tiên của bộ xử lý - áp dụng như rtprio và / hoặc idprio - nó có thể phục vụ để cải thiện khả năng phản hồi của hệ điều hành chính, ngay cả khi tải nặng từ quá trình xử lý tệp phương tiện.

Thay phiên, có lẽ có thể có thêm một số băng thông bộ xử lý, với các cổng được biên dịch theo tối ưu hóa dành riêng cho CPU. Hướng tới hiệu ứng đó, có MACHINE_CPUARCHCPUTYPEcác trường, như vậy có thể được áp dụng /etc/make.confvà sẽ được áp dụng trong quá trình xây dựng cổng [ trang thủ công ]. Sổ tay, tất nhiên, cung cấp rất nhiều gợi ý về việc xây dựng các cổng với FreeBSD [ ch.5 ]. Chính tôi, tôi đã sử dụng MACHINE_CPUARCH?=amd64CPUTYPE?=core2trên một máy tính xách tay Toshiba cũ. Nó dường như hoạt động tốt như một cổng LAN, mặc dù tôi đã không điểm chuẩn nó dưới tải cao trong bộ xử lý hoặc chặn các tính năng I / O.


2

Đôi khi, một thao tác I / O nặng có thể ảnh hưởng đến hiệu suất của kernel đối với tất cả các t / I, kể cả những thao tác không trực tiếp hoạt động trên thiết bị của lần đầu tiên.

  • Cách đầu tiên và gián tiếp để kiểm soát các ưu tiên trong lập lịch I / O là điều chỉnh mức độ tốt đẹp của quy trình mà bạn đã đề cập. Trong các Linux hiện đại, một quy trình có giá trị tốt là 19 (nghĩa là tối đa) theo mặc định trong lớp nỗ lực tốt nhất với mức độ ưu tiên bằng (19 + 20) / 5 = 7, là mức ưu tiên thấp nhất có sẵn trong lớp. Tổng quát hơn, nó nằm trong [0,7] theo chức năng ánh xạ như vậy.

  • Cách thứ hai, trực tiếp và mạnh mẽ hơn để kiểm soát lập lịch I / O là can thiệp thủ công vào lớp lập lịch I / O được gán cho các quy trình. Điều này cho phép chúng tôi đặt một quy trình vào hai lớp bổ sung: lớp thời gian thực , với mức độ ưu tiên cao hơn mức nỗ lực tốt nhất 0 và lớp nhàn rỗi , với mức độ ưu tiên thấp hơn mức nỗ lực tốt nhất 7. Điều này về mặt lý thuyết cuối cùng đảm bảo rằng không có I / O nào khác hoạt động có thể chờ đợi cho một hoạt động quá trình theo lịch trình nhàn rỗi. Tương tự như nicelệnh, ionicecho phép một người sinh ra một quy trình với mức độ ưu tiên nhất định hoặc thay đổi các ưu tiên của quy trình hiện có. Thông tin thêm về công cụ này và lập lịch I / O trên các nhân Linux nói chung có thể được tìm thấy trong trang manice .

Điều đó đang được nói, bạn đã cố gắng để khởi động quá trình của bạn với ionice -c 3 x265 ...?

PS Xin lỗi, tôi nhận thấy thẻ 'FreeBSD' trong câu hỏi sau khi đăng câu trả lời của tôi, có lẽ sụp đổ vào sau.

Tôi không nghĩ FreeBSD có bất kỳ bộ lập lịch I / O nào. Bạn có thể xem xét thực hiện công việc của mình trên một hộp Linux, trong đó có nó và nó khá dễ chơi với nó.


1
Không phải là một người bạn lo lắng, tôi chắc chắn các chi tiết sẽ hữu ích cho nhiều người khác đang duyệt chủ đề này =)
trọng lực

0

Bạn muốn "rctl"

xem:

man rctl

cho phép bạn phân bổ tài nguyên cho mỗi người dùng, mỗi quy trình, tù hoặc lớp đăng nhập. VÍ DỤ

# user root, maximum reads of 400 transfers per sec (tps) per the whole user :
rctl -a user:root:readiops:throttle=400/user

# user root, maximum reads of 30Mb per sec (31,457,280 bytes) per the whole user :
rctl -a user:root:readbps:throttle=31457280/user
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.