Ana içeriğe geç
Bulut & Altyapı

Turso testleri O_DIRECT ve io_uring performansında önceden okumanın önemini gösterdi

Öne çıkanlar

  • Önceden okuma etkinleştirildiğinde I/O isteklerinin yüzde 90'ından fazlası birleştirilerek donanım istek sayısı 16 bine düştü.
  • O_DIRECT kullanımı CPU veri kopyalamasını atlasa da sorgu sırasında önbellek ıskalama oranını iki katına çıkardı.
  • Tek çekirdekli ortamlarda io_uring yoklama iş parçacığı çalıştırmak işlemciyi paylaşarak verimi düşürüyor.

Veritabanı motoru Turso üzerinde yapılan teknik performans incelemesi, doğrudan G/Ç (O_DIRECT) ve io_uring mimarisinde uygulama düzeyinde önceden okuma (readahead) mekanizmasının etkilerini ortaya koydu. Linux çekirdeğinin sunduğu otomatik önbellekleme O_DIRECT bayrağı ile devre dışı kaldığında, veritabanı sıralı okumalarda her seferinde tek bir istek göndererek eşzamanlılığı kaybediyor.

TPC-H karşılaştırma testleri altında yapılan ölçümler, 32 sayfalık bir önceden okuma penceresi eklendiğinde kuyruktaki isteklerin çekirdek düzeyinde birleştirildiğini gösterdi. Önceden okuma kapalıyken sürücüye yaklaşık 196 bin ayrı istek iletilirken, pencere açıldığında isteklerin yüzde 90'dan fazlası birleştirilerek donanıma ulaşan istek sayısı yaklaşık 16 bine kadar geriledi. Bu durum, toplamda fazladan veri okunmasına rağmen genel G/Ç verimliliğini artırdı.

Çalışmada ayrıca yoklama iş parçacığı (sqpoll) ve standart sistem çağrısı (syscall) mimarileri de kıyaslandı. Standart sistem çağrısının sayfa önbelleği kopyalaması sayesinde L1/L2/L3 işlemci önbelleklerini sıcak tuttuğu, O_DIRECT kullanan io_uring modelinin ise CPU kopyasını atlasa da sorgu işlenirken iki kat daha fazla önbellek ıskalaması (cache miss) ürettiği tespit edildi. Çok çekirdekli sistemlerde sqpoll maliyetinin karşılanabildiği, ancak tek çekirdekte paylaşılan işlem gücünün performansı sınırladığı kaydedildi.

Kaynak

Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.