Làm cách nào để thiết lập mối quan hệ bộ xử lý trên OS X?


17

Làm thế nào để bạn thiết lập mối quan hệ bộ xử lý trong Snow Leopard trên MacBook Pro? Tôi biết trong Windows bạn chỉ có thể chuyển đổi nó trong Trình quản lý tác vụ.


2
<snarky-comment> Chạy OS X trong máy ảo và đặt mối quan hệ của máy ảo </ snarky-comment>
zildjohn01

Tại sao bạn muốn làm điều này? Nói chung, đó là một ý tưởng tồi trừ khi bạn đang cố gắng để các chương trình cũ chạy được mã hóa quá tệ, chúng bị hỏng trên các hệ thống đa lõi.
jalf

2
@jalf: mối quan hệ của bộ xử lý có thể cải thiện hiệu suất vì nó làm giảm tính năng vô hiệu hóa bộ đệm & rác trong một số trường hợp.

1
Điều đó thật đáng thất vọng. Có vẻ như Mac sẽ không bao giờ là một nền tảng lý tưởng để phát triển phần mềm theo thời gian thực.
Evan Plaice

1
@jweyrich Chấp nhận các CPU có QPI (NUMA của Intel) giống như trên Mac Pro, trong đó cài đặt ái lực CPU sẽ vô hiệu hóa ái lực bộ nhớ và giảm hiệu suất. Điều này không áp dụng cho bộ xử lý di động mặc dù.
Jano

Câu trả lời:


14

OS X đã hỗ trợ API mối quan hệ luồng kể từ phiên bản 10.5. Đây là một số tài liệu có liên quan từ trang web tôi liên kết đến.

Đặt mối quan hệ

Một tập hợp mối quan hệ là một tập hợp các luồng chia sẻ tài nguyên bộ nhớ và muốn chia sẻ bộ đệm L2. Các bộ ái lực riêng biệt đại diện cho các mối quan hệ riêng biệt, đó là, các luồng thuộc một bộ khác nên sử dụng bộ đệm L2 riêng và do đó được chạy trên một bộ xử lý logic khác.

Một bộ ái lực được xác định bởi một "thẻ". Chủ đề được gán cho một mối quan hệ cụ thể bằng cách gán cho nó thẻ xác định bộ đó. Một chủ đề có thể thuộc tối đa một bộ ái lực; đó là, nó có một thẻ ái lực.

Hiệu quả của việc thiết lập các thẻ có mối quan hệ khác biệt

Ví dụ, một ứng dụng muốn chạy 2 luồng trên bộ đệm L2 riêng biệt sẽ đặt các luồng có các thẻ có ái lực khác nhau. Trên một máy lõi kép, mối quan hệ này sẽ bị bỏ qua một cách hiệu quả. Tuy nhiên, trên MacPro 4 lõi, bộ lập lịch sẽ cố gắng chạy các luồng trên các gói riêng biệt. Tương tự, trên MacPro 8 lõi, bộ lập lịch sẽ cố gắng chạy các luồng này trên các khuôn riêng biệt (có thể có hoặc không có trong cùng một gói CPU vật lý).

Cách sử dụng ví dụ

Một ứng dụng muốn đặt một luồng trên mỗi bộ xử lý có sẵn sẽ làm như sau:

  • Lấy số lượng bộ xử lý trên hệ thống bằng sysctl (3).
  • Tạo số lượng chủ đề.
  • Đặt mỗi luồng với một thẻ ái lực riêng biệt.
  • Bắt đầu tất cả các chủ đề.

Các chủ đề với chính sách mối quan hệ mặc định sẽ được lên lịch tự do hơn trên bất kỳ bộ xử lý nào. Các luồng này sẽ được ưu tiên di chuyển để chạy trên bộ xử lý nhàn rỗi. Chủ đề với các thẻ mối quan hệ sẽ có xu hướng vẫn ở vị trí.

Tham khảo nguồn cho danh sách mã và thông tin về việc chia sẻ thẻ mối quan hệ giữa các tiến trình cha và con, có được cấu hình bộ đệm CPU và hơn thế nữa.


Có tiện ích dòng lệnh nào, ngoài API này không?
Victor Eijkhout

11

http://developer.apple.com/mac/l Library / releasenotes / Formformance / RN-AffinityAPI /

Mac OS X không xuất giao diện xác định bộ xử lý hoặc điều khiển vị trí luồng Chủ đề rõ ràng cho chủ đề ràng buộc bộ xử lý không được hỗ trợ . Thay vào đó, kernel quản lý tất cả các vị trí luồng. Các ứng dụng hy vọng rằng trình lập lịch biểu, trong hầu hết các trường hợp, sẽ chạy các luồng của nó bằng cách sử dụng vị trí bộ xử lý tốt liên quan đến mối quan hệ bộ đệm.


2
OS X đã hỗ trợ API mối quan hệ luồng kể từ phiên bản 10.5. Xem câu trả lời của tôi để biết chi tiết.
void-con trỏ

4

Cho đến thời điểm hiện tại, bộ lập lịch XNU (1504.3.12) không thực hiện mối quan hệ của bộ xử lý đối với các tiến trình cũng như các luồng.

Vì vậy, MacOSX không cung cấp bất kỳ phương tiện nào để làm điều đó.


2

Từ http://images.apple.com/macosx/docs/OSX_for_UNIX_Users_TB_July2011.pdf

• Chủ đề hạt nhân hiệu quả. Mỗi luồng POSIX được xếp hàng trên một CPU cụ thể, cải thiện mối quan hệ và khả năng mở rộng của bộ xử lý trong khi giảm sự tranh chấp khóa. Các chủ đề phù hợp với POSIX (1c), bao gồm hỗ trợ cho việc hủy bỏ và các trường hợp bị chia sẻ.

Có vẻ như quảng cáo với tôi, iMac chạy Lion của tôi có vẻ tôn trọng điều đó hầu hết thời gian, nhưng nó không phải là quá trình cốt lõi.

Tôi không thể tìm thấy bất kỳ API nào để kiểm soát mối quan hệ quá trình cho darwin.

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.