Saya ingin tahu akhir-akhir ini tentang berbagai sistem file berbasis memori kernel Linux.
Note:
Sejauh yang saya ketahui, pertanyaan-pertanyaan di bawah ini harus dianggap lebih atau kurang opsional jika dibandingkan dengan pemahaman yang lebih baik dari yang diajukan dalam judul. Saya bertanya kepada mereka di bawah ini karena saya yakin menjawabnya dapat lebih membantu saya untuk memahami perbedaan, tetapi karena pemahaman saya diakui terbatas, maka orang lain mungkin tahu lebih baik. Saya siap menerima jawaban apa pun yang memperkaya pemahaman saya tentang perbedaan antara ketiga sistem file yang disebutkan dalam judul.
Pada akhirnya saya pikir saya ingin me-mount sistem file yang dapat digunakan dengan hugepages,
meskipun beberapa penelitian ringan (dan masih bermain-main lebih ringan) telah membuat saya percaya bahwa a rewritable hugepage mount
bukanlah pilihan. Apakah saya salah? Apa mekanika yang berperan di sini?
Juga tentang hugepages:
uname -a
3.13.3-1-MANJARO \
#1 SMP PREEMPT \
x86_64 GNU/Linux
tail -n8 /proc/meminfo
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 8223772 kB
DirectMap2M: 16924672 kB
DirectMap1G: 2097152 kB
(Berikut adalah versi teks lengkap dari / proc / meminfo dan / proc / cpuinfo )
Apa yang terjadi di atas? Apakah saya sudah mengalokasikan hugepages?
Apakah ada perbedaan antara DirectMap
halaman memori danhugepages?
Perbarui Setelah sedikit dorongan dari @Gilles, saya telah menambahkan 4 baris lebih di atas dan tampaknya pasti ada perbedaan, meskipun saya belum pernah mendengar DirectMap
sebelumnya menariknya tail
kemarin ... mungkin DMI
atau sesuatu?
Hanya sedikit lagi ...
Gagal dalam keberhasilan apa pun dengan hugepages
upaya ini, dan dengan asumsi cadangan harddisk dari semua file gambar, apa risiko memasang loop dari tmpfs?
Apakah sistem file saya menjadi swapped
skenario terburuk? Saya mengerti tmpfs
apakah cache sistem file sudah terpasang - dapatkah loopfile yang dipasang saya ditekan keluar dari memori? Apakah ada tindakan meringankan yang dapat saya lakukan untuk menghindari hal ini?
Terakhir - tepatnya apa shm,
itu? Bagaimana perbedaannya dari atau termasuk salah satu hugepages
atautmpfs?
sumber
/proc/meminfo
yang berisiHugePage
(atau apakah versi kernel Anda tidak memilikinya)? Arsitektur apa ini (x86_64 saya kira)?Jawaban:
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:
yang keluar dari dokumentasi kernel linux
Mengutip:
Dari Dokumen Transparan Hugepage Kernel:
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.
sumber
Untuk mengatasi masalah "DirectMap": kernel memiliki pemetaan linear ("direct") memori fisik , terpisah dari pemetaan virtual yang dialokasikan untuk setiap proses pengguna.
Kernel menggunakan halaman terbesar yang mungkin untuk pemetaan ini untuk mengurangi tekanan TLB.
DirectMap1G terlihat jika CPU Anda mendukung halaman 1Gb (Barcelona dan seterusnya; beberapa lingkungan virtual menonaktifkannya), dan jika diaktifkan di kernel - defaultnya adalah untuk 2.6.29+.
sumber
Tidak ada perbedaan antara
shm
dantmpfs
(sebenarnya,tmpfs
hanya nama baru dari mantanshmfs
).hugetlbfs
adalahtmpfs
filesystem berbasis yang mengalokasikan ruangnya dari halaman kernel yang besar dan membutuhkan beberapa konfigurasi tambahan yang dapat dibeli (cara menggunakan ini dijelaskan dalam Dokumentasi / vm / hugetlbpage.txt ).sumber
DirectMap
sama sekali diprocfs man
halaman. Bagaimana bisa?