Skip to main content
  • Place orders quickly and easily
  • View orders and track your shipping status
  • Enjoy members-only rewards and discounts
  • Create and access a list of your products

Linux'ta sabit sürücü hızını iyileştirmenin 5 yolu (İngilizce)

Summary: Burada Linux'ta sabit disk performansını artırmanın 5 yolunu bulacaksınız.

This article applies to   This article does not apply to 

Symptoms

Linux'ta sabit sürücü hızını iyileştirmenin 5 yolu (İngilizce) 

Cause

-

Resolution

  1. Bir kez okuma" Verileri için PAGE-CACHE'i atlayın.
  2. Büyük Dosyalar için PAGE-CACHE'i Atlayın.
  3. IF (CPU-BOUND) THEN SCHEDULER == NO-OP;
  4. Blok Boyutu: Daha büyük daha iyidir
  5. SYNC - ASYNC (& READ - WRITE)

 

1. Bir kez okuma" Verileri için PAGE-CACHE'i atlayın.

Başa Dön

Sayfa önbelleği, en son erişilen sayfaları sabit sürücüden önbelleğe alır, böylece aynı verilere sonraki erişimler için arama sürelerini azaltır. Sayfa önbelleği, sabit sürücüden bir sayfaya ilk kez erişildiğinde performansı artırmaz. Bu nedenle, bir uygulama bir dosyayı bir kez ve yalnızca bir kez okuyacaksa, sayfa önbelleğini atlamak daha iyi bir yoldur. Bu, O_DIRECT bayrağını kullanarak mümkündür. Bu, çekirdeğin sayfa önbelleği için bu belirli verileri dikkate almadığı anlamına gelir. Önbellek çekişmesini azaltmak, diğer sayfaların (tekrar tekrar erişilen) sayfa önbelleğinde tutulma şansının daha yüksek olduğu anlamına gelir. Bu, önbellek isabet oranını iyileştirerek daha iyi performans sağlar.

void ioReadOnceFile()
{
/* direct_fd ve direct_f kullanmak çekirdek sayfa önbelleğini atlar.
* - direct_fd, düşük seviyeli bir dosya tanımlayıcısıdır
* - direct_f, fopen()
tarafından döndürülene benzer bir dosya akışıdır* NOT: Optimum boyuttaki arabellekleri belirlemek için getpagesize() öğesini kullanın.
*/

int direct_fd = open("dosyaadı", O_DIRECT | O_RDWR);
DOSYA *direct_f = fdopen(direct_fd, "w+");

/* doğrudan disk-I/O BURADA yapılır*/

fclose(f);
kapat(fd);
}


2. Büyük Dosyalar için PAGE-CACHE'i Atlayın.

Başa Dön

Çok sayıda sayfadan oluşan büyük bir dosyada (yani bir veritabanında) bir okuma durumunu düşünün. Erişilen sonraki her sayfa, yalnızca daha fazla sayfa okundukça daha sonra bırakılmak üzere sayfa önbelleğine gider. Bu, önbellek isabet oranını ciddi şekilde azaltır. Bu durumda, sayfa önbelleği herhangi bir performans kazancı sağlamaz. Bu nedenle, büyük dosyalara erişirken sayfa önbelleğini atlamak daha iyi olacaktır.

void ioLargeFile()
{
/* direct_fd ve direct_f kullanmak çekirdek sayfa önbelleğini atlar.
* - direct_fd, düşük seviyeli bir dosya tanımlayıcısıdır
* - direct_f, fopen()
tarafından döndürülene benzer bir dosya akışıdır* NOT: Optimum boyuttaki arabellekleri belirlemek için getpagesize() öğesini kullanın.
*/

int direct_fd = open("largefile.bin", O_DIRECT | O_RDWR | O_LARGEFILE);
DOSYA *direct_f = fdopen(direct_fd, "w+");

/* doğrudan disk-I/O BURADA yapılır*/

fclose(f);
kapat(fd);
}

3. IF (CPU-BOUND) THEN SCHEDULER == NO-OP;

Başa Dön

G/Ç zamanlayıcısı, sabit sürücüde kuyruğa alınacak G/Ç işlemlerinin sırasını optimize eder. Arama zamanı bir sabit sürücüdeki en ağır ceza olduğundan, çoğu G/Ç zamanlayıcısı arama süresini en aza indirmeye çalışır. Bu, asansör algoritmasının bir çeşidi olarak uygulanır, yani çok sayıda işlemden rastgele sıralanan istekleri, verilerin sabit sürücüde bulunduğu sıraya göre yeniden sıralamak, önemli miktarda CPU zamanı gerektirir.

Karmaşık işlemleri içeren belirli görevler, CPU'nun büyük miktarda veriyi ne kadar hızlı işleyebildiğine göre sınırlı olma eğilimindedir. Arka planda çalışan karmaşık bir G/Ç zamanlayıcı, değerli CPU döngülerini tüketerek sistem performansını düşürebilir. Bu durumda, no-op gibi daha basit bir algoritmaya geçmek CPU yükünü azaltır ve sistem performansını artırabilir.
echo noop > /sys/block//queue/scheduler

 


4. Blok Boyutu: Daha büyük daha iyidir

Başa Dön

Bu sonunda işi halledecek olsa da, kesinlikle en uygun yol değil. Çekirdek açısından bakıldığında, G/Ç istekleri için en uygun boyut dosya sistemi blok boyutudur (yani sayfa boyutu). Dosya sistemindeki (ve çekirdek sayfa önbelleğindeki) tüm G/Ç'ler sayfalar açısından olduğundan, uygulamanın sayfa boyutunun katlarında da aktarım yapması mantıklıdır. Ayrıca, artık sabit disklere giren çok bölümlü önbelleklerle, blok boyutunun katları halinde G/Ç yapmak büyük fayda sağlayacaktır.


Optimum blok boyutu
istatistiğini belirlemek için şu komut kullanılabilir:--printf="bs=%s optimal-bs=%S\n" --file-system /dev/


5. SYNC - ASYNC (& READ - WRITE)

Başa Dön

Bir uygulama bir SYNC G/Ç okuması başlattığında, çekirdek veriler için bir okuma işlemini kuyruğa alır ve yalnızca istenen veri bloğunun tamamı geri okunduktan sonra geri döner. Bu süre boyunca Çekirdek, uygulamanın işlemini G/Ç için engellenmiş olarak işaretler. Diğer işlemler CPU'yu kullanabilir ve bu da sistem için genel olarak daha iyi bir performans sağlar.

Bir uygulama bir SYNC G/Ç yazma işlemi başlattığında, çekirdek veriler için bir yazma işlemini kuyruğa alır ve uygulamanın işlemini engellenmiş bir G/Ç'ye koyar. Ne yazık ki bu, geçerli uygulamanın işleminin engellendiği ve bu yazma işlemi tamamlanana kadar başka bir işlem (veya bu konuda G/Ç) yapamayacağı anlamına gelir.

Bir uygulama bir ASYNC G/Ç okuması başlattığında, read() işlevi genellikle büyük veri bloğunun bir alt kümesini okuduktan sonra döner. Uygulamanın, gerekli verilerin tamamı okunana kadar okunacak veri boyutuyla tekrar tekrar read() öğesini çağırması gerekir. Her ek okuma çağrısı, kullanıcı alanı ve çekirdek arasında bir bağlam geçişi getirdiği için bir miktar ek yük getirir. read() öğesini tekrar tekrar çağırmak için sıkı bir döngü uygulamak, diğer işlemlerin kullanabileceği CPU döngülerini boşa harcar. Bu nedenle, bir sonraki read() sıfır olmayan bayt okumayı döndürene kadar genellikle select() kullanılarak engelleme uygulanır. yani ASYNC, tıpkı SYNC okumasının yaptığı gibi engellemek için yapılır.

Bir uygulama zaman uyumsuz G/Ç yazma işlemi başlattığında, çekirdek sayfa önbelleğindeki ilgili sayfaları güncelleştirir ve bunları kirli olarak işaretler. Ardından denetim hızlı bir şekilde uygulamaya geri döner ve çalışmaya devam edebilir. Veriler daha sonra daha uygun bir zamanda (düşük CPU yükü) daha uygun bir şekilde (sıralı olarak demetlenmiş yazmalar) sabit sürücüye aktarılır.

Bu nedenle, SYNC okumaları ve ASENKRON yazmaları , çekirdeğin temel G/Ç isteklerinin sırasını ve zamanlamasını optimize etmesine izin verdikleri için genellikle iyi bir yoldur.

 

 

 

 

 

 

 

 

 

 

Affected Products

Red Hat Enterprise Linux Version 5, Red Hat Enterprise Linux Version 6, Red Hat Enterprise Linux Version 7, Red Hat Enterprise Linux Version 9, Red Hat Enterprise Linux Version 8
Article Properties
Article Number: 000140396
Article Type: Solution
Last Modified: 16 Aug 2024
Version:  4
Find answers to your questions from other Dell users
Support Services
Check if your device is covered by Support Services.