Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bu makalede, çok sayıda dosya içeren dizinlerle çalışmaya yönelik öneriler sağlanır. Dosyaları birden çok dizine yayarak tek bir dizindeki dosya sayısını azaltmak genellikle iyi bir uygulamadır. Ancak, büyük dizinlerin önlenemeyecekleri durumlar vardır. Linux istemcilerine bağlanan Azure dosya paylaşımlarında büyük dizinlerle çalışırken aşağıdaki önerileri göz önünde bulundurun.
Şunlara uygulanır
| Yönetim modeli | Faturalama modeli | Medya katmanı | Yedeklilik | KOBİ | Ağ Dosya Sistemi (NFS) |
|---|---|---|---|---|---|
| Microsoft.Storage | Sağlanan versiyon 2 | SSD (üst düzey) | Yerel (LRS) |
|
|
| Microsoft.Storage | Sağlanan versiyon 2 | SSD (üst düzey) | Bölge (ZRS) |
|
|
| Microsoft.Storage | Sağlanan versiyon 2 | HDD (standart) | Yerel (LRS) |
|
|
| Microsoft.Storage | Sağlanan versiyon 2 | HDD (standart) | Bölge (ZRS) |
|
|
| Microsoft.Storage | Sağlanan versiyon 2 | HDD (standart) | Coğrafi (GRS) |
|
|
| Microsoft.Storage | Sağlanan versiyon 2 | HDD (standart) | GeoZone (GZRS) |
|
|
| Microsoft.Storage | Tahsis edilen v1 | SSD (üst düzey) | Yerel (LRS) |
|
|
| Microsoft.Storage | Tahsis edilen v1 | SSD (üst düzey) | Bölge (ZRS) |
|
|
| Microsoft.Storage | Kullandıkça ödeme yap | HDD (standart) | Yerel (LRS) |
|
|
| Microsoft.Storage | Kullandıkça ödeme yap | HDD (standart) | Bölge (ZRS) |
|
|
| Microsoft.Storage | Kullandıkça ödeme yap | HDD (standart) | Coğrafi (GRS) |
|
|
| Microsoft.Storage | Kullandıkça ödeme yap | HDD (standart) | GeoZone (GZRS) |
|
|
Karma kova sayısını artırın
Numaralandırmayı yapan sistemde bulunan toplam RAM miktarı, NFS ve SMB gibi dosya sistemi protokollerinin iç çalışmasını etkiler. Kullanıcılar yüksek bellek kullanımıyla karşılaşmasa bile, kullanılabilir bellek miktarı sistemin sahip olduğu inode karma demetlerinin sayısını etkiler ve bu da büyük dizinler için numaralandırma performansını etkiler/geliştirir. Büyük numaralandırma iş yükleri sırasında oluşabilecek karma çakışmaları azaltmak için sistemin sahip olduğu inode karma demetlerinin sayısını değiştirebilirsiniz.
Inode hash kovalarının sayısını artırmak için önyükleme ayarlarınızı değiştirin:
Metin düzenleyicisi kullanarak dosyayı düzenleyin
/etc/default/grub.sudo vim /etc/default/grubAşağıdakileri metni
/etc/default/grubdosyasına ekleyin. Bu komut, inode karma tablo boyutu olarak 128 MB ayarlar ve sistem bellek tüketimini en fazla 128 MB artırır.GRUB_CMDLINE_LINUX="ihash_entries=16777216"Zaten
GRUB_CMDLINE_LINUXvarsa, şunun gibi bir boşlukla ayırarak ekleyinihash_entries=16777216:GRUB_CMDLINE_LINUX="<previous commands> ihash_entries=16777216"Değişiklikleri uygulamak için şunu çalıştırın:
sudo update-grub2Sistemi yeniden başlatın:
sudo rebootDeğişikliklerin yeniden başlatmadan sonra etkili olduğunu doğrulamak için çekirdek cmdline komutlarını denetleyin:
cat /proc/cmdlineihash_entriesgörünür durumdaysa, sistem ayarı uygulamıştır ve numaralandırma performansı üstel olarak artırılmalıdır.Ayrıca, çekirdek cmdline'sının uygulanılıp uygulanmadığını görmek için dmesg çıkışını de de kontrol edebilirsiniz:
dmesg | grep "Inode-cache hash table" Inode-cache hash table entries: 16777216 (order: 15, 134217728 bytes, linear)
Önerilen bağlama seçenekleri
Aşağıdaki bağlama seçenekleri numaralandırmaya özeldir ve büyük dizinlerle çalışırken gecikme süresini azaltabilir.
actimeo
Bağlama actimeo seçeneği, istemcinin bir sunucudan öznitelik bilgilerini istemeden önce dosyanın veya dizinin özniteliklerini önbelleğe alma süresini (saniye olarak) belirtir. Bu süre boyunca, istemci sunucuyu yeniden denetleyene kadar sunucuda gerçekleşen değişiklikler algılanmadan kalır. SMB istemcileri için varsayılan öznitelik önbelleği zaman aşımı 1 saniye olarak ayarlanır.
NFS istemcilerinde, belirterek actimeo tüm acregmin, acregmax, acdirminve acdirmax değerlerini aynı değere ayarlar. Belirtilmezse actimeo , istemci bu seçeneklerin her biri için varsayılan değerleri kullanır.
Büyük dizinlerle çalışırken 30 ile 60 saniye arasında bir ayar actimeo yapmanızı öneririz. Bu aralıktaki bir değerin ayarlanması, özniteliklerin istemcinin öznitelik önbelleğinde daha uzun bir süre boyunca geçerli kalmasını sağlayarak işlemlerin dosya özniteliklerini kablo üzerinden getirmek yerine önbellekten almasına olanak sağlar. Bu, işlem çalışmaya devam ederken önbelleğe alınan özniteliklerin süresinin dolacağı durumlarda gecikme süresini azaltabilir.
Aşağıdaki grafik, varsayılan bağlama karşılık bir iş yükü için 1 milyon dosyanın bulunduğu tek bir dizinde actimeo değerinin 30 olarak ayarlandığı duruma kıyasla farklı işlemleri tamamlamak için gereken toplam süreyi karşılaştırır. Testlerimizde, toplam tamamlanma süresi bazı operasyonlar için %77'ye kadar azaltıldı. Tüm işlemler alias kullanılmadan ls ile yapıldı.
NFS nconnect
NFS nconnect, istemci ile NFS dosya paylaşımınız arasında birden çok TCP bağlantısı kullanmanıza olanak tanıyan bir NFS dosya paylaşımları için istemci tarafı bağlama seçeneğidir. Gecikme süresini azaltmak ve performansı geliştirmek için en uygun ayarını nconnect=4 öneririz. Nconnect özelliği, birden çok iş parçacığından zaman uyumsuz veya zaman uyumlu G/Ç kullanan iş yükleri için özellikle yararlı olabilir.
Daha fazla bilgi edinin.
Komutlar ve işlemler
Komutların ve işlemlerin belirtilme şekli performansı da etkileyebilir. komutunu kullanarak ls büyük bir dizindeki tüm dosyaları listelemek iyi bir örnektir.
Not Düşün
Özyinelemeli ls, finddu ve gibi bazı işlemler hem dosya adlarına hem de dosya özniteliklerine ihtiyaç duyar, bu nedenle dizin numaralandırmalarını (girdileri almak için) her girdide bir istatistikle birleştirir (öznitelikleri almak için). Bu tür komutları çalıştırma olasılığınız olan bağlama noktalarında actimeo için daha yüksek bir değer kullanmanızı öneririz.
Unaliased ls kullan
Bazı Linux dağıtımlarında, kabuk komutu lsiçin ls --color=auto gibi varsayılan seçenekleri otomatik olarak ayarlar. Bu, ls'nin ağ üzerinden çalışma biçimini değiştirir ve ls'in yürütülmesine daha fazla işlem ekler. Performans düşüşü önlemek için, unaliased ls kullanmanızı öneririz. Bunu üç yoldan birini yapabilirsiniz:
Geçerli oturumu yalnızca etkileyen geçici bir çözüm olarak,
unalias lskomutunu kullanarak diğer adı kaldırabilirsiniz.Kalıcı bir değişiklik için, kullanıcının
lsdosyasındakibashrc/bash_aliasestakma adını düzenleyebilirsiniz. Ubuntu'da~/.bashrcdosyasını düzenleyereklsiçin oluşturulmuş olan takma adı kaldırın.lsçağırmak yerine, doğrudanlsikili dosyasını çağırabilirsiniz, örneğin/usr/bin/ls. Bu, takma adında olabilecek herhangi bir seçenek olmadanlskullanmanıza olanak tanır. komutunuwhich lsçalıştırarak ikili dosyasının konumunu bulabilirsiniz.
ls çıktısının sıralanmasını önlemek
ls diğer komutlarla birlikte kullanıldığında, dosyaları döndürdüğü sırayı önemsemediğiniz durumlarda, çıktısını sıralamasını engelleyerek ls performansını geliştirebilirsiniz. Çıkışı sıralamak önemli ek yük getirir.
Toplam dosya sayısını almak için ls -l | wc -l komutunu çalıştırmak yerine, -f ve -U seçeneklerini ls ile kullanarak çıkışın sıralanmasını engelleyebilirsiniz.
-f gizli dosyaları gösterirken, -U göstermez.
Örneğin, Ubuntu'da ls ikili dosyasını doğrudan çağırıyorsanız, /usr/bin/ls -1f | wc -l komutunu veya /usr/bin/ls -1U | wc -l komutunu çalıştırabilirsiniz.
Aşağıdaki grafik, sıralanmamış ls ile sıralanmış ls kullanarak sonuçların çıkış süresini karşılaştırır.
Dosya kopyalama ve yedekleme işlemleri
Bir dosya paylaşımından veri kopyalarken veya dosya paylaşımlarından başka bir konuma yedeklerken, en iyi performans için etkin G/Ç ile canlı dosya paylaşımı yerine kaynak olarak bir paylaşım anlık görüntüsü kullanmanızı öneririz. Yedekleme uygulamaları komutları doğrudan anlık görüntüde çalıştırmalıdır. Daha fazla bilgi için Azure Dosyalar ile anlık görüntüleri paylaşma başlıklı makaleye bakın.
Uygulama düzeyi önerileri
Büyük dizinler kullanan uygulamalar geliştirirken bu önerileri izleyin.
Dosya özniteliklerini atlayın. Uygulamanın dosya türü veya son değiştirme zamanı gibi dosya özniteliklerine değil yalnızca dosya adına ihtiyacı varsa, belirtildiği dizindeki girdileri dosya türü olmadan almak için iyi bir arabellek boyutu kullanarak,
getdents64gibi sistem çağrılarına birden çok kez başvurabilirsiniz. Gereksiz ek işlemlerden kaçınarak bu işlemi hızlandırabilirsiniz.Stat çağrılarını birbirine karıştır. Uygulamanın niteliklere ve dosya adına ihtiyacı varsa, stat çağrılarını
getdents64ile birleştirmenizi öneririz. Bu,getdents64ile dosyanın sonuna kadar tüm girişleri almak ve sonra döndürülen tüm girdilerde bir statx işlemi yapmaktan daha verimlidir. durum çağrılarının araya eklenmesi, istemciye hem dosyayı hem de özniteliklerini aynı anda istemesini ve sunucuya yapılan çağrıların sayısını azaltmasını sağlar. Yüksekactimeobir değerle birleştirildiğinde, araya ekleme durum çağrıları performansı önemli ölçüde artırabilir. Örneğin,[ getdents64, getdents64, ... , getdents64, statx (entry1), ... , statx(n) ]yerine, statx çağrılarını hergetdents64'den sonra şu şekilde yerleştirin:[ getdents64, (statx, statx, ... , statx), getdents64, (statx, statx, ... , statx), ... ].G/Ç derinliğini artırın. Mümkünse,
nconnect'yi sıfır olmayan bir değere (1'den büyük) yapılandırmanızı ve işlemi birden çok iş parçacığı arasında dağıtmanızı ya da zaman uyumsuz G/Ç kullanmanızı öneririz. Bu, dosya paylaşımına birden çok eş zamanlı bağlantıdan yararlanmayı sağlayarak eş zamansız olabilecek işlemleri mümkün kılar.Zorunlu önbellek. Uygulama, yalnızca tek bir istemcinin bağladığı bir dosya paylaşımındaki dosya özniteliklerini sorguluyorsa,
AT_STATX_DONT_SYNCbayrağıyla statx sistem çağrısını kullanın. Bu bayrak, önbelleğe alınan özniteliklerin sunucuyla eşitlenmeden önbellekten alınmasını sağlar ve en son verileri almak için ek ağ gidiş dönüşlerinden kaçınır.