Có thể giới hạn một quy trình Linux để nó chỉ có thể chạy trên một lõi cụ thể trên một máy cụ thể không?


10

Giả sử tôi có một hộp lõi tứ và bốn quy trình giống hệt nhau, mỗi quy trình có mười luồng. Có thể, trong Linux, để nói rằng Quy trình A chỉ được phép chạy trên CPU 0, Quy trình B chỉ được phép chạy trên CPU 1, v.v.?

Câu trả lời:


16
taskset <affinity mask> -p <process>

I E

taskset 1 -p 12345

để đặt quy trình 12345 chỉ sử dụng bộ xử lý / lõi 1

Bitmask có thể là một danh sách (tức là 1,3,4 để sử dụng lõi 1 3 và 4 của hệ thống lõi 4+) hoặc bitmask ở dạng hex (0x0000000D 1,3,4, 0x00000001 cho lõi 1)

tasksetthường là trong một gói được gọi là shedutils.

Chỉnh sửa: gần như quên ... Nếu bạn muốn đặt mối quan hệ của một lệnh mới thay vì thay đổi nó cho một quy trình hiện có, hãy sử dụng:

taskset <mask> <program> [<arg1>]...[<argN>]

1

Sử dụng tasket (produc-linux 2.13-pre7): tasket [tùy chọn] [mask | danh sách cpu] [pid | cmd [args ...]] thiết lập hoặc có được mối quan hệ của một quá trình

-p, --pid hoạt động trên pid -c, --cpu-list hiện có và chỉ định cpus ở định dạng danh sách -h, --hỗ trợ hiển thị thông tin phiên bản đầu ra trợ giúp -v, --version này

Hành vi mặc định là chạy một lệnh mới: tasket 03 sshd -b 1024 Bạn có thể truy xuất mặt nạ của một tác vụ hiện có: tasket -p 700 Hoặc đặt nó: tasket -p 03 700 Định dạng danh sách sử dụng danh sách được phân tách bằng dấu phẩy thay vì mask: tasket -pc 0,3,7-11 700 Phạm vi trong định dạng danh sách có thể có một đối số sải chân: ví dụ 0-31: 2 tương đương với mặt nạ 0x55555555

bạn luôn có thể tối ưu hóa máy chủ của bạn khi bạn cầ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.