Bagaimana menjalankan program dengan hanya satu inti CPU?

28

Saya mencoba menjalankan banyak skrip yang terkait dengan server permainan di Terminator. Satu-satunya masalah adalah ketika saya melakukan ini, Terminator mendeteksi semua core CPU saya dan PC tertinggal. Apakah ada cara untuk memulai tetapi mengelabui dengan berpikir saya hanya memiliki 1 inti CPU?

pengguna245115
sumber
2
Hai, sepertinya Anda mungkin menderita masalah xy di sini, kadang-kadang ada baiknya melihat kembali apa yang ingin Anda capai dan bukan solusi yang Anda coba karena tampaknya apa yang Anda butuhkan adalah menjalankan program tanpa memperlambat Anda PC, bukan hanya menjalankan sesuatu pada satu inti. Meskipun demikian, ini adalah pertanyaan yang sangat bagus. +1
Vality
terkait: unix.stackexchange.com/questions/23106/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

44

Bukan itu terminatoryang melakukan "penyebaran" pada semua CPU dari proses yang diberikan. Linux sendiri (kernel) melakukan ini. Tugas (proses) dijadwalkan tersedia untuk dijalankan pada semua CPU secara default; jika menggunakan utas, ia dapat menggunakan lebih dari satu CPU sekaligus.

Untuk membatasi proses ke CPU tertentu, Anda menggunakan perintah taskset.

taskset --cpu-list 1,2 my_command 

Perintah ini memaksa my_command untuk berjalan hanya pada CPU # 1 atau # 2.

Untuk mempelajari lebih lanjut, ketik man tasksetatau cari "linux CPU affinity" (klik pertama di sini ).

Rmano
sumber
2
Ngomong-ngomong, Anda juga bisa mencoba mengubah proses yang "buruk", menurunkan prioritas penjadwalannya.
Matteo Italia
@MatteoItalia Saya menemukan bahwa Ubuntu 13.10 dan 14.04 mengabaikan level yang bagus secara default. Anda harus menambahkan kernel.sched_autogroup_enabled = 0untuk /etc/sysctl.confuntuk membuatnya bekerja. Namun saya juga menemukan bahwa 13.10 sering panik kernel saat boot, jika autogroup dinonaktifkan.
kasperd
Bagaimana dengan proses anak dari proses induk? Apakah mereka mewarisi afinitas inti / cpu dari proses induknya?
yildizabdullah
5

Meskipun jawaban lain sudah memberikan jawaban literal saya akan mengeksplorasi kemungkinan ini tidak dilakukan dengan cara yang benar. Sebagai gantinya, Anda harus menjalankan skrip yang tidak ingin memperlambat komputer (seperti skrip non interaktif) menggunakan niceperintah.

Untuk melakukan ini, cukup awali perintah yang ingin Anda jalankan dengan baik, misalnya: nice command_to_run Ini akan menyebabkan program tidak diprioritaskan di bawah tugas-tugas lain dan tidak akan memperlambat mesin Anda. Saya sering menggunakan teknik ini ketika melakukan kompilasi panjang yang jika tidak akan memperlambat PC saya untuk merangkak, ini memiliki keuntungan memungkinkan program untuk menggunakan semua core ketika mesin tidak sibuk tetapi akan segera menghentikannya menggunakan mereka ketika Anda menjalankan sesuatu lain.

Vality
sumber
Jika saya menggunakan perintah seperti "nice open terminator" akankah terminator berjalan dengan semua core CPU?
user245115
Oh, dan omong-omong, Jika saya menggerakkan mouse saya dan tidak ada yang terbuka apakah akan menggunakan semua CPU? Dan berapa lama setelah saya berhenti menggerakkan mouse saya untuk menggunakan semua CPU? Dan dapatkah saya menggunakan ini dengan tasket? (Ya, saya benar-benar noob dengan Linux.)
user245115
@ user245115 Jika Anda menggunakan utilitas yang bagus mungkin saja terminator akan menggunakan beberapa inti CPU, namun ia akan segera berhenti menggunakan inti tersebut jika program lain (tidak berjalan dengan baik) ingin menggunakannya sehingga Anda tidak akan mengalami perlambatan, namun itu akan gunakan jika mereka benar-benar gratis dan tidak digunakan. Ini tidak boleh dipengaruhi oleh penggunaan mouse atau interaksi lainnya dengan program.
Vality
@ user245115 Juga dimungkinkan untuk menggunakan ini dengan tasket hanya dengan menulis taskset nice open terminatoruntuk menggunakan keduanya. Namun itu akan berlebihan karena Anda akan menggunakan dua program yang berbeda untuk mencapai efek mengurangi penggunaan sumber daya program.
Vality
@ user245115 Saat Anda mengambil tindakan lain (seperti menggerakkan tetikus) terminator akan diberi lebih sedikit waktu CPU, ini efektif secara instan dan segera setelah Anda menghentikan aktivitas lain ia akan menggunakannya lagi (juga efektif instan)
Vality