Tmpfs ve shm arasında fark yoktur. tmpfs shm'in yeni adıdır. shm, SHaredMemory anlamına gelir.
Bakınız: Linux tmpfs .
Tmpfs'nin bugün bile kullanılmasının ana nedeni, gentoo kutumdaki / etc / fstab dosyamdaki bu yorumun olmasıdır. BTW Chromium, hat eksikken oluşmayacak:
# glibc 2.2 and above expects tmpfs to be mounted at /dev/shm for
# POSIX shared memory (shm_open, shm_unlink).
shm /dev/shm tmpfs nodev,nosuid,noexec 0 0
çıktı hangi linux çekirdek belgelerinde
Alıntı yapmak:
tmpfs aşağıdaki kullanımlara sahiptir:
1) Her zaman hiç görmeyeceğiniz bir çekirdek iç yuvası vardır
. Paylaşılan anonim eşlemeler ve SYSV paylaşılan
hafızası için kullanılır.
Bu bağlama CONFIG_TMPFS'ye bağlı değildir. CONFIG_TMPFS ayarlanmamışsa, tmpfs'nin kullanıcı tarafından görülebilir kısmı oluşturulmaz. Ancak iç
mekanizmalar daima mevcuttur.
2) glibc 2.2 ve üstü
, tmpfs'nin POSIX paylaşılan hafızası (shm_open, shm_unlink) için / dev / shm üzerine monte edilmesini bekler .
/ Etc / fstab dosyasına aşağıdaki satırı eklemek bununla ilgilenmelidir:
tmpfs / dev / shm tmpfs varsayılanları 0 0
Gerekirse, tmpfs'yi yerleştirmek istediğiniz dizini oluşturmayı unutmayın.
Bu bağlanma, SYSV paylaşılan belleği için gerekli değildir . Dahili
montaj bunun için kullanılır. (2.3 çekirdek sürümlerinde,
SYSV
paylaşılan belleğini kullanmak için seleflerin (shm fs) selefinin monte edilmesi gerekiyordu )
3) Bazı insanlar (ben dahil)
örneğin / tmp ve / var / tmp üzerine monte etmeyi ve büyük bir takas bölümüne sahip olmayı çok uygun bulurlar . Ve şimdi
tmpfs dosyalarının döngü bağları işe yarıyor, bu yüzden çoğu
dağıtım tarafından gönderilen mkinitrd bir tmpfs / tmp ile başarılı olmalıdır.
4) Ve muhtemelen çok daha fazla bilmiyorum :-)
tmpfs boyutlandırma için üç montaj seçeneğine sahiptir:
size: Bu tmpfs örneği için ayrılan bayt sınırı. Varsayılan, takas olmadan fiziksel RAM'inizin yarısıdır. Tmpfs örneklerinizin büyüklüğünü ayarlarsanız, OOM işleyicisi bu belleği boşaltamayacağından makine kilitlenecektir.
nr_blocks: Boyutla aynı, ancak PAGE_CACHE_SIZE bloklarında.
nr_inodes: Bu örnek için maksimum düğüm sayısı. Varsayılan, fiziksel RAM sayfalarınızın sayısının yarısı veya (highmem olan bir makinede) lowmem RAM sayfalarının sayısıdır (hangisi daha düşükse).
Şeffaf Büyük Sayfa Çekirdeği Dokümanından:
Şeffaf Hugepage Desteği, kullanılmayan tüm belleğin önbellek veya diğer taşınabilir (veya taşınamaz varlıklar) olarak kullanılmasına izin vererek hugetlbfs'nin rezervasyon yaklaşımıyla karşılaştırıldığında boş belleğin kullanışlılığını en üst düzeye çıkarır. Devasa sayfa ayırma hatalarının kullanıcı alanından fark edilmesini önlemek için rezervasyon gerektirmez. Disk belleği ve diğer tüm gelişmiş VM özelliklerinin büyük sayfalarda kullanılabilmesini sağlar. Uygulamalardan yararlanmak için herhangi bir değişiklik gerektirmez.
Bununla birlikte, uygulamalar bu özellikten yararlanmak için daha da optimize edilebilir, örneğin her malloc (4k) için bir mmap sistemi çağrısından kaçınmak için daha önce optimize edilmişlerdir. Kullanıcı arazisini optimize etmek kesinlikle zorunlu değildir ve khugepaged zaten büyük miktarda bellekle uğraşan büyük sayfalardan habersiz uygulamalar için bile uzun ömürlü sayfa ayırmalarla ilgilenebilir.
Bazı hesaplamalar yaptıktan sonra Yeni Yorum:
HugePage Boyutu: 2MB
Kullanılan HugePages: Yok / Kapalı, tüm 0'lar tarafından kanıtlandığı gibi, ancak yukarıdaki 2Mb'ye göre etkinleştirildi.
DirectMap4k: 8.03Gb
DirectMap2M: 16.5Gb
DirectMap1G: 2Gb
THS'deki Optimizasyon ile ilgili yukarıdaki Paragrafı kullanarak, hafızanızın 8Gb'sinin 2K'lık mallokları kullanan uygulamalar tarafından 4k, 16.5Gb'lik malloklar kullanılarak çalışan uygulamalar tarafından istendiği anlaşılıyor. 2M mallokları kullanan uygulamalar, 2M bölümlerini çekirdeğe yükleyerek HugePage Desteğini taklit eder. Bu, tercih edilen yöntemdir, çünkü malloc çekirdek tarafından serbest bırakıldıktan sonra, bellek sisteme bırakılırken, dev sayfa kullanarak tmpf'lerin montajı, sistem yeniden başlatılıncaya kadar tam temizliğe neden olmaz. Son olarak, kolay olan, 1Gb'lik bir malloc isteyen 2 programınız açık / çalışıyor
Malloc bilmeyen okuduğunuzlar için C'de Memory ALLOCation anlamına gelen Standard bir Yapıdır. Bu hesaplamalar OP'nin DirectMapping ve THS arasındaki korelasyonunun doğru olabileceğinin kanıtıdır. Ayrıca, SADECE bir HUGEPAGE fs takmanın yalnızca 2MB'lık Artımlarla bir kazanım elde edeceğini unutmayın, oysa sistemin THS kullanarak belleği yönetmesine izin vermek çoğunlukla 4k bloklarda gerçekleşir, yani bellek yönetimi açısından her malloc çağrısı sistemi 2044k (2048 - 4) kurtarır. ) kullanmanız gerekir.
/proc/meminfo
olacakHugePage
(ya da çekirdek sürümünüzde bu yok mu?) Bu hangi mimaride (sanırım x86_64)?