Tại sao Finder chạy ở mức ưu tiên quá trình thấp như vậy?


13

Tôi có một chút mất mát về điều này.
Tôi đang thực hiện nhập khẩu lớn ở khẩu độ và điều đó khiến hệ thống của tôi chậm lại để thu thập thông tin hoàn chỉnh, về cơ bản khiến nó không thể sử dụng được cho bất cứ điều gì, ngay cả khi duyệt web. Vì điều này có vẻ hơi không tự nhiên, tôi đã dành một ít thời gian để nhìn xung quanh.

Chạy ps -Alcho thấy, rõ ràng theo mặc định, Dock, Finder, và SystemUIServertất cả dường như chạy ở một ưu tiên xa hạ các ứng dụng sau đó Userland. Trong khi các ứng dụng người dùng thường có mức ưu tiên là 33, thì Dock, Finder, v.v có mức độ ưu tiên là 53.

Kết quả cuối cùng, là BẤT K task nhiệm vụ chuyên sâu nào của bộ xử lý đã chặn hoàn toàn UI và khiến hệ thống không thể sử dụng được cho đến khi hoàn thành.

Dù sao, việc sử dụng renice -20 -p <prid>chúng có mức độ ưu tiên giống như phần còn lại của giao diện người dùng và kết quả là không phải chờ 1-3 giây (!) Để giao diện người dùng phản hồi với một thứ đơn giản như một cú click chuột.

Thad nói, tôi có hai câu hỏi:
Có lý do nào tôi không nên thay đổi mức độ ưu tiên của chủ đề của công cụ tìm như thế này không?
Có cách nào để thay đổi mức độ ưu tiên liên tục không, ví dụ như vậy nó vẫn giữ nguyên như vậy sau khi khởi động lại.


9
Tôi thường thấy rằng đó là đĩa i / o, không phải tải cpu, khiến hệ thống của tôi thu thập dữ liệu. Trình tìm kiếm và các ứng dụng khác mà bạn đề cập có lẽ đang chờ đọc / ghi khi chúng dường như không phản hồi. Tuy nhiên, tôi thực sự không có giải pháp nào cho vấn đề này (ngoài việc lấy đĩa nhanh như SSD), vì vậy tôi sẽ đăng bài này dưới dạng bình luận thay vì trả lời.
Kyle Cronin

5
Tôi cũng sẽ nghĩ như vậy. Tuy nhiên, việc thay đổi mức độ ưu tiên của luồng sẽ ảnh hưởng đến hành vi của UI, điều này khiến tôi nghĩ rằng mức độ ưu tiên của luồng cũng ảnh hưởng đến việc xử lý hàng đợi IO hoặc thực sự là CPU bị giới hạn.
Tên giả

1
Ví dụ, với mức độ ưu tiên của dock còn lại là chứng khoán, phải mất 5-10 giây để phản ứng với con chuột được di chuyển qua nó. Với nó được tăng thủ công lên đến 33 như mọi thứ khác, nó sẽ phản ứng ngay lập tức (mặc dù có một chút sứt mẻ).
Tên giả

3
Cập nhật: Lệnh đẹp ảnh hưởng đến cả xử lý hàng đợi CPU IO: insanelymac.com/forum/lofiversion/index.php/t164156.html
Tên giả

2
Vấn đề không phải là giới hạn không gian bộ nhớ / đĩa. Tôi đang chạy các quy trình cố ý lấy tất cả các tài nguyên mà họ có thể. Một bộ lập lịch biến đổi thích hợp sẽ cho phép hệ thống duy trì phản hồi hoàn hảo (hoặc ít nhất chỉ gây ra một cú đánh hiệu suất nhỏ) mặc dù điều này, miễn là mức độ ưu tiên được đặt đúng. Tuy nhiên, vì một số lý do điên rồ, khía cạnh quan trọng nhất của UI được đặt ở mức ưu tiên thấp nhất có thể và do đó toàn bộ hệ thống về cơ bản được hiển thị không sử dụng được.
Tên giả

Câu trả lời:


1

Tôi không chắc ai thiếu nhà phát triển của Apple sẽ có thể trả lời câu hỏi này, bí mật bên trong của Finder là miền của họ. Nếu bạn nghĩ rằng có một số vấn đề độ trễ đáng chú ý với giao diện người dùng, bạn có thể muốn gửi báo cáo lỗi cho Apple về nó.

Đánh giá từ âm thanh của sự vật (các quá trình cố tình chiếm hết tài nguyên) đây là một trường hợp khó khăn để quản lý bộ nhớ. Tôi vẫn chưa thấy một hệ thống hoạt động tốt nhất mà không có khoảng 10-20% tài nguyên miễn phí, dưới dạng hỗ trợ đệm.

Chỉ cần tò mò, những gì các quá trình bạn đang chạy?


Python, chủ yếu. Làm một số tính toán đệ quy nặng.
Tên giả

Ngoài ra, xử lý ảnh hàng loạt
Tên giả

Nghe có vẻ giống như vấn đề sử dụng RAM hơn là vấn đề CPU. Tôi đã có một cái gì đó như git sử dụng hàng tấn CPU mà không làm chậm giao diện người dùng, nhưng khi một cái gì đó bắt đầu ăn hết RAM thì giao diện người dùng bị ảnh hưởng lớn. Việc sử dụng RAM của bạn như thế nào trong các quá trình này?
Tim

1

"Tôi đang thực hiện nhập khẩu lớn ở khẩu độ và điều đó khiến hệ thống của tôi chậm lại để thu thập dữ liệu hoàn chỉnh"

Sau đó, Aperture là (có thể) chương trình bạn muốn renice, không phải các chương trình khác. Các quy trình bạn đề cập được điều chỉnh liên quan đến các ứng dụng người dùng trung bình, để các ứng dụng người dùng có mức độ ưu tiên cao hơn và vẫn đáp ứng, vì chúng là những gì người dùng sử dụng hầu hết thời gian.

Trường hợp của bạn là trường hợp ít phổ biến hơn, trong đó một ứng dụng đang thực hiện một nhiệm vụ chuyên sâu, lâu dài và người dùng muốn làm một việc khác cùng một lúc. Theo mặc định, các ứng dụng của người dùng được ưu tiên để các tác vụ chuyên sâu này nhận được nhiều tài nguyên hơn và hoàn thành sớm hơn.

Đối với mọi người dùng phàn nàn rằng các ứng dụng khác không đủ đáp ứng, có một người dùng khác phàn nàn rằng ứng dụng đang hoạt động không chạy đủ nhanh.

Nếu bạn đang chạy một nhiệm vụ chuyên sâu về tài nguyên và bạn biết rằng bạn muốn nó có mức độ ưu tiên thấp hơn để bạn có thể sử dụng các quy trình khác trong khi nhiệm vụ hoàn thành và bạn không bận tâm nếu nhiệm vụ chuyên sâu mất nhiều thời gian hơn thì bạn nên hạ mức độ ưu tiên quá trình chạy các nhiệm vụ chuyên sâu.

Đối với câu hỏi thứ hai của bạn, có một số giải pháp khả thi để thực hiện renicetự động hơn. Ví dụ: bạn có thể tạo một applet script chạy Aperture ở mức ưu tiên thấp hơn và sử dụng nó để bắt đầu Aperture. Hoặc bạn có thể khởi động Aperture thông qua tập lệnh shell được lưu trữ trong tệp * .command (tuy nhiên, điều đó sẽ mở Terminal và chạy lệnh trong cửa sổ terminal, có thể không phải là điều bạn muốn). Mỗi trong số này là một chút liên quan. Nếu bạn muốn ví dụ, tôi có thể xem về việc cung cấp chúng sau này.


Các tác vụ nền, theo định nghĩa , nên ở mức ưu tiên thấp hơn các nhiệm vụ nền trước. Các quan trọng nhất nhiệm vụ foreground trong toàn hệ thống là giao diện đồ họa, trong đó phần lớn là quá trình Finder. Tôi có thể vá các luồng trên cơ sở từng quá trình bằng cách renice, nhưng vấn đề thực sự là ưu tiên người tìm.
Tên giả

Ví dụ: trong Windows 7, có một trong những GUI nhạy nhất xung quanh, Window-Manager sẽ tự động chạy với mức độ ưu tiên là "Cao". Bây giờ, điều này có nghĩa là hành vi sai của quá trình này sẽ khiến hệ thống bị lag, nhưng điều đó cũng có nghĩa là hành vi sai ở nơi khác sẽ không xảy ra . Tôi đã gặp sự cố khi sử dụng 100% mọi lõi CPU và giao diện người dùng trên windows vẫn cực kỳ nhạy.
Tên giả

1
Tên @Fake: Finder không xử lý bất kỳ khía cạnh nào của UI ngoài các cửa sổ riêng (thư mục và biểu tượng trên màn hình). (Có thể thoát Finder, nó thực sự đã biến mất và mọi thứ khác vẫn hoạt động.) SystemUIServer xử lý các mục bên phải của thanh menu và các lớp phủ "bezel" (âm lượng / độ sáng, v.v.). Kết xuất cửa sổ và các sự kiện được xử lý hoàn toàn bởi các quy trình WindowServer.
Kevin Reid

@Fake Name, như một điểm cần làm rõ: renicehoạt động trên các quy trình, không phải các luồng.
Chris Trang

1

Tôi đã đặt ra một câu hỏi tương tự - từ lâu, trên ServerFault - mặc dù không tập trung cụ thể vào Finder (mặc dù tôi cũng thấy Finder cũng bị chậm không thể chịu đựng được). Làm thế nào để vĩnh viễn đổi mới một quá trình trên Mac OS X (hoặc iOS, v.v.)? Không có nhiều thông tin được lượm lặt ở đó - như một cách hay để thực hiện điều này hay tại sao nó lại như vậy ..

Tôi vẫn nghĩ về điều này thường xuyên, và thực sự có một vài cách để nói chuyện với "những điều cơ bản" nếu bạn dám. Như đã đề cập trước đây, bạn có thể thực hiện nhiều thao tác vỏ khác nhau .. nhưng một nơi tốt cho những hành vi sai trái đó là các /etc/rc*thói quen khởi động khác nhau .. đã có trong đó .. thiết lập tất cả các loại tham số hệ thống tùy ý (định nghĩa táo) cho bạn. hoặc chỉnh sửa chúng hoặc tìm kiếm cách thêm các thói quen của riêng bạn vào quá trình khởi động.

Ngoài ra, nếu bạn thực sự muốn làm cho đầu của bạn nổ tung ..

sudo sysctl list và đó là chìa khóa cho hộp của pandora, aka /etc/sysctl.conf

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.