GNU/Linux >> Belajar Linux >  >> Linux

Haruskah saya mencoba 'menyeimbangkan' utas saya atau apakah linux melakukan ini?

Linux:

Kernel Linux memiliki implementasi yang bagus untuk masalah ini dan memiliki banyak fitur/pengaturan yang dimaksudkan untuk mengelola sumber daya untuk proses yang berjalan (melalui gubernur CPU, sysctl atau cgroup), dalam situasi seperti itu menyetel pengaturan tersebut bersama dengan penyesuaian swap (jika diperlukan) adalah disarankan, pada dasarnya Anda akan mengadaptasi mode fungsi default ke peralatan Anda.

Tolok ukur, tes stres, dan analisis situasi setelah menerapkan perubahan adalah suatu keharusan terutama pada server produksi. Peningkatan kinerja bisa menjadi sangat penting ketika pengaturan kernel disesuaikan dengan penggunaan yang dibutuhkan, di sisi lain hal ini memerlukan pengujian dan pemahaman yang baik tentang berbagai pengaturan yang memakan waktu bagi admin.

Linux memang menggunakan gubernur untuk menyeimbangkan sumber daya CPU antara aplikasi yang berjalan, banyak gubernur tersedia; tergantung pada kernel distro Anda, beberapa gubernur mungkin tidak tersedia (membangun kembali kernel dapat dilakukan untuk menambahkan gubernur yang hilang atau non upstream). Anda dapat memeriksa gubernur saat ini, mengubahnya, dan yang lebih penting dalam hal ini, sesuaikan setelannya.

Dokumentasi tambahan:bacaan, panduan, pertanyaan serupa, penskalaan frekuensi, pilihan gubernur, gubernur kinerja, dan cpufreq.

SysCtl:

Sysctl adalah alat untuk memeriksa dan mengubah parameter kernel saat runtime, penyesuaian dapat dibuat permanen dengan file konfigurasi /etc/sysctl.conf , ini adalah bagian penting dari jawaban ini karena banyak pengaturan kernel dapat diubah dengan Sysctl, daftar lengkap pengaturan yang tersedia dapat ditampilkan dengan perintah sysctl -a , detail tersedia di ini dan artikel ini.

Grup:

Kernel menyediakan fitur:grup kontrol, yang disebut dengan nama cgroup yang lebih pendek dalam panduan ini. Cgroups memungkinkan Anda untuk mengalokasikan sumber daya seperti waktu CPU, memori sistem, bandwidth jaringan, atau kombinasi dari sumber daya ini di antara kelompok tugas (proses) yang ditentukan pengguna yang berjalan pada sistem. Anda dapat memantau cgroup yang Anda konfigurasikan, menolak akses cgroup ke sumber daya tertentu, dan bahkan mengkonfigurasi ulang cgroup Anda secara dinamis pada sistem yang sedang berjalan. Layanan cgconfig (konfigurasi grup kontrol) dapat dikonfigurasi untuk memulai saat boot dan membangun kembali cgroup yang telah ditentukan sebelumnya, sehingga membuatnya tetap ada saat reboot.

Sumber, bacaan lebih lanjut dan pertanyaan tentang masalah ini.

Ram:

Ini dapat berguna jika sistem memiliki jumlah ram yang terbatas, jika tidak, Anda dapat menonaktifkan swap untuk menggunakan ram tersebut. Sistem swap dapat disesuaikan per proses atau dengan pengaturan swappiness. Jika diperlukan sumber daya (ram) dapat dibatasi per proses dengan ulimit (juga digunakan untuk membatasi sumber daya lain).

Disk:

Pengaturan Disk I/O (I/O Scheduler) dapat diubah begitu juga dengan ukuran kluster.

Alternatif:

Tools lain seperti nice, cpulimit, cpuset, taskset atau ulimit bisa dijadikan alternatif untuk urusan tersebut.


Jawaban terbaik untuk ini adalah "hisap dan lihat"... lakukan beberapa tes stres dan lihat apa yang memberikan hasil terbaik. Itu karena nuansa yang sangat kecil dalam perilaku utas Anda dapat menyebabkan perbedaan kinerja.

Berikut ini sebagian besar berdasarkan pengalaman saya sendiri...

Di mana untuk memulai?

Kemampuan Linux mencegah thread kelaparan cukup bagus. Itu tidak berarti bahwa setiap utas akan mendapatkan bagian kue yang sama, tetapi semua utas setidaknya akan mendapatkan beberapa kue. Jika Anda memiliki dua utas yang memperebutkan waktu CPU ... katakanlah satu mencoba menggunakan 100% CPU dan yang lain mencoba menggunakan hanya 10% ... maka jangan heran jika itu seimbang pada 91% dan 9% atau di suatu tempat sekitar itu.

Performa keseluruhan dapat mengurangi di mana sumber daya tertentu berat lebih dari berlangganan. Ini terutama berlaku untuk disk IO pada hard disk yang berputar. Head harus secara fisik berpindah (mencari) antar tempat di disk dan terus-menerus berosilasi di antara file yang berbeda dapat menyebabkan pelambatan yang signifikan. Tetapi efek ini seringkali cukup kecil jika satu utas sangat terikat IO dan yang lain ingin melakukan sedikit YA.

Bersama-sama kedua hal ini berarti bahwa seringkali lebih baik menjadi 20% lebih berlangganan daripada 20% kurang berlangganan. Dengan kata lain, jangan mencadangkan waktu CPU untuk utas yang tidak mencoba menggunakan banyak CPU.

Misalnya:Jika Anda memiliki utas terikat CPU dan memiliki utas terikat IO disk dan Anda memiliki 8 inti dan 1 hard disk, maka mulai dengan 8 utas terikat CPU dan satu utas terikat IO hard disk. 7 dan 1 mungkin membiarkan inti menganggur sebagian besar waktu. 8 dan 1 hampir pasti tidak akan membuat thread HD kelaparan, artinya Anda sepenuhnya menggunakan HD dan CPU.

Bahaya utas berumur pendek

Berhati-hatilah karena Linux dapat kesulitan dengan banyak dari benang berumur pendek. Ini lebih jelas dengan upaya yang disengaja untuk merusak sistem. Tetapi terus-menerus memunculkan utas/proses dapat mendorong Linux berperilaku buruk.

Dalam pertanyaan Anda, Anda telah menjelaskan utas pekerja khusus yang terdengar seperti utas berumur panjang. Ini terdengar seperti pendekatan yang tepat.

Efek Bus London

Anda menunggu bus selama setengah jam, lalu 5 datang sekaligus. Ini terjadi karena penumpang yang naik ke bus depan memperlambatnya. Kurangnya penumpang di bus selanjutnya mempercepat mereka menyebabkan efek pengelompokan.

Masalah yang sama bisa muncul di threading, terutama dengan utas yang memperebutkan sumber daya. Jika Anda memiliki utas yang dapat diprediksi berganti-ganti di antara tugas, misalnya membaca dari satu disk lalu menulis ke disk lain, maka utas tersebut cenderung berkumpul bersama daripada penyebaran stokastik seperti yang Anda duga. Jadi satu sumber daya dapat memperlambat penggunaan yang lain. Karena alasan ini, terkadang lebih baik membagi lagi tugas-tugas utas.

cgroup

Saya akan menghindari terlalu banyak detail. Tetapi saya harus menyebutkan bahwa Linux memiliki kemampuan yang disebut "cgroups" yang memungkinkan Anda untuk mengelompokkan proses dan membatasi sumber daya kolektifnya. Ini bisa sangat berguna dalam penyempurnaan kinerja lebih lanjut.

Ada diskusi singkat tentang mereka di sini. Tetapi saya akan menyarankan Anda untuk menghabiskan sedikit waktu di Google untuk melihat kemampuan penuh mereka karena mereka dapat membantu Anda dalam jangka panjang.


Linux
  1. Linux – Bagaimana Load Average Bekerja Dengan CPU Modern?

  2. Beginilah Cara Server Linux Beroperasi

  3. Layanan OS Linux 'cpuspeed'

  1. Apa maksud - dalam perintah linux ini?

  2. ZFS di Linux, apakah itu berfungsi?

  3. Bagaimana cara Linux membedakan utas dari proses anak?

  1. Linux – Haruskah Saya Menginstal 32 Atau 64 Bit?

  2. Linux – Bagaimana Cara Memeriksa Informasi Struktur Direktori File Unix/linux?

  3. PERCOBAAN BREAK-IN YANG MUNGKIN! di /var/log/secure — apa artinya ini?