[ Catatan editor:Ada batasan yang diketahui untuk menyematkan CPU di beberapa lingkungan, jadi pastikan untuk membaca tentang detail lingkungan Anda sebelum mengikuti tutorial ini. ]
CPU menjalankan semua aplikasi dan sebaiknya Anda memahami cara kerjanya serta cara menyesuaikan penggunaan CPU untuk meningkatkan performa aplikasi Anda.
Sistem modern biasanya memiliki beberapa CPU dan inti, yang digunakan bersama di antara semua perangkat lunak yang berjalan oleh penjadwal kernel. Jadi biasanya, Anda tidak peduli dengan CPU/inti mana yang dijalankan oleh aplikasi atau proses Anda, selama itu berjalan.
Ada beberapa cara untuk mendapatkan lebih banyak CPU dan membuat aplikasi Anda bekerja lebih baik dan berjalan lebih efisien. Salah satu caranya adalah dengan menggunakan penyetelan prioritas menggunakan nice
/renice
perintah.
[ Anda mungkin juga menyukai: Unit pemrosesan pusat (CPU):Komponen dan fungsinya ]
Cara kedua adalah dengan mengikat aplikasi ke satu atau lebih CPU, yang disebut “CPU pinning” atau “CPU affinity.” Mengikat aplikasi ke CPU atau CPU tertentu membuat semua rangkaian atau proses turunan yang terkait dengan aplikasi berjalan pada CPU/CPU yang ditentukan. Dengan cara ini, membatasi proses/aplikasi ke satu atau lebih CPU menghasilkan lebih banyak "cache warm" atau "cache hit", sehingga meningkatkan kinerja secara keseluruhan. Manfaat pertama dari afinitas CPU adalah mengoptimalkan kinerja cache. Manfaat kedua dari afinitas CPU adalah jika beberapa utas mengakses data yang sama, masuk akal untuk menjalankan semuanya pada prosesor yang sama—membantu kami meminimalkan kesalahan cache.
Metode 1 - penyesuaian prioritas
Mengubah prioritas proses menggunakan nice
memerintah. Ini mungkin cara paling umum yang diketahui untuk meningkatkan penggunaan CPU aplikasi/proses.
Unix selalu menyediakan nice()
panggilan sistem untuk menyesuaikan prioritas proses, yang menetapkan kebaikan nilai. Positif nice
nilai menghasilkan prioritas proses yang lebih rendah (lebih bagus ), dan nilai negatif—yang hanya dapat disetel oleh pengguna super (root)—menghasilkan prioritas yang lebih tinggi.
nice
nilai masih berguna saat ini untuk menyesuaikan prioritas proses. Tugas Anda adalah mengidentifikasi pekerjaan berprioritas rendah, yang mungkin mencakup agen pemantauan dan pencadangan terjadwal, yang Anda ubah untuk memulai dengan nice
nilai. Anda juga dapat melakukan analisis untuk memeriksa apakah penyetelan efektif dan latensi penjadwal tetap rendah untuk pekerjaan berprioritas tinggi.
Bagaimana cara kerjanya?
Setiap proses diberikan jumlah waktu tertentu untuk berjalan di CPU. Waktu sebenarnya saat proses berjalan di CPU disebut runtime virtual dari proses. Omong-omong, CPU cenderung bertindak seperti seorang ayah dan memiliki kebiasaan membagi waktu secara merata di antara semua anak (proses).
Total waktu yang dihabiskan suatu proses "pada CPU" adalah waktu proses virtual. Sistem operasi (OS) menyimpan catatan waktu proses virtual ini dan mencoba memberikan waktu yang sama untuk semua proses dalam antrean proses.
nice
dan renice
utilitas memanipulasi waktu proses virtual ini.
Saat Anda memberi nilai positif dengan renice
/nice
perintah, misalnya - renice +10
PID
, Anda secara manual menambahkan lebih banyak waktu proses virtual ke proses. OS berpikir bahwa proses tersebut telah mengambil lebih banyak waktu proses virtual daripada proses lain dalam antrean proses. Jadi pada siklus berikutnya, CPU memberikan lebih sedikit waktu untuk proses. Proses selesai terlambat karena semakin sedikit waktu "di CPU" sekarang, setelah renice
perintah.
Namun saat Anda memberi nilai negatif dengan renice
/nice
perintah, misalnya - renice -10 PID
, Anda secara manual mengurangi waktu proses virtual. OS berpikir bahwa proses tersebut tidak memiliki cukup waktu "pada CPU" daripada proses lain dalam antrian yang dijalankan. Jadi pada siklus berikutnya, CPU memberikan lebih banyak waktu "di CPU" untuk proses itu dibandingkan dengan proses lain dalam antrian yang dijalankan. Prosesnya akan selesai dengan cepat.
Metode 2 - pengikatan proses
Suatu proses mungkin terikat pada satu atau lebih CPU, yang dapat meningkatkan kinerjanya dengan meningkatkan kehangatan cache atau hasil cache dan lokalitas memori . Di Linux, ini dilakukan menggunakan taskset
perintah, yang dapat menggunakan CPU masker atau rentang untuk menyetel afinitas CPU.
Menggunakan taskset
, Anda telah mengikat proses 6197 untuk berjalan hanya di CPU 1. Ini akan menghasilkan lebih banyak cache warm/cache hit. Proses lain juga dapat berjalan di CPU 1, tetapi proses hanya berjalan di CPU 1 dan CPU 2. Konfigurasi ini tidak permanen. Jika server mengalami reboot atau proses dimulai ulang, PID akan berubah. Jadi konfigurasi ini hilang.
Cara yang lebih baik adalah dengan menggunakan file “drop-in”.
Metode 3 - afinitas CPU melalui file drop-in
Sesuai Wikipedia, Afinitas prosesor , atau penyematan CPU atau “cache affinity”, memungkinkan pengikatan dan pelepasan ikatan proses atau utas ke unit pemrosesan pusat (CPU) atau rentang CPU, sehingga proses atau utas hanya akan dijalankan pada CPU atau CPU yang ditentukan, bukan CPU mana pun .
Biasanya, itu adalah kernel yang menentukan CPU suatu proses berjalan. Setiap kali penjadwal menjadwal ulang suatu proses, penjadwal dapat pergi ke salah satu CPU yang tersedia. Meskipun ini baik untuk sebagian besar beban kerja, terkadang diinginkan untuk membatasi CPU mana yang boleh dijalankan oleh suatu proses. Misalnya, membatasi proses yang membutuhkan banyak memori hanya pada satu atau dua CPU akan meningkatkan kemungkinan cache terkena, sehingga meningkatkan kinerja secara keseluruhan.
Bagaimana cara kerjanya?
Digambarkan di sini, Anda memiliki tiga aplikasi:X, Y &Z. Perilaku default penjadwal adalah menggunakan semua CPU yang tersedia untuk menjalankan rangkaian aplikasi X, Y &Z. Dengan menggunakan setelan default, Anda dapat melihat bahwa Anda akan mendapatkan jumlah cache yang hilang karena aplikasi tersebar di semua CPU. Yang menyebabkan lebih sedikit cache yang ditemukan dan lebih banyak cache yang hilang.
Saat aplikasi disematkan ke CPU tertentu, aplikasi tersebut dipaksa untuk berjalan pada CPU tertentu sehingga menggunakan cache CPU lebih efektif—lebih banyak kode pada CPU yang sama. Melakukannya menghasilkan lebih banyak cache warm/cache hit dan dengan demikian aplikasi yang berkinerja lebih baik.
Untuk mempelajari bagaimana Anda dapat menggunakan penyematan CPU/afinitas CPU untuk mengikat proses ke prosesor tertentu, sematkan sshd
proses ke CPU 0.
Periksa status saat ini dari sshd
melayani. Anda sedang memeriksa CPU mana yang mengikatnya.
Menurut taskset
perintah halaman manual, nilai f
berarti "CPU apapun." Jadi tidak ada penyematan atau pengikatan CPU yang dikonfigurasi untuk sshd
layanan.
Ikat sshd
service ke CPU 0—membuat drop-in file yang akan Anda gunakan untuk mengontrol perilaku sshd
melayani. File drop-in mengontrol banyak hal yang terkait dengan suatu proses, tetapi saat ini, Anda membatasi diri Anda pada penyematan/afinitas CPU.
Anda dapat melihat bagaimana taskset
perintah menunjukkan CPU sebagai "1", yang menurut taskset
halaman manual adalah CPU pertama yang tersedia.
Anda dapat mengkonfirmasi lebih lanjut file drop-in dengan memeriksa status sshd
layanan.
Menutup
Anda dapat menggunakan nice
atau renice
untuk mengubah prioritas proses. Keduanya nice
dan renice
perintah dapat memanipulasi "runtime virtual" dari proses. Jadi, berdasarkan nilai, proses menghabiskan lebih banyak atau lebih sedikit waktu di CPU.
Anda dapat mengikat/menyematkan proses ke satu atau lebih CPU. Ini meningkatkan kemungkinan lebih banyak cache warm/cache hits sehingga menghasilkan kinerja yang jauh lebih baik. Anda dapat menggunakan taskset
alat baris perintah untuk tujuan ini. Tapi efeknya hanya sementara. Jika Anda ingin konfigurasi tetap ada, Anda harus menggunakan file "masuk".
[ Kursus online gratis:Tinjauan teknis Red Hat Enterprise Linux. ]