- Menyetel kernel Linux membutuhkan kombinasi konfigurasi arsitektur, sysctl, dan penjadwalan CPU yang berorientasi pada latensi.
- Kernel kustom dan patch PREEMPT_RT memungkinkan pengurangan latensi yang ekstrem, tetapi melibatkan lebih banyak kompleksitas dan pemeliharaan.
- Optimalisasi jaringan, memori, disk, dan layanan sistem harus selalu diukur dengan pemantauan dan pengujian kinerja yang ketat.
- Pendekatan iteratif berbasis metrik mengubah peningkatan kernel menjadi manfaat nyata bagi aplikasi dan pengguna.

Ketika kita berbicara tentang performa di Linux, hampir semuanya bermuara pada hal yang sama: kernel sebagai komponen sentral yang mengontrol latensi, stabilitas, dan penggunaan sumber daya.Menyetelnya dengan benar dapat membuat perbedaan antara sistem yang hanya "sekadar berfungsi" dan sistem yang merespons dengan lancar di server, desktop, lingkungan cloud, atau bahkan di perangkat keras yang sangat tua.
Panduan ini berfokus pada bagaimana Optimalkan kernel Linux untuk meminimalkan latensi tanpa mengorbankan keamanan atau kemudahan pemeliharaan.Kita akan membahas semuanya, mulai dari konsep arsitektur dasar hingga pengaturan dengan sysctl, kompilasi kernel kustom, penggunaan patch real-time, penyetelan untuk jaringan latensi rendah (seperti di EC2), dan teknik pemantauan dan benchmarking untuk mengukur apakah pengaturan yang Anda lakukan benar-benar meningkatkan sesuatu.
Arsitektur kernel Linux dan poin-poin penting untuk latensi.
Kernel Linux bertindak sebagai lapisan perantara antara aplikasi dan perangkat keras, mengelola memori, proses, interupsi, driver, dan sistem file. Su desain monolitik namun modularBerkat modul yang dapat dimuat, Anda dapat secara fleksibel mengaktifkan atau menonaktifkan fungsi tanpa perlu mengkompilasi ulang seluruh sistem.
Untuk memahami dari mana latensi berasal, penting untuk mengetahui beberapa subsistem: perencana proses (penjadwal)Manajemen memori dan penanganan interupsi sangat penting. Penjadwal yang dikonfigurasi dengan buruk, kebijakan memori yang agresif, atau jumlah interupsi yang tidak terkontrol secara berlebihan dapat mengakibatkan waktu respons yang lambat, bahkan dengan perangkat keras yang canggih.
Konfigurasi kernel melibatkan opsi-opsi seperti CONFIG_PREEMPT, CONFIG_PREEMPT_VOLUNTARY atau CONFIG_SMPFaktor-faktor ini menentukan sejauh mana kernel dapat diinterupsi untuk menangani tugas-tugas yang lebih mendesak dan bagaimana kernel memanfaatkan sistem multi-core. Memilih model preemption yang tepat secara signifikan mengubah latensi yang dirasakan pada desktop, server berlatensi rendah, atau sistem industri.
Pada server modern, topologi perangkat keras juga penting: distribusi core, socket, NUMA, dan hierarki cachePenyempurnaan afinitas CPU dan kebijakan NUMA (misalnya, menetapkan proses dan memori ke node yang sama) membantu mengurangi waktu akses dan meningkatkan tingkat hit cache, yang merupakan kunci ketika kita ingin meminimalkan jitter dan latensi yang tidak dapat diprediksi.
Selain itu, interaksi antara penjadwal CPU dan subsistem dari Input/Output (disk dan jaringan) menentukan throughput dan latensi ujung-ke-ujung. yang dilihat oleh aplikasi. Sebelum mengubah apa pun, sebaiknya dokumentasikan kondisi saat ini (konfigurasi kernel, sysctl, GRUB, modul yang dimuat) agar Anda dapat dengan cepat mengembalikan ke kondisi semula jika perubahan tersebut memperburuk kinerja.
Penyesuaian melalui sysctl untuk meningkatkan latensi dan kinerja.
antarmuka sysctl memungkinkan Anda untuk memodifikasi parameter kernel secara langsung. melalui /proc/sys, tanpa perlu mengkompilasi ulang. Ini adalah titik masuk yang ideal untuk mulai melakukan penyetelan tanpa harus terjebak dalam proses kompilasi terlebih dahulu.
Di bidang jaringan, parameter seperti net.core.rmem_max, net.core.wmem_max atau net.ipv4.tcp_congestion_control Hal ini secara langsung memengaruhi throughput, latensi, dan perilaku koneksi TCP. Penyesuaian buffer dan algoritma kemacetan yang tepat sangat penting untuk server web dengan lalu lintas tinggi atau instance cloud dengan latensi rendah.
Untuk memori, nilai-nilai seperti vm.swappiness, vm.dirty_ratio, vm.vfs_cache_pressure atau vm.overcommit_memory Pengaturan ini memungkinkan Anda mengontrol seberapa banyak swap yang digunakan, bagaimana cache halaman dikelola, dan perilaku memori virtual. Mengurangi swappiness (misalnya, menjadi 10) biasanya membantu mencegah sistem menggunakan swap terlalu sering, sehingga mengurangi lonjakan latensi I/O disk.
Jika Anda bekerja dengan basis data besar atau aplikasi yang menggunakan sejumlah besar memori bersama, sangat penting untuk melakukan penyesuaian. kernel.shmmax, kernel.shmall dan jumlah maksimum file yang dibuka dengan fs.file-max dan fs.nr_openBatasan yang ukurannya tidak tepat ini dapat menyebabkan hambatan dan kesalahan yang sulit didiagnosis saat beban kerja tinggi.
Pendekatan terbaik adalah menerapkan perubahan kecil, mengukur dampaknya dengan alat pemantauan, dan baru kemudian Simpan pengaturan tersebut di /etc/sysctl.conf atau di /etc/sysctl.d/Dalam lingkungan berbasis kontainer, ingatlah bahwa banyak parameter kernel bersifat global untuk host: mengubahnya secara sembarangan dapat memengaruhi semua layanan, jadi menggabungkan sysctl dengan cgroups dan namespace hampir wajib dilakukan.
Mengkompilasi dan memelihara kernel kustom.
Mengkompilasi kernel kustom tetap menjadi alat yang sangat ampuh ketika Anda menginginkannya. mengurangi latensi, menghilangkan beban kerja yang tidak perlu, atau mendukung perangkat keras yang langka.Meskipun distribusi Linux hadir dengan kernel yang cukup serbaguna, dalam skenario tertentu, kernel spesifik dapat membuat perbedaan yang signifikan.
Alur kerja klasik melibatkan pengunduhan kode dari kernel.org atau pohon yang sudah ditambal seperti xanmod atau licoricedan menggunakan alat-alat seperti make menuconfig untuk memilih opsi. Menyimpan file .config di repositori git Anda sendiri, bersama dengan skrip build, memungkinkan Anda untuk mereproduksi build dan menjaga konsistensi antar versi.
Jika Anda menggunakan Debian atau turunannya, sangat mudah untuk mengkompilasi “Gaya Debian"Untuk mendapatkan paket .deb dari kernel, header, dan pustaka terkait. Ini memungkinkan Anda untuk menyebarkan kernel kustom tersebut pada banyak mesin hanya dengan menginstal paket dan mengelola versi dengan repositori Anda sendiri."
Dalam dunia nyata, kompilasi manual seringkali masuk akal ketika Anda bekerja dengan perangkat keras lama atau sangat terbatasContoh tipikalnya adalah sebuah netbook lama dengan CPU Atom dan RAM 1 GB, di mana kernel generik modern, yang penuh dengan driver dan opsi server yang tidak perlu, menimbulkan latensi dan konsumsi CPU tambahan yang tidak mampu Anda tanggung.
Strategi umum adalah memulai dari konfigurasi kernel saat ini (misalnya, dengan menyalin konfigurasi boot), dan dari situ pangkas atau sesuaikan. Anda dapat mengubah model preemption menjadi “Kernel yang Dapat Diinterupsi (Desktop dengan Latensi Rendah)"untuk memprioritaskan respons desktop interaktif, atau menambahkan penjadwal I/O spesifik seperti Bfq dalam bentuk modul untuk meningkatkan pengalaman pada disk mekanis.
Untuk menghindari menghabiskan separuh hidup Anda untuk kompilasi, ada baiknya melakukan proses build pada mesin yang lebih bertenaga dan, jika perlu, menggunakan kompilasi silang (Sebagai contoh, mengkompilasi kernel 32-bit untuk Atom dari PC x86_64 hanya dengan menyesuaikan ARCH dan toolchain yang sesuai). Kemudian Anda hanya perlu menginstal file .deb pada mesin target dan menambahkan entri yang sesuai ke GRUB.
Bagian yang sulit adalah perawatannya: disarankan menguji kernel baru pada node Kepulauan Canary, memiliki jalur rollback yang jelas di boot manager dan mencatat log serta metrik selama transisi untuk mendeteksi penurunan kinerja atau kompatibilitas driver.
Model preemption dan patch PREEMPT_RT untuk sistem latensi rendah
Model preemption kernel menentukan seberapa banyak tugas yang sedang berjalan dapat diinterupsi untuk memungkinkan tugas dengan prioritas lebih tinggi mengambil alih, yang secara langsung memengaruhi latensi responsIni mencakup opsi konfigurasi standar dan pembaruan secara real-time.
Kernel generik menawarkan beberapa opsi: tanpa preemption (lebih fokus pada throughput server), preemption sukarela, dan kernel yang dapat diinterupsi untuk desktopPengaturan ini memprioritaskan waktu respons cepat dari aplikasi interaktif. Menyesuaikan pengaturan ini dapat secara signifikan meningkatkan kinerja sistem desktop, audio, atau bahkan mesin lama yang memiliki beban kerja berat.
Saat Anda perlu melangkah lebih jauh, berikut ini akan muncul: Patch PREEMPT dan PREEMPT_RTModifikasi ini mengubah sebagian besar kernel untuk meminimalkan bagian yang tidak dapat diinterupsi. PREEMPT_RT ditujukan untuk sistem di mana latensi terburuk (bukan hanya rata-rata) harus sangat rendah dan dapat diprediksi: otomatisasi industri, audio profesional, telekomunikasi, atau perdagangan frekuensi tinggi.
Keputusan untuk memperkenalkan PREEMPT_RT seharusnya tidak didasarkan pada tren, tetapi pada pengukuran spesifik latensi dan jitterPertama, disarankan untuk memanfaatkan sepenuhnya pengaturan penjadwal, afinitas CPU, sysctl, dan, jika berlaku, konfigurasi seperti tickless dinamis sebelum mempersulit pemeliharaan dengan pohon RT.
Kompatibilitas juga perlu dipertimbangkan: beberapa Driver dan subsistem belum sepenuhnya diadaptasi untuk RT. dan mungkin memerlukan versi spesifik atau patch tambahan. Pendekatan yang bijaksana adalah menyiapkan rencana pemeliharaan yang secara jelas menguraikan kapan dan bagaimana mengintegrasikan versi baru kernel utama dengan cabang RT, yang disinkronkan secara berkala tetapi masih agak tertinggal.
penyetelan penjadwalan CPU, operasi tanpa detak, dan isolasi inti.
Selain memilih model preemption, Anda dapat menyempurnakan latensi dengan bermain-main dengan penjadwalan CPU dan perilaku timer kernel, terutama pada distribusi yang berorientasi perusahaan seperti RHEL.
Sebagai contoh, Red Hat Enterprise Linux 8 hadir dengan Kernel berjalan tanpa detak secara default untuk CPU yang sedang idle.Hal ini mengurangi konsumsi energi dengan menghindari gangguan berkala saat inti prosesor tidak aktif. Mode ini dapat diaktifkan untuk beban kerja yang sensitif terhadap latensi. tickless dinamis dalam sekumpulan kernelsehingga hanya satu CPU ("inti utama") yang menangani sebagian besar tugas berbasis waktu, dan sisanya sebisa mungkin terbebas dari interupsi periodik.
Konfigurasi ini dilakukan dengan menambahkan parameter yang sesuai ke baris perintah kernel di GRUBmeregenerasi konfigurasi, dan kemudian menyesuaikan afinitas thread kernel kritis, seperti thread RCU atau thread lainnya. bdi-flush, sehingga mereka berada di inti yang dikhususkan untuk pemeliharaan.
Pendekatan ini dapat dilengkapi dengan parameter isolcpusHal ini memungkinkan inti prosesor diisolasi dari tugas-tugas ruang pengguna normal. Dalam skenario latensi rendah, sangat umum untuk mencadangkan beberapa inti prosesor secara eksklusif untuk aplikasi penting, sementara bagian sistem lainnya (daemon, interupsi, dll.) ditangani oleh inti prosesor lainnya.
Untuk memverifikasi bahwa mode tickless dinamis berfungsi, tes sederhana dapat dijalankan dengan stress atau skrip yang membuat CPU sibuk selama satu detik dan mengamati dengan penghitung detak pengatur waktu Bagaimana jumlah interupsi per detik turun dari ribuan menjadi hanya satu pada inti yang terisolasi, sebuah tanda bahwa pengatur waktu periodik telah hilang.
Manajemen memori dan penyimpanan dengan fokus pada latensi.
Cara kernel mengelola memori dan I/O disk memiliki dampak yang sangat besar pada latensi yang dirasakan oleh aplikasikhususnya pada basis data dan layanan yang melakukan banyak operasi kecil dan sering.
Dari sisi memori, kurangi vm.swappiness meminimalkan penggunaan swap (yang hampir selalu jauh lebih lambat daripada RAM), vm.vfs_cache_pressure Ini mengontrol seberapa cepat sistem mencoba membersihkan cache inode dan dentry, dan vm.nr_halaman_besar Hal ini memungkinkan untuk memesan HugePages statis untuk beban berat seperti basis data atau JVM, sehingga mengurangi overhead TLB.
Dalam penyimpanan, pilih penjadwal I/O yang sesuai dengan jenis disk Ini sangat penting. Pada SSD modern, biasanya ada baiknya menggunakan... none o mq-deadlineSedangkan pada hard disk mekanis dan sistem multitasking, algoritma yang dirancang untuk keadilan mungkin lebih baik, seperti BfqSelain itu, pemasangan sistem file dengan opsi seperti noatime y nodiratime Hindari penulisan yang tidak perlu setiap kali file atau direktori diakses.
Mengenai sistem file, ext4 dan XFS Berikut ini tetap menjadi pilihan yang paling umum: ext4 yang disetel dengan baik adalah pilihan yang aman, sementara XFS cenderung lebih baik dalam hal skalabilitas pada konkurensi tinggi. Untuk skenario yang sangat menuntut, menggabungkan RAID (RAID 10 untuk basis data, RAID 0 untuk penyimpanan sementara) dengan penjadwal yang baik dapat mengurangi latensi rata-rata dan, yang terpenting, variabilitas.
Optimasi jaringan dan kernel untuk latensi rendah di Linux dan EC2
Dalam aplikasi jaringan berkinerja tinggi, latensi tidak hanya bergantung pada perangkat keras atau jarak, tetapi juga pada... bagaimana tumpukan TCP/IP dan kernel itu sendiri dikonfigurasiHal ini terutama terlihat pada instance cloud seperti Amazon EC2 dengan antarmuka ENA.
Pertama-tama, hal terpenting adalah mengurangi faktor eksternal seperti jumlah lompatan jaringan Bahwa paket-paket tersebut berkinerja: menggunakan topologi yang lebih langsung, penyeimbang beban yang dekat dengan backend atau zona ketersediaan yang dioptimalkan mengurangi waktu tempuh dalam hitungan milidetik sebelum bahkan menyentuh sistem operasi.
Di dalam kernel, konfigurasi jaringan melibatkan peningkatan deskriptor file (ulimit -n), ukuran buffer penerima dan pengirim dengan net.core.rmem_max, net.core.wmem_max, net.ipv4.tcp_rmem, net.ipv4.tcp_wmemdan mengaktifkan opsi seperti TCP Buka Cepat untuk mengurangi latensi pembentukan koneksi.
Pada antarmuka AWS ENA, moderasi interupsi memainkan peran penting: secara default, driver mengelompokkan paket untuk mengurangi jumlah IRQ. rx-usecs dan tx-usecsJika Anda ingin mengurangi latensi hingga seminimal mungkin, Anda dapat menonaktifkan moderasi ini dengan ethtool -CMenyetel rx-usecs dan tx-usecs ke nol menurunkan latensi tetapi meningkatkan overhead interupsi, jadi keseimbangan harus ditemukan tergantung pada beban.
Ini juga bisa digunakan irqbalance untuk mendistribusikan IRQ ke beberapa inti prosesor.atau menonaktifkannya dan mengatur afinitas interupsi dan antrian jaringan (RSS/RPS) secara manual ke inti tertentu, sesuatu yang sangat umum di lingkungan latensi sangat rendah atau saat menggunakan DPDK dan melewati sebagian besar tumpukan kernel.
Parameter lain yang perlu dipertimbangkan adalah Status CPU CKondisi tidur nyenyak mengurangi konsumsi daya tetapi menimbulkan penundaan saat inti prosesor "bangun". Untuk mengurangi latensi respons, Anda dapat membatasi kondisi tidur nyenyak ini, dengan menerima konsumsi daya yang lebih tinggi dan ruang gerak yang lebih sedikit untuk Turbo Boost pada inti prosesor lainnya. Setiap lingkungan memiliki titik optimalnya masing-masing antara watt yang dikonsumsi dan mikrodetik yang diperoleh.
Optimasi CPU, layanan, dan aplikasi untuk mengurangi latensi.
Selain kernel itu sendiri, lingkungan sekitarnya juga sangat berpengaruh terhadap latensi keseluruhan: mulai dari layanan aktif dalam sistem hingga ke konfigurasi spesifik dari setiap aplikasi.
Server berkinerja tinggi seharusnya hanya menjalankan setan yang benar-benar diperlukanLayanan seperti Bluetooth, pencetakan, atau penemuan jaringan otomatis (CUPS, Avahi, dll.) pada mesin backend hanya mengonsumsi CPU, memori, dan I/O tanpa memberikan manfaat apa pun. Tinjau dengan systemctl list-unit-files --state=enabled Dan menonaktifkan hal-hal yang tidak perlu adalah salah satu hal termurah dan paling efektif yang dapat Anda lakukan.
Untuk memprioritaskan proses-proses penting, Anda dapat menggunakan alat-alat seperti... renice, chrt dan tasksetMenyesuaikan prioritas suatu proses (renice), memberikannya penjadwalan waktu nyata (chrt -f 99), atau menugaskannya ke inti tertentu (taskset) mengurangi gangguan terhadap tugas lain, meningkatkan prediktabilitas CPU untuk basis data, VoIP, streaming, atau layanan perdagangan.
Pada tingkat aplikasi, penyetelan sama pentingnya dengan penyetelan kernel. Server web seperti... Nginx atau Apache Mereka membutuhkan penyesuaian yang lebih baik pada worker, keepalive, cache, dan kompresi. Basis data seperti PostgreSQL atau MySQL Mereka perlu meninjau ukuran buffer, checkpoint, connection pool, dan parameter penulisan sinkron untuk mencapai latensi yang rendah dan stabil.
JVM juga berperan: memilih pengumpul sampah seperti G1GC atau ZGC Menyesuaikan ukuran heap dapat mengurangi jeda yang, dari perspektif eksternal, tampak sebagai latensi. Dalam lingkungan virtualisasi dan kontainerisasi, distribusi yang tepat sangat penting. Kuota vCPU, vRAM, dan I/O Hal ini menghindari perebutan tersembunyi yang kemudian muncul sebagai antrian tak berujung pada disk atau CPU yang jenuh.
Pemantauan dan pengujian kinerja kernel dan sistem
Semua penyetelan ini tidak ada gunanya jika Anda tidak mengukur dampaknya. Kuncinya adalah menggabungkannya. pemantauan berkelanjutan dengan pengujian kinerja yang dapat direproduksi.sehingga setiap perubahan pada kernel atau sysctl dapat dievaluasi dengan data objektif.
Untuk melihat status sistem secara keseluruhan, Anda dapat menggunakan alat klasik seperti... htop, vmstat, iotop o sarSaat Anda membutuhkan detail lebih lanjut, alat kernel khusus akan berperan, seperti perf dan ftraceyang memungkinkan Anda untuk melacak perilaku penjadwal, interupsi, dan panggilan internal dengan akurasi yang cukup tinggi.
Di lingkungan produksi, disarankan untuk menerapkan sistem metrik seperti Prometheus, collectd atau sysstat dengan eksportir yang menampilkan penghitung CPU, I/O, latensi disk dan jaringan, antrian proses, dll. Data ini, yang divisualisasikan di Grafana atau alat serupa, membantu mendeteksi regresi atau anomali sebelum pengguna akhir menyadari masalah.
Untuk benchmarking, idenya adalah mereplikasi beban kerja aktual dan membandingkan "sebelum dan sesudah" setiap perubahan. Alat-alat seperti sysbench (untuk CPU dan basis data), fio (untuk disk) atau iperf3 (Untuk jaringan) hal ini memungkinkan pembangunan skenario yang dapat diulang. Dokumentasi sangat penting. versi kernel, konfigurasi sysctl, perangkat keras, dan parameter pengujian agar perbandingan tersebut masuk akal dari waktu ke waktu.
Pada praktiknya, optimasi kernel Linux adalah proses iteratif: Anda menguji serangkaian penyesuaian, mengukur hasilnya, mempertahankan apa yang memberikan manfaat nyata, dan membuang sisanya. Dengan tata kelola perubahan yang baik, Anda dapat menerjemahkan peningkatan dalam versi kernel baru (seperti seri terbaru dengan peningkatan penjadwal, grafis, daya, atau jaringan) menjadi manfaat yang terukur untuk aplikasi Anda, baik di server lokal, di cloud, atau di workstation yang membutuhkan kinerja tinggi.
Kombinasi pengetahuan arsitektur kernel, penyempurnaan dengan sysctl, kompilasi terkontrol, penggunaan patch real-time secara selektif, dan sistem metrik yang baik memungkinkan administrator atau tim operasional untuk mencapai tujuan tertentu. Respons lebih cepat, latensi lebih rendah, dan stabilitas keseluruhan yang lebih baik. tanpa harus mengganti perangkat keras meskipun terjadi hal yang tidak diinginkan atau membahayakan keamanan sistem.
Daftar isi
- Arsitektur kernel Linux dan poin-poin penting untuk latensi.
- Penyesuaian melalui sysctl untuk meningkatkan latensi dan kinerja.
- Mengkompilasi dan memelihara kernel kustom.
- Model preemption dan patch PREEMPT_RT untuk sistem latensi rendah
- penyetelan penjadwalan CPU, operasi tanpa detak, dan isolasi inti.
- Manajemen memori dan penyimpanan dengan fokus pada latensi.
- Optimasi jaringan dan kernel untuk latensi rendah di Linux dan EC2
- Optimasi CPU, layanan, dan aplikasi untuk mengurangi latensi.
- Pemantauan dan pengujian kinerja kernel dan sistem