Làm thế nào để chạy một chương trình chỉ với một lõi CPU?


28

Tôi đang cố gắng chạy một loạt các kịch bản liên quan đến một máy chủ chơi game trong Terminator. Vấn đề duy nhất là khi tôi làm điều này, Terminator phát hiện tất cả các lõi CPU của tôi và PC bị chậm. Có cách nào để khởi động nó nhưng lừa nó nghĩ rằng tôi chỉ có 1 lõi CPU?


2
Xin chào, có vẻ như bạn có thể đang gặp phải vấn đề xy ở đây, đôi khi đáng để nhìn lại những gì bạn muốn đạt được và không phải là giải pháp đã cố gắng vì dường như điều bạn cần là chạy chương trình mà không làm chậm PC, không chỉ để chạy một cái gì đó trên một lõi. Không hơn không kém, đây là một câu hỏi rất hay. +1
Vality

Câu trả lời:


44

Nó không phải terminatorlà làm "lây lan" trên tất cả CPU của một quy trình nhất định. Bản thân Linux (kernel) đang làm điều này. Một tác vụ (tiến trình) được lên lịch là có sẵn để chạy trên tất cả các CPU theo mặc định; nếu nó sử dụng các luồng, nó có thể sử dụng nhiều CPU cùng một lúc.

Để hạn chế một quy trình cho một CPU cụ thể, bạn sử dụng lệnh taskset.

taskset --cpu-list 1,2 my_command 

Lệnh này buộc my_command chỉ chạy trên CPU # 1 hoặc # 2.

Để tìm hiểu thêm, hãy nhập man tasksethoặc tìm kiếm "mối quan hệ CPU linux" (lần đầu tiên nhấn vào đây ).


2
Nhân tiện, bạn cũng có thể cố gắng làm mới các quy trình "xấu", giảm mức độ ưu tiên lên lịch của chúng.
Matteo Italia

@MatteoItalia Tôi thấy rằng Ubuntu 13.10 và 14.04 mặc định bỏ qua mức tốt đẹp. Bạn phải thêm kernel.sched_autogroup_enabled = 0vào /etc/sysctl.confđể làm cho nó làm việc. Tuy nhiên tôi cũng thấy rằng 13.10 thường xuyên hoảng loạn kernel trong khi khởi động, nếu autogroup bị vô hiệu hóa.
kasperd

Điều gì về các quá trình con của quá trình cha mẹ? Họ có kế thừa mối quan hệ cốt lõi / cpu của quá trình cha mẹ của họ không?
yildizabdullah

5

Mặc dù một câu trả lời khác đã đưa ra câu trả lời theo nghĩa đen, tôi sẽ khám phá khả năng điều này không được thực hiện đúng cách. Thay vào đó, bạn nên chạy một tập lệnh mà bạn không muốn làm chậm máy tính (chẳng hạn như tập lệnh không tương tác) bằng cách sử dụng nicelệnh.

Để thực hiện điều này, chỉ cần thêm tiền tố vào lệnh bạn muốn chạy, chẳng hạn: nice command_to_run Điều này sẽ khiến chương trình được ưu tiên bên dưới các tác vụ khác và sẽ không làm chậm máy của bạn. Tôi thường sử dụng kỹ thuật này khi thực hiện một trình biên dịch dài, điều này sẽ làm chậm PC của tôi khi thu thập dữ liệu, điều này có lợi thế là cho phép chương trình sử dụng tất cả các lõi khi máy không bận nhưng sẽ nhanh chóng dừng sử dụng chúng khi bạn chạy một cái gì đó khác


Nếu tôi sử dụng một lệnh như "terminator mở tốt đẹp" thì terminator sẽ chạy với tất cả các lõi CPU bất kể?
dùng245115

Ồ, và nhân tiện, nếu tôi di chuyển chuột và không có gì đang mở thì nó có sử dụng tất cả CPU không? Và phải mất bao lâu sau khi tôi ngừng di chuyển chuột để sử dụng tất cả CPU? Và tôi có thể sử dụng cái này với tasket không? (Vâng, tôi là một người mới thực sự với Linux.)
user245115

@ user245115 Nếu bạn sử dụng tiện ích tốt, có thể bộ kết thúc sẽ sử dụng nhiều lõi CPU, tuy nhiên nó sẽ ngay lập tức ngừng sử dụng các lõi đó nếu một chương trình khác (không chạy tốt) muốn sử dụng chúng để bạn không gặp sự cố chậm, tuy nhiên nó sẽ không bị chậm sử dụng chúng nếu chúng hoàn toàn miễn phí và không sử dụng. Điều này không bị ảnh hưởng bởi việc sử dụng chuột hoặc bất kỳ tương tác nào khác với chương trình.
Vality

@ user245115 Cũng có thể sử dụng điều này với tasket chỉ bằng cách viết taskset nice open terminatorđể sử dụng cả hai. Tuy nhiên, điều đó sẽ là quá mức vì bạn sẽ sử dụng hai chương trình khác nhau để vừa đạt được hiệu quả giảm việc sử dụng tài nguyên của chương trình.
Vality

@ user245115 Khoảnh khắc bạn thực hiện bất kỳ hành động nào khác (như di chuyển chuột) sẽ được cung cấp ít thời gian CPU hơn, điều này thực sự tức thì và ngay khi bạn dừng hoạt động khác, nó sẽ sử dụng lại (cũng có hiệu quả tức thì)
Vality
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.