Implementasi io_uring Zig Mencapai Performa Mendekati FIO Namun Mengungkap Keterbatasan Benchmark

Tim Komunitas BigGo
Implementasi io_uring Zig Mencapai Performa Mendekati FIO Namun Mengungkap Keterbatasan Benchmark

Sebuah analisis performa terbaru yang membandingkan implementasi io_uring Zig dengan alat benchmark standar industri FIO telah memicu diskusi menarik tentang optimisasi file I/O dan metodologi benchmark. Studi tersebut mencapai hasil yang mengesankan, dengan Zig mencapai kecepatan tulis 3,8 GB/s dan baca 7,0 GB/s dibandingkan dengan FIO yang mencapai 4,1 GB/s dan 7,3 GB/s.

Perbandingan Performa

Tool Kecepatan Tulis Kecepatan Baca Operasi I/O per detik
FIO 4.083 GB/s 7.33 GB/s ~14,000
Zig 3.802 GB/s 6.996 GB/s ~14,000
Persilangan metrik performa, yang direpresentasikan oleh bentuk geometris 'X' yang berani, melambangkan sifat kompetitif dari kecepatan file I/O
Persilangan metrik performa, yang direpresentasikan oleh bentuk geometris 'X' yang berani, melambangkan sifat kompetitif dari kecepatan file I/O

Angka Performa Menyembunyikan Kesederhanaan yang Mendasari

Meskipun angka-angka utama terlihat mengesankan, analisis komunitas mengungkapkan bahwa kondisi benchmark membuat pencapaian ini kurang luar biasa dari yang terlihat pada awalnya. Throughput 7 GB/s pada ukuran blok 512 KB diterjemahkan menjadi hanya sekitar 14.000 operasi per detik, yang mewakili sekitar 70 mikrodetik per operasi I/O. Ini sebenarnya adalah beban kerja yang relatif sederhana yang dapat ditangani secara efektif bahkan dengan pendekatan I/O sinkron dasar.

Diskusi tersebut menyoroti bahwa benchmark sebelumnya dari penulis yang sama menunjukkan tingkat operasi yang jauh lebih tinggi sekitar 240.000 operasi I/O per detik, menunjukkan bahwa skenario pengujian khusus ini tidak sepenuhnya menekan kemampuan penyimpanan NVMe modern.

Konfigurasi Pengujian

  • Perangkat Keras: CPU Ryzen EPYC 32-core, RAM 756 GB, SSD NVMe Datacenter
  • Sistem Operasi: Ubuntu 24.04 dengan kernel 6.14
  • Ukuran Blok: 512 KB
  • Kedalaman Antrian: 64
  • Ukuran File: 16 GB
  • Pengaturan Khusus: nvme.poll_queues=16, direct I/O diaktifkan

Pilihan Implementasi Teknis Mendapat Sorotan

Implementasi Zig menggabungkan beberapa fitur io_uring canggih termasuk polled I/O, registered buffers, dan kernel-side busy polling (SQTHREAD_POLL). Namun, anggota komunitas telah mengidentifikasi area potensial untuk perbaikan. Satu pengamatan penting menyangkut konstanta alignment 512-byte yang dikodekan keras, ketika banyak drive NVMe modern dapat diformat ulang untuk menggunakan ukuran blok logis 4096-byte untuk performa yang lebih baik.

Kompleksitas ukuran blok penyimpanan menambahkan lapisan lain pada tantangan optimisasi. Drive NVMe modern sebenarnya beroperasi dengan beberapa ukuran blok - ukuran LBA untuk transfer OS, ukuran halaman NAND yang mendasari untuk operasi baca/tulis, dan ukuran blok penghapusan untuk wear leveling. Memahami granularitas yang berbeda ini sangat penting untuk tuning performa yang optimal.

Jenis Ukuran Blok NVMe

  • Ukuran LBA: 512B atau 4KB (dapat dikonfigurasi untuk transfer OS)
  • Ukuran Halaman NAND: ~16KB+ (granularitas baca/tulis)
  • Ukuran Blok Penghapusan: Beberapa MB (pemerataan keausan)
  • Granularitas FTL: Biasanya 4KB (operasi tulis atomik)

Peluang Optimisasi yang Terlewat

Umpan balik komunitas menyarankan beberapa perbaikan potensial untuk implementasi. Tidak adanya registered file descriptors, yang dapat memberikan manfaat performa signifikan dengan io_uring, dicatat sebagai kemungkinan kelalaian. Selain itu, muncul pertanyaan tentang strategi alokasi memori, dengan saran untuk menggunakan page allocators untuk memori yang disejajarkan daripada pendekatan over-allocation.

Sebenarnya ukuran blok hardware yang penting dalam kasus ini (direct I/O). Nilai tersebut adalah properti dari hardware dan tidak dapat diubah.

Sifat spesifik versi dari API I/O Zig yang berkembang pesat juga menarik perhatian, dengan anggota komunitas menekankan pentingnya mendokumentasikan dengan jelas versi Zig mana yang digunakan untuk reproduktibilitas.

Kesimpulan

Meskipun implementasi Zig berhasil menunjukkan performa yang kompetitif dengan alat-alat mapan seperti FIO, diskusi komunitas mengungkapkan bahwa baik skenario benchmark maupun implementasi memiliki ruang untuk optimisasi. Tingkat operasi I/O yang relatif rendah menunjukkan bahwa beban kerja yang lebih menuntut akan memberikan wawasan yang lebih baik tentang karakteristik performa sebenarnya dari pendekatan yang berbeda. Bagi pengembang yang bekerja pada aplikasi I/O berkinerja tinggi, memahami nuansa karakteristik hardware penyimpanan dan fitur io_uring tetap penting untuk mencapai hasil yang optimal.

Referensi: Hitting Peak File IO Performance with Zig