Tidak ada perbedaan antara tmpfs dan shm. tmpfs adalah nama baru untuk shm. shm adalah singkatan dari SHredMemory.
Lihat:tmpfs Linux.
Alasan utama tmpfs bahkan digunakan hari ini adalah komentar ini di /etc/fstab saya di kotak gentoo saya. BTW Chromium tidak akan dibangun dengan baris yang hilang:
# 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
yang keluar dari dokumentasi kernel linux
Mengutip:
tmpfs memiliki kegunaan berikut:
1) Selalu ada pemasangan internal kernel yang tidak akan Anda lihat
semua. Ini digunakan untuk pemetaan anonim bersama dan SYSV bersama
Penyimpanan.Pemasangan ini tidak bergantung pada CONFIG_TMPFS. Jika CONFIG_TMPFS tidak disetel, bagian tmpfs yang terlihat pengguna tidak dibuat. Tapi internalnya
mekanisme selalu ada.2) glibc 2.2 dan di atasnya mengharapkan tmpfs dipasang di /dev/shm untuk
Memori bersama POSIX (shm_open, shm_unlink). Menambahkan berikut ini
baris ke /etc/fstab harus menangani ini:tmpfs /dev/shm tmpfs default 0 0
Ingatlah untuk membuat direktori tempat Anda ingin memasang tmpfs jika perlu.
Tunggangan ini tidak diperlukan untuk memori bersama SYSV. Internal
mount digunakan untuk itu. (Dalam versi kernel 2.3 itu
diperlukan untuk memasang pendahulu tmpfs (shm fs) untuk menggunakan SYSV
memori bersama)3) Beberapa orang (termasuk saya) merasa sangat nyaman untuk memasangnya
misalnya di /tmp dan /var/tmp dan memiliki partisi swap yang besar. Dan sekarang
mount loop dari file tmpfs berfungsi, jadi mkinitrd dikirimkan oleh sebagian besar
distribusi harus berhasil dengan tmpfs /tmp.4) Dan mungkin lebih banyak lagi yang tidak saya ketahui :-)
tmpfs memiliki tiga opsi pemasangan untuk ukuran:
ukuran: Batas byte yang dialokasikan untuk instance tmpfs ini. Standarnya adalah setengah dari RAM fisik Anda tanpa swap. Jika Anda memperbesar instance tmpfs Anda, mesin akan mengalami kebuntuan karena penangan OOM tidak akan dapat membebaskan memori itu.
nr_blocks: Sama seperti ukuran, tetapi dalam blok PAGE_CACHE_SIZE.
nr_inodes: Jumlah maksimum inode untuk instance ini. Standarnya adalah setengah dari jumlah halaman RAM fisik Anda, atau (pada mesin dengan memori tinggi) jumlah halaman RAM rendah, mana yang lebih rendah.
Dari Dokumen Kernel Hugepage Transparan:
Dukungan Hugepage Transparan memaksimalkan kegunaan memori bebas jika dibandingkan dengan pendekatan reservasi hugetlbfs dengan mengizinkan semua memori yang tidak terpakai untuk digunakan sebagai cache atau entitas lain yang dapat dipindahkan (atau bahkan tidak dapat dipindahkan). Itu tidak memerlukan reservasi untuk mencegah kegagalan alokasi halaman yang besar agar terlihat dari tanah pengguna. Ini memungkinkan pagingan dan semua fitur VM lanjutan lainnya tersedia di halaman besar. Aplikasi tidak memerlukan modifikasi untuk memanfaatkannya.
Namun aplikasi dapat dioptimalkan lebih lanjut untuk memanfaatkan fitur ini, seperti misalnya mereka telah dioptimalkan sebelumnya untuk menghindari banjir panggilan sistem mmap untuk setiap malloc(4k). Mengoptimalkan userland sejauh ini tidak wajib dan khugepaged sudah dapat menangani alokasi halaman yang berumur panjang bahkan untuk aplikasi besar yang tidak menyadari halaman yang berurusan dengan memori dalam jumlah besar.
Komentar Baru setelah melakukan beberapa perhitungan:
Ukuran Halaman Besar:2MB
HugePages Digunakan:Tidak Ada/Mati, sebagaimana dibuktikan dengan semua 0, tetapi diaktifkan sesuai 2Mb di atas.
DirectMap4k:8.03Gb
DirectMap2M:16,5Gb
DirectMap1G:2Gb
Menggunakan Paragraf di atas tentang Pengoptimalan di THS, sepertinya 8Gb memori Anda sedang digunakan oleh aplikasi yang beroperasi menggunakan mallocs 4k, 16.5Gb, telah diminta oleh aplikasi yang menggunakan mallocs 2M. Aplikasi yang menggunakan mallocs dari 2M meniru Dukungan HugePage dengan membongkar bagian 2M ke kernel. Ini adalah metode yang disukai, karena setelah malloc dirilis oleh kernel, memori dilepaskan ke sistem, sedangkan pemasangan tmpfs menggunakan hugepage tidak akan menghasilkan pembersihan penuh hingga sistem di-boot ulang. Terakhir, yang mudah, Anda memiliki 2 program yang terbuka/berjalan yang meminta malloc sebesar 1Gb
Bagi Anda yang membaca yang tidak tahu malloc adalah Struktur Standar dalam C yang merupakan singkatan dari Memory ALLOCation. Perhitungan ini berfungsi sebagai bukti bahwa korelasi OP antara DirectMapping dan THS mungkin benar. Perhatikan juga bahwa memasang HUGEPAGE ONLY fs hanya akan menghasilkan peningkatan sebesar 2MB, sedangkan membiarkan sistem mengelola memori menggunakan THS sebagian besar terjadi dalam blok 4k, yang berarti dalam hal manajemen memori setiap panggilan malloc menghemat sistem 2044k(2048 - 4 ) untuk digunakan beberapa proses lain.
Untuk mengatasi masalah "DirectMap":kernel memiliki pemetaan memori fisik linier ("langsung"), terpisah dari pemetaan virtual yang dialokasikan untuk setiap proses pengguna.
Kernel menggunakan halaman seluas mungkin untuk pemetaan ini guna mengurangi tekanan TLB.
DirectMap1G terlihat jika CPU Anda mendukung halaman 1Gb (Barcelona seterusnya; beberapa lingkungan virtual menonaktifkannya), dan jika diaktifkan di kernel - defaultnya aktif untuk 2.6.29+.
Tidak ada perbedaan antara shm
dan tmpfs
(sebenarnya, tmpfs
hanyalah nama baru dari shmfs
sebelumnya ). hugetlbfs
adalah tmpfs
-sistem file berbasis yang mengalokasikan ruangnya dari halaman besar kernel dan membutuhkan beberapa konfigurasi tambahan (cara menggunakan ini dijelaskan dalam Dokumentasi/vm/hugetlbpage.txt).