perbedaan antara tasket dan cpuset

8

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.

  1. Mana yang harus saya pilih? Apakah mereka setara pada level yang lebih rendah?
  2. (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?
John Linberg
sumber
Apakah Anda membaca halaman manual masing-masing?
Michael Hampton
Sudahkah Anda menjalankan profil terperinci sehingga Anda yakin bahwa itu adalah bagian jaringan Linux yang menyebabkan latensi, dan bukan aplikasi?
Tero Kilkanen
OS / distribusi / versi / kernel apa yang Anda jalankan?
ewwhite
Juga, jenis perangkat keras apa yang terlibat? Server / model, spesifikasi CPU, infrastruktur jaringan ...
ewwhite

Jawaban:

12

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, numactldisarankan selesai taskset.

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.

# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user

Ada hal-hal lain yang perlu diperiksa dan dicari sebelum Anda menempuh jalan proses pengikatan ke CPU; interupsi ( irqbalancecacat 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.

Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
  until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program
putih
sumber
1
Catatan, mungkin bagi aplikasi untuk mengatur ulang afinitasnya saat menggunakan taskset. Jika Anda menggunakan cpuset, Anda tidak dapat mengubah kedekatan Anda dari apa yang cpuset berikan kepada Anda.
Matthew Ife
Dan numactl??
ewwhite
1
Sama, kedua program memanggil panggilan sistem mendasar yang sama sched_setaffinity.
Matthew Ife