ossfs 1.91 ve sonraki sürümler, 1.88.x sürümüne kıyasla üç performans iyileştirmesi sunar: POSIX işlemi optimizasyonları, dizin okuma (readdir) optimizasyonu ve doğrudan okuma (direct read). Kümenizde Container Storage Interface (CSI) 1.30.1 veya sonraki bir sürüm kullanılıyorsa ilgili özellik kapılarını (feature gates) etkinleştirerek ossfs'i yükseltebilirsiniz.
ossfs özellikleri yalnızca Elastic Compute Service (ECS) düğümlerinde kullanılabilir.
Yükseltme için bkz. ossfs 1.91 veya sonraki bir sürüme geçiş.
1.88.x'ten 1.91'e yapılan değişiklikler
Aşağıdaki bölümlerde ossfs 1.91 ve sonraki sürümlerdeki özellik değişiklikleri açıklanmaktadır. Tam sürüm notları için bkz. ossfs değişiklik günlüğü.
POSIX işlemi düzeltmeleri ve varsayılan parametreler
ossfs 1.91 çeşitli düzeltmeler ve varsayılan değer güncellemeleri içerir:
OSS paketleri artık OSS paketlerinde bulunmayan alt yollara bağlanabilir.
Nesne oluştururken sıfır baytlık dosyalar artık yüklenmez. Çok parçalı yükleme sırasında zaman zaman ortaya çıkan EntityTooSmall hatası giderilmiştir. Ekleme işlemleri iyileştirilmiştir.
Varsayılan parametre değerleri upstream ossfs ve performans karşılaştırma sonuçlarına göre güncellenmiştir.
Aşağıdaki tabloda 1.88.x ile 1.91 arasında değişen varsayılan parametreler gösterilmektedir:
| Parametre | Açıklama | 1.88.x'teki Varsayılan Değer | 1.91+ Sürümündeki Varsayılan Değer |
|---|---|---|---|
stat_cache_expire |
Meta veri önbelleği TTL'si. Birim: saniye. | -1 (süresiz) | 900 |
multipart_threshold |
Çok parçalı yükleme için dosya boyutu eşiği. Birim: MB. | 5 x 1024 | 25 |
max_dirty_data |
Diskte zorunlu flush işlemi için kirli veri boyutu eşiği. Birim: MB. | -1 (asla flush edilmez) | 5120 |
Aşağıdaki parametreler aynı performans seviyesini korumak amacıyla açık kaynaklı ossfs 1.91 sürümünden farklı olarak 1.88.x ile aynı varsayılan değerleri korur:
| Parametre | Açıklama | Açık Kaynaklı 1.91+ Sürümündeki Varsayılan Değer | Alibaba Cloud 1.91+ Sürümündeki Varsayılan Değer |
|---|---|---|---|
multipart_size |
Çok parçalı yükleme için parça boyutu. Birim: MB. | 10 | 30 |
parallel_count |
Eş zamanlı olarak yüklenen parça sayısı. | 5 | 20 |
Bu parametrelerden herhangi birini değiştirmek için PV'nizdeki otherOpts alanını güncelleyin.
Dizin okuma (readdir) optimizasyonu
Bir OSS paketini bağlarken ossfs izinler, değiştirilme zamanı, UID'ler ve GID'ler gibi meta verileri almak için bağlı yoldaki her nesne için HeadObject çağrısı yapar. Çok sayıda nesne içeren yollarda bu HeadObject çağrıları ls ve find gibi dizin tarama işlemlerini önemli ölçüde yavaşlatabilir.
Dizin okuma optimizasyonu özelliği bu HeadObject çağrılarını atlayarak dizin işlemlerindeki gecikme süresini azaltır. Bu özelliği etkinleştirmeden önce aşağıdaki ödünleşimleri göz önünde bulundurun:
chmodvechownkomutları etkisiz hale gelir.Sembolik bağlantılar beklenen şekilde çalışmayabilir. Sabit bağlantılar desteklenmez.
Aşağıdaki tabloda dizin okuma optimizasyonu özelliğine ait parametreler açıklanmaktadır:
| Parametre | Açıklama | Varsayılan |
|---|---|---|
readdir_optimize |
Dizin okuma optimizasyonu özelliğini etkinleştirir. -o readdir_optimize ile etkinleştirin (değer gerekmez). |
Devre dışı |
symlink_in_meta |
Sembolik bağlantıların doğru görüntülenmesi için sembolik bağlantı meta verilerini kaydeder. -o symlink_in_meta ile etkinleştirin (değer gerekmez). |
Devre dışı |
Doğrudan okuma (Direct read)
Doğrudan okuma özelliği büyük dosyalardaki ardışık okuma iş yükleri için tasarlanmıştır. Doğrudan okuma olmadan ossfs dosyaları okumadan önce OSS'den diske indirir; bu nedenle okuma aktarım hızı disk G/Ç ile sınırlıdır. Doğrudan okuma ile ossfs verileri OSS'den doğrudan belleğe önceden getirir (prefetch) ve buradan okur; böylece disk G/Ç darboğazı ortadan kalkar.
Doğrudan okumayı etkinleştirmeden önce aşağıdaki sınırlamaları dikkate alın:
Yalnızca ardışık okumalar için kullanın. Rastgele okumalar ossfs'in önceden getirme penceresini yeniden başlatmasına neden olur ve bu durum aktarım hızını düşürür.
Yazma işlemleri veri tutarlılığını korumak için belleği diske flush eder.
Doğrudan okumayı etkinleştirdikten sonra
use_cacheparametresi etkisiz hale gelir.
Aşağıdaki tabloda doğrudan okuma özelliğine ait parametreler açıklanmaktadır:
| Parametre | Açıklama | Varsayılan |
|---|---|---|
direct_read |
Doğrudan okuma özelliğini etkinleştirir. -o direct_read ile etkinleştirin (değer gerekmez). |
Devre dışı |
direct_read_prefetch_limit |
Tüm ossfs süreçlerinde önceden getirilen veriler için maksimum bellek. Birim: MB. | 1024 (minimum: 128) |
Önceden getirilen veriler direct_read_prefetch_limit sınırına ulaştığında ossfs önceden getirmeyi durdurur ve okuma aktarım hızı ağ G/Ç hızına geri döner. Bellek önceden getirmeyi tamamen devre dışı bırakmak ve doğrudan OSS'den okumak için -o direct_read_prefetch_chunks=0 ayarlayın.
Okuma yapılandırması seçimi
İş yükünüz için doğru yapılandırmayı seçmek üzere aşağıdaki tabloyu kullanın:
| İş Yükü | Önerilen Yapılandırma | Neden |
|---|---|---|
| Büyük dosyalarda tek seferlik ardışık okuma | direct_read özelliğini etkinleştirin (-o direct_read) |
Verileri belleğe önceden getirir, disk G/Ç'yi ortadan kaldırır |
| Aynı düğümden tekrar tekrar okunan küçük veya orta boyutlu dosyalar | Kernel sayfa önbelleğini etkinleştirin (-o kernel_cache) |
Okumalar arasında OS sayfa önbelleğini yeniden kullanır |
| Önbelleğin süreç yeniden başlatmalarında kalıcı olması gereken, tekrar tekrar okunan dosyalar | Disk önbelleğini etkinleştirin (-o use_cache=/path/to/cache) |
Yeniden başlatmalarda kalıcıdır; sayfa önbelleğinden daha büyük kapasite sunar |
| Çok sayıda nesne içeren ve hizmetlerin nesne meta verilerine ihtiyaç duymadığı durumlar | readdir_optimize özelliğini etkinleştirin (-o readdir_optimize) |
Dizin taramasından nesne başına HeadObject çağrılarını kaldırır |
direct_readveuse_cachebirbirini dışlar.direct_readetkinleştirildiğindeuse_cacheetkisiz hale gelir.
En iyi uygulamalar
Okuma/yazma senaryoları
En iyi performans için okuma ve yazma işlemlerini ayrı OSS uç noktalarında ayırın. Bkz. OSS okuma/yazma ayrımı için en iyi uygulamalar.
Ayırma mümkün değilse EntityTooSmall çok parçalı yükleme hatasını gidermek için ossfs 1.91 veya sonraki bir sürüme yükseltin. Veri tutarlılığını sağlamak için otherOpts alanına -o max_stat_cache_size=0 ekleyin.
Salt okunur senaryolar
Bir önbellekleme stratejisi seçmek için aşağıdaki kılavuzu kullanın:
Doğrudan okuma (
-o direct_read): Verilerin tekrar erişilmediği, büyük dosyalarda tek seferlik ardışık okumalar için kullanın. Verileri belleğe önceden getirerek disk G/Ç'yi ortadan kaldırır.Kernel sayfa önbelleği (
-o kernel_cache): Aynı düğümden tekrar tekrar okunan dosyalar için kullanın. Disk yazma ek yükü olmadan okumalar arasında önbelleğe alınan verileri yeniden kullanır.Disk önbelleği (
-o use_cache=/path/to/cache): Önbelleğin süreç yeniden başlatmalarında kalıcı olması gerektiği veya mevcut belleği aşan durumlar için tekrar tekrar okunan dosyalarda kullanın.
Dizin ağırlıklı iş yükleri
OSS paketinde çok sayıda nesne varsa ve hizmetleriniz nesne meta verilerine ihtiyaç duymuyorsa -o readdir_optimize özelliğini etkinleştirin. OSS paketi için sürüm oluşturma etkinleştirilmişse ayrıca -o listobjectsv2 ekleyin.
Performans karşılaştırmaları
Aşağıdaki sonuçlar Sysbench veya özel betikler kullanılarak elde edilmiştir. Sonuçlar kullanılan araca ve ortama göre değişebilir.
Tüm karşılaştırmalar PL0 sistem diskine sahip bir ecs.g7.xlarge düğümü kullanılarak gerçekleştirilmiştir.
Aktarım hızı (dizin okuma optimizasyonu ve doğrudan okuma devre dışı)
Sysbench 128 adet 8 MiB'lik dosya üzerinde ardışık okuma, ardışık yazma, rastgele okuma ve rastgele yazma testleri gerçekleştirir. 1.88.x ile karşılaştırıldığında:
ossfs 1.88.x dosya oluşturma ve ardışık okuma işlemlerinde daha yüksek aktarım hızı sağlar.
ossfs 1.91 ve sonraki sürümler ardışık okuma, rastgele okuma ve rastgele yazma işlemlerinde daha yüksek aktarım hızı sağlar.
Dizin okuma optimizasyonu etkinleştirildikten sonra dizin tarama gecikme süresi
Test 1.000 dosya üzerinde ls ve find komutlarını çalıştırır ve her çalıştırma için gecikme süresini kaydeder. ossfs 1.88.x ve dizin okuma optimizasyonu devre dışı olan ossfs 1.91 ile karşılaştırıldığında:
lsgecikme süresi 1.88.x'e göre %74,8 ve dizin okuma optimizasyonu devre dışı olan 1.91'e göre %74,3 daha düşüktür; bu da sırasıyla 4,0 kat ve 3,9 kat iyileştirme anlamına gelir.findgecikme süresi hem 1.88.x hem de dizin okuma optimizasyonu devre dışı olan 1.91'e göre %58,8 daha düşüktür; her iki durumda da 2,4 kat iyileştirme sağlar.
Doğrudan okuma etkinleştirildikten sonra büyük dosya ardışık okuma gecikme süresi
Test eş zamanlı olarak 10 adet 10 GiB'lik dosyayı okur ve gecikme süresini, peak disk kullanımını ve peak bellek kullanımını kaydeder.
Peak bellek kullanımı önceden getirilen veriler ve diğer doğrudan okuma ek yükleri dahil olmak üzere tüm ossfs süreçlerini kapsar.
1.88.x ve doğrudan okuma özelliği devre dışı olan 1.91 ile karşılaştırıldığında:
Gecikme süresi 1.88.x'e göre %85,3 ve doğrudan okuma özelliği devre dışı olan 1.91'e göre %79 daha düşüktür.
Peak disk kullanımı 0'dır — diske geçici dosya yazılmaz.
Peak bellek kullanımı biraz daha yüksektir; bu durum yukarıdaki sıfır disk kullanımını mümkün kılar.
Kendi karşılaştırmalarınızı çalıştırma
ossfs'i konteynerlerde veya doğrudan ECS örneklerinde karşılaştırabilirsiniz. Aşağıdaki adımlar konteynerleştirilmiş bir Sysbench ortamı kullanır.
Ön koşullar
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
Bir OSS paketi ve kalıcı birim talebi (PVC). Kurulum için bkz. Statik olarak sağlanan bir OSS birimini bağlama
Sonraki adımlar
Sysbench tarafından sağlanan MySQL karşılaştırma aracını kullanarak ossfs'in çeşitli sürümlerini karşılaştırabilirsiniz.
Bağlama yolunda
lsvefindkomutlarını çalıştırarak dizin okuma optimizasyonunu test edin.PV'nizin
otherOptsalanına-o direct_readekleyerek ve eş zamanlı ardışık okumalar çalıştırarak doğrudan okumayı test edin.