Tidak ada perbedaan antara tmpfs dan shm. tmpfs adalah nama baru untuk shm. shm adalah singkatan dari SHaredMemory.
Lihat: Linux tmpfs .
Alasan utama tmpfs bahkan digunakan hari ini adalah komentar ini di / etc / fstab di kotak gentoo saya. Chromium BTW tidak akan dibangun jika saluran tidak ada:
# 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 mount internal kernel yang tidak akan Anda lihat sama
sekali. Ini digunakan untuk pemetaan anonim bersama dan
memori bersama SYSV .
Mount ini tidak tergantung pada CONFIG_TMPFS. Jika CONFIG_TMPFS tidak disetel, bagian tmpfs yang terlihat pengguna tidak dibuat. Tetapi
mekanisme internal selalu ada.
2) glibc 2.2 dan di atas mengharapkan tmpfs untuk dipasang di / dev / shm untuk
memori bersama POSIX (shm_open, shm_unlink). Menambahkan
baris berikut ke / etc / fstab harus menangani ini:
tmpfs / dev / shm tmpfs default 0 0
Ingatlah untuk membuat direktori yang ingin Anda pasang tmpfs jika perlu.
Pemasangan ini tidak diperlukan untuk memori bersama SYSV.
Mount internal digunakan untuk itu. (Dalam versi kernel 2.3,
perlu untuk memasang pendahulu tmpfs (shm fs) untuk menggunakan
memori bersama SYSV )
3) Beberapa orang (termasuk saya) merasa sangat nyaman untuk memasangnya
misalnya pada / tmp dan / var / tmp dan memiliki partisi swap yang besar. Dan sekarang
loop mount file tmpfs berfungsi, jadi mkinitrd yang dikirimkan oleh sebagian besar
distribusi harus berhasil dengan tmpfs / tmp.
4) Dan mungkin lebih banyak yang saya tidak tahu tentang :-)
tmpfs memiliki tiga opsi pemasangan untuk ukuran:
size: 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 menemui jalan buntu karena OOM handler 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. Defaultnya adalah setengah dari jumlah halaman RAM fisik Anda, atau (pada mesin dengan highmem) jumlah halaman RAM lowmem, mana yang lebih rendah.
Dari Dokumen Transparan Hugepage Kernel:
Dukungan Transparan Hugepage memaksimalkan kegunaan memori bebas jika dibandingkan dengan pendekatan reservasi hugetlbfs dengan memungkinkan semua memori yang tidak digunakan untuk digunakan sebagai cache atau bergerak lainnya (atau bahkan entitas tidak bergerak). Itu tidak memerlukan reservasi untuk mencegah kegagalan alokasi hugepage agar terlihat dari userland. Ini memungkinkan paging dan semua fitur VM canggih lainnya tersedia di hugepages. Tidak memerlukan modifikasi untuk aplikasi untuk memanfaatkannya.
Namun aplikasi dapat lebih dioptimalkan 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 sudah ditentukan sebelumnya dapat menangani alokasi halaman berumur panjang bahkan untuk hugepage aplikasi yang tidak sadar yang berurusan dengan sejumlah besar memori.
Komentar Baru setelah melakukan beberapa perhitungan:
HugePage Ukuran: 2MB
HugePages Digunakan: Tidak Ada / Nonaktif, sebagaimana dibuktikan oleh semua 0's, tetapi diaktifkan sesuai 2Mb di atas.
DirectMap4k: 8.03Gb
DirectMap2M: 16.5Gb
DirectMap1G: 2Gb
Dengan menggunakan paragraf di atas tentang Pengoptimalan dalam 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 melepas bagian 2M ke kernel. Ini adalah metode yang disukai, karena begitu malloc dilepaskan oleh kernel, memori dilepaskan ke sistem, sedangkan pemasangan tmpfs menggunakan hugepage tidak akan menghasilkan pembersihan penuh sampai sistem reboot. Terakhir, yang mudah, Anda memiliki 2 program terbuka / berjalan yang meminta malloc 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. Juga perhatikan bahwa memasang HUGEPAGE ONLY fs hanya akan menghasilkan peningkatan 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 beberapa proses lain untuk digunakan.
/proc/meminfo
yang berisiHugePage
(atau apakah versi kernel Anda tidak memilikinya)? Arsitektur apa ini (x86_64 saya kira)?