Cara menetapkan program ke inti CPU menggunakan set tugas

Karena prosesor multi-core menjadi semakin umum di server, laptop atau PC desktop, dan bahkan perangkat seluler, semakin banyak aplikasi yang dioptimalkan untuk jenis sistem ini. Namun, terkadang berguna untuk menautkan program atau proses ke satu atau lebih kernel tertentu. Mari kita lihat bagaimana cara mendapatkannya ...

Instal kumpulan tugas

Alat kumpulan tugas adalah bagian dari paket "util-linux". Sebagian besar distribusi Linux datang dengan paket yang sudah diinstal sebelumnya secara default. Jika kumpulan tugas tidak tersedia, Anda dapat menginstalnya sebagai berikut:

En Debian / Ubuntu dan turunannya:

sudo apt-get instal util-linux

En Fedora dan turunannya:

sudo yum menginstal util-linux

Lihat afinitas CPU dari proses yang sedang berjalan

Untuk mengambil informasi afinitas CPU untuk suatu proses, gunakan format berikut:

tasket -p PID

Misalnya, untuk memeriksa afinitas CPU dari suatu proses dengan PID 2915:

tasket -p 2915

Mengembalikan hasil:

masker afinitas pid 2915 saat ini: ff

tasket mengembalikan afinitas CPU saat ini dalam format topeng bit heksadesimal. Dalam contoh, afinitas (diwakili dalam topeng bit heksadesimal) sesuai dengan "11111111" dalam format biner, yang berarti bahwa proses dapat berjalan pada salah satu dari delapan inti CPU yang berbeda (0 hingga 7).

Bit terendah dalam masker bit heksadesimal sesuai dengan ID inti 0, bit terendah kedua dari hak ke ID inti 1, bit terendah ketiga ke ID inti 2, dan seterusnya. Jadi, misalnya, afinitas CPU "0x11" mewakili ID inti 0 dan 4.

tasket dapat menampilkan afinitas CPU sebagai daftar prosesor daripada bitmask, yang lebih mudah dibaca. Untuk menggunakan format ini, Anda harus menjalankan kumpulan tugas dengan opsi "-c". Sebagai contoh:

tasket -cp 2915

Mengembalikan hasil:

Daftar afinitas pid 2915 saat ini: 0-7

Paksa proses untuk dijalankan pada kernel tertentu

Dengan menggunakan kumpulan tugas, proses yang berjalan dapat ditetapkan ke inti CPU tertentu. Untuk melakukan ini, Anda harus menggunakan format berikut:

tasket -p COREMASK PID tasket -cp CORE-LIST PID

Misalnya, untuk menetapkan proses ke inti 0 dan 4, Anda akan menjalankan:

set tugas -p 0x11 9030

Apa hasilnya:

masker afinitas pid 9030 saat ini: ff pid 9030 masker afinitas baru: 11

Secara bersamaan, Anda dapat menjalankan:

tasket -cp 0,4 9030

Dengan opsi "-c", Anda dapat menentukan daftar ID kernel numerik, dipisahkan dengan koma, atau Anda bahkan dapat menyertakan rentang (misalnya, 0,2,5,6-10).

Luncurkan program menggunakan kernel tertentu

tasket juga memungkinkan peluncuran program baru menggunakan sejumlah kernel tertentu. Untuk melakukan ini, itu harus digunakan dalam format berikut:

Kumpulan tugas COREMASK yang dapat dieksekusi

Misalnya, untuk memulai program VLC pada CPU core ID 0, gunakan perintah berikut:

set tugas -c 0 vlc

Dedikasikan inti hanya untuk program tertentu

Meskipun kumpulan tugas memungkinkan penugasan program ke kernel tertentu, itu tidak berarti bahwa tidak ada program atau proses lain yang memanfaatkannya. Untuk menghindarinya dan mendedikasikan seluruh kernel untuk program tertentu, Anda harus menggunakan parameter kernel "isolcpus", yang memungkinkan Anda untuk memesan kernel selama startup.

Untuk melakukan ini, Anda harus menambahkan parameter "isolcpus =" di baris kernel di GRUB. Misalnya, untuk memesan inti ID 0 dan 1, tambahkan "isolcpus = 0,1".

Setelah ini selesai, penjadwal Linux tidak akan menetapkan proses reguler apa pun ke kernel yang dicadangkan, kecuali ditugaskan secara khusus dengan kumpulan tugas.

sumber: xmodulo & halaman manual tasket.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Penanggung jawab data: Miguel Ángel Gatón
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   petercheco.dll dijo

    Posting yang bagus :).

  2.   Luis dijo

    Postingan bagus tapi tanpa niat nge-troll ...

    Apa gunanya menugaskan program ke kernel tertentu ???

    Maksudku; Jika Anda memiliki komputer dengan 12 core, hal yang logis adalah program tertentu akan dieksekusi menggunakan 12 core tersebut dan tidak membatasinya karena dengan cara itu kami mendapatkan kinerja setinggi mungkin.

    Apa yang saya lihat berguna adalah opsi yang memungkinkan kita untuk tidak menetapkan proses apa pun ke kernel tertentu, meninggalkan penggunaan eksklusifnya untuk program tertentu.

    1.    jvk85321.dll dijo

      Masuk akal apa yang Anda sebutkan, dengan membiarkan perencana menggunakan semua inti, sumber daya lebih seimbang, tetapi terkadang inti dedikasi eksklusif diperlukan, seperti menjalankan mesin virtual dengan tugas tertentu, kinerja mesin itu meningkat secara substansial ketika tidak ada lagi proses yang berjalan di kernel yang ditetapkan.

      atte
      jvk85321.dll

      1.    ayo gunakan linux dijo

        Tepat! Terima kasih, jvk! 🙂

      2.    lf dijo

        Tetapi ketika Anda membuat mesin virtual, ia meminta Anda untuk memilih jumlah CPU yang dialokasikan ... apa gunanya memilih nilai ini jika pada akhirnya sistem operasi menghilangkan ini dan menjalankannya di semua CPU ... Untuk itu contohnya bukan yang terbaik ...

        Untuk membuat Flash berfungsi pada Windows 8.1 x64, AMD dan Firefox, disarankan untuk memilih bahwa Flash hanya berjalan pada satu CPU, namun tidak berhasil untuk saya. Akan lebih mudah jika Anda menambahkannya (jika belum ada) ke task manager dari DE yang berbeda, atau setidaknya KDE.

      3.    lf dijo

        ah, saya tidak mengerti akhir dari komentar tersebut ... Tetapi untuk itu, semua proses pada CPU yang menjalankan mesin virtual harus dilarang. Atau tetapkan ke CPU lain. Komentar yang menarik dan sangat bagus.

    2.    Fernando dijo

      Digunakan untuk membuat superkomputer jenius

  3.   Luis dijo

    Itu dimengerti.

    Terimakasih atas klarifikasinya.

  4.   Teck dijo

    Saat memesan kernel untuk program tertentu, apa yang terjadi dengan thread eksekusi? Jika Anda melakukannya dengan kernel dengan HT, ia menyimpan 2 thread eksekusi untuk program tersebut.

  5.   Pengalih dijo

    Perintah ini mungkin terlihat tidak terlalu berguna pada komputer dengan beberapa core, tetapi bagi kita yang memiliki Dual Core cukup praktis. Misalnya, saya memiliki permainan yang ketika saya membukanya menggunakan semua inti prosesor dan jika saya juga memiliki program lain yang membutuhkan CPU (seperti pencarian dengan grep dalam file besar) maka sistem melambat. Solusinya sesederhana membatasi permainan untuk hanya menggunakan salah satu inti.
    Saya juga setuju dengan lf, mereka benar-benar harus mengintegrasikan ini ke dalam task manager (yang telah saya coba sejauh ini di Gentoo, saya rasa belum ada yang memilikinya), terutama ketika di Windows ini sudah ada sejak XP (klik kanan pada proses> "Tetapkan afinitas ...") tetapi beberapa waktu lalu saya menemukan skrip berikut yang mengubah kumpulan tugas menjadi sesuatu yang sedikit lebih intuitif (aslinya diterbitkan di sini dan bahkan beberapa kasus ditunjukkan di mana perlu untuk mengelola penggunaan inti):
    #!/bin/bash
    read -p 'Ingrese el ID del proceso en cuestión: ' ID
    read -p 'Ingrese la lista de procesadores separados por comas: ' P
    echo 'Su ID es '$ID' y los procesadores son '$P
    sudo taskset -p -c $P $ID
    read -p 'Listo, presione enter para finalizar' P

    Dengan beberapa modifikasi, ini bisa menunjukkan nama proses dan bukan PID (atau menerima keduanya dan memutuskan kapan parameter itu adalah satu atau yang lain).

  6.   joss dijo

    tidak ada antarmuka grafis untuk kumpulan tugas bagi pengguna baru, alangkah baiknya