Grep, aramaları hızlandırmak için bir önbellek kullanıyor mu?


35

grepAynı sorguda (ve ayrıca farklı bir sorguda, ancak aynı dosyada) sonraki çalıştırma işlemlerinin ilk çalıştırmadan çok daha hızlı olduğunu fark ettim (etki büyük bir dosyada arama yaparken kolayca fark edilir).

Bu, grep'in arama için kullanılan yapıların önbelleğe alınmasını kullandığını, ancak İnternette bir referans bulamadığımı gösteriyor.

grepSonraki mekanizmalarda sonuçları daha hızlı döndürmek için hangi mekanizma kullanılabilir ?

Yanıtlar:


59

Bu şekilde grep değil, ancak dosya sisteminin kendisi sık sık son zamanlarda okunan verileri önbelleğe alır, grep disk yerine bellekte etkin bir şekilde arama yaptığı için daha sonraki işlemlerin daha hızlı çalışmasına neden olur.


2
Aynı fikirdeyim Bir dosyayı ilk kez açarken, dosya sistemi kodu dosyayı diskten önbelleğe yükler; kısa bir süre sonra tekrar okuduğunuzda, önbellekten süresi dolmak için henüz zamanı gelmedi. Dosya sistemi önbelleğini el ile temizlemenin bir yolu olup olmadığını görün, ardından öncesi ve sonrası karşılaştırın.
Shadur

3
@Shadur - bir yolu var. Bkz. Unix.stackexchange.com/questions/8398/…
mattdm

3
Pratik bir fark yoktur, ancak dosya sistemi değil, bir çekirdek önbelleğidir.
40'ta pboin

@pboin Tamam, küçük bir kısayol yaptım. Elbette, çekirdeği kendi içinde dosya sistemini değil (diskte) önbelleğe alan dosya sistemini kullanan kısımdır. Soylu ama gerçek. :)
PaulRein

19

Linux ve * NIX sistemleri, dosya sistemleri (VFS aracılığıyla özetlenen) ile kullanıcı düzeyinde işlemler arasında oturan çeşitli önbelleklerden yararlanır. Yani grep değil ve önbelleğe alma işlemini yapan dosya sistemi değil - işletim sistemi.

Grep performansınızdan sorumlu olan önbellek VFS Buffer Cache'dir. Diğer önbellekler inode ve dizinler içindir, ancak bunlar burada devreye girmez.

Daha fazla bilgi için bakınız: Linux Belgelendirme Projesi: 9.2 Sanal Dosya Sistemi http://tldp.org/LDP/tlk/fs/filesystem.html


5
Özyinelemeli bir grep yapıyorsanız, inode ve dentry önbellekleri gözle görülür bir fark yaratır. Bir testte /usr/includetüm önbelleklerin düşmesiyle sistemimde ~ 16.4 saniye süren bir boşluk oldu . Her şey önbelleğe alınmışken, yaklaşık 0,3 saniye. Sadece sayfa önbelleğini bırakırsam (arabellek önbelleğini tutar), ~ 14.3 saniye sürer. Sayfa önbelleğini terk edip dentry / inode önbelleklerini bırakırsam, yaklaşık 12 saniyedir.
mattdm

@ mattdm, bu ilginç. Önbellekleri nasıl düşürdün?
JRW


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.