Pernah mendengar istilah afinitas prosesor? Ini adalah fitur yang memungkinkan Anda untuk mengikat atau melepaskan proses ke unit pemrosesan pusat tertentu, atau rentang CPU. Ya, Anda dapat memberi tahu sistem inti CPU mana yang harus digunakan untuk menjalankan proses tertentu. Untuk detail teoretis tentang mengapa afinitas prosesor ada, buka di sini.
Di sini, dalam tutorial ini, kita akan membahas utilitas - dijuluki taskset - yang memungkinkan Anda mencapai afinitas prosesor. Namun sebelum kita melakukannya, perlu disebutkan bahwa semua contoh dalam tutorial ini telah diuji pada mesin Ubuntu 20.04 LTS dan pada Debian 10.
Perintah rangkaian tugas Linux
Perintah taskset memungkinkan Anda untuk mengatur atau mengambil afinitas CPU proses. Berikut sintaksnya:
taskset [options] mask command [argument...]
taskset [options] -p [mask] pid
Begini cara halaman manual alat menjelaskannya:
taskset is used to set or retrieve the CPU affinity of a running
process given its pid, or to launch a new command with a given CPU
affinity. CPU affinity is a scheduler property that "bonds" a process
to a given set of CPUs on the system. The Linux scheduler will honor
the given CPU affinity and the process will not run on any other CPUs.
Note that the Linux scheduler also supports natural CPU affinity: the
scheduler attempts to keep processes on the same CPU as long as practi?
cal for performance reasons. Therefore, forcing a specific CPU affin?
ity is useful only in certain applications.
The CPU affinity is represented as a bitmask, with the lowest order bit
corresponding to the first logical CPU and the highest order bit corre?
sponding to the last logical CPU. Not all CPUs may exist on a given
system but a mask may specify more CPUs than are present. A retrieved
mask will reflect only the bits that correspond to CPUs physically on
the system. If an invalid mask is given (i.e., one that corresponds to
no valid CPUs on the current system) an error is returned. The masks
may be specified in hexadecimal (with or without a leading "0x"), or as
a CPU list with the --cpu-list option. For example,
0x00000001 is processor #0,
0x00000003 is processors #0 and #1,
0xFFFFFFFF is processors #0 through #31,
32 is processors #1, #4, and #5,
--cpu-list 0-2,6
is processors #0, #1, #2, and #6.
When taskset returns, it is guaranteed that the given program has been
scheduled to a legal CPU.
Berikut adalah beberapa contoh gaya Tanya Jawab yang akan memberi Anda gambaran yang lebih baik tentang cara kerja perintah kumpulan tugas.
Q1. Bagaimana cara menggunakan taskset untuk mengambil afinitas CPU dari suatu proses?
Jika Anda ingin kumpulan tugas menampilkan afinitas CPU dari proses yang sudah berjalan, gunakan perintah dengan cara berikut:
taskset -p [PID]
Ganti saja PID dengan ID proses yang afinitas CPU-nya ingin Anda ambil. Misalnya:
taskset -p 9726
Perintah di atas mengembalikan output berikut:
pid 9726's current affinity mask: f
Jadi nilai heksadesimal 'f' di sini berarti proses dapat berjalan di salah satu dari 4 inti prosesor:0,1,2,3.
Jika Anda ingin output dalam rentang CPU, Anda dapat menambahkan opsi baris perintah -c.
taskset -cp 9726
Berikut adalah output dalam hal ini:
pid 9726's current affinity list: 0-3
Q2. Bagaimana cara mengubah afinitas CPU menggunakan kumpulan tugas?
Untuk mengubah afinitas CPU dari proses yang ada, Anda perlu menentukan ID proses (seperti yang kita lakukan di bagian sebelumnya) bersama dengan topeng heksadesimal yang mendefinisikan afinitas baru.
Misalnya, afinitas CPU saat ini dari proses Gedit (PID:9726) adalah 'f'.
Untuk mengubah afinitas menjadi 0x11, gunakan perintah berikut:
taskset -p 0x11 9726
Dan kemudian Anda dapat memeriksa kembali afinitas baru menggunakan perintah berikut:
taskset -p 9726
Tangkapan layar berikut menunjukkan output untuk perintah ini dalam kasus saya:
Jadi Anda dapat melihat bahwa afinitas telah berubah.
Q3. Bagaimana cara menetapkan rentang CPU saat mengubah afinitas?
Ini bukan masalah besar. Yang harus Anda lakukan adalah menambahkan opsi baris perintah -c ke perintah yang telah kita gunakan di bagian sebelumnya bersama dengan rentang inti CPU sebagai input.
Berikut ini contohnya:
taskset -cp 0,3 9726
Berikut adalah output yang dihasilkan dalam kasus ini:
pid 9726's current affinity list: 0
pid 9726's new affinity list: 0,3
Q4. Bagaimana cara meluncurkan proses dengan afinitas CPU yang telah ditentukan sebelumnya?
Ya, Anda juga dapat meluncurkan proses dengan afinitas CPU yang ditetapkan.
Misalnya, saya meluncurkan editor teks gedit dengan afinitas CPU 0xa.
kumpulan tugas 0xa gedit
Kesimpulan
Setuju, perintah taskset bukan untuk pengguna baris perintah rata-rata. Ini sebagian besar digunakan oleh pakar sisi server untuk pengoptimalan proses di lingkungan multi-inti. Kami telah membahas dasar-dasar alat ini di sini. Untuk info lebih lanjut, kunjungi halaman manualnya.