Saya mencoba mengurangi latensi aplikasi jaringan linux saya. Saya telah belajar bahwa ada dua alat untuk "mengikat" suatu program ke inti CPU tertentu: tasket dan cpuset.
- Mana yang harus saya pilih? Apakah mereka setara pada level yang lebih rendah?
- (disposisi) Aplikasi saya memiliki utas tunggal dan seharusnya memproses koneksi tcp tunggal (tanpa koneksi ulang) melalui jaringan LAN cepat dengan latensi yang sesedikit mungkin. Apakah saya di jalan yang benar?
central-processing-unit
performance-tuning
latency
multi-core
John Linberg
sumber
sumber
Jawaban:
Taskset adalah untuk mengikat suatu proses ke satu atau lebih CPU; pada dasarnya menentukan di mana ia dapat berjalan pada eksekusi awal atau saat sedang berjalan. Jika menggunakan RHEL / CentOS pada peralatan server modern,
numactl
disarankan selesaitaskset
.Cpuset / cset adalah untuk melindungi CPU dan merupakan kerangka kerja di sekitar Linux cgroups. Cset tidak pernah populer di distribusi tertentu (seperti RHEL) karena ada alat lain yang tersedia untuk manajemen proses.
Perintah pertama di bawah ini menciptakan sebuah perisai yang akan membatasi tugas-tugas sistem operasi untuk inti CPU 0 dan 8. Yang kedua akan memindahkan sesi shell Anda saat ini ke perisai CPU yang ditentukan, menghasilkan isolasi sistem dan proses pengguna.
Ada hal-hal lain yang perlu diperiksa dan dicari sebelum Anda menempuh jalan proses pengikatan ke CPU; interupsi (
irqbalance
cacat parsial), pengaturan hemat daya, penjadwal sistem, elevator I / O, kebijakan waktu-nyata (chrt
).Lihat: Pengaturan TCP latensi rendah di Ubuntu
Berikut ini adalah contoh ( berbelit-belit ) dari pembungkus aplikasi yang memilih inti, menghentikan irqbalance, mulai dan blacklist inti yang dipilih, kemudian jalankan ./nama_program dengan SCHED_FIFO dan prioritas 99 pada inti yang dipilih.
sumber
taskset
. Jika Anda menggunakan cpuset, Anda tidak dapat mengubah kedekatan Anda dari apa yang cpuset berikan kepada Anda.numactl
??sched_setaffinity
.