Pertanyaan ini bermula dengan lelucon antara rekan kerja tentang peningkatan kinerja dengan memindahkan file swap ke tmpfs. Jelas bahkan jika ini mungkin, itu bukan ide yang baik. Yang ingin saya tahu adalah, bisakah itu dilakukan?
Saat ini saya menggunakan Ubuntu 14.04, tetapi saya membayangkan prosesnya serupa untuk sebagian besar mesin Linux / Unix. Inilah yang saya lakukan:
> mkdir /mnt/tmp
> mount -t tmpfs -o size=10m tmpfs /mnt/tmp
> dd if=/dev/zero of=/mnt/tmp/swapfile bs=1024 count=10240
> chmod 600 /mnt/tmp/swapfile
> mkswap /mnt/tmp/swapfile
# So far, so good!
> swapon /mnt/tmp/swapfile
swapon: /mnt/tmp/swapfile: swapon failed: Invalid argument
Jadi, di linux atau unix (saya tertarik dengan solusi apa pun) dapatkah Anda mengatur swap pada file / partisi yang berada di ram? Apakah ada cara untuk mengatasi Invalid argument
kesalahan yang saya dapatkan di atas?
Sekali lagi, hanya ingin menekankan bahwa saya tidak mengharapkan ini menjadi solusi untuk masalah dunia nyata. Eksperimen yang menyenangkan, kurasa.
Jawaban:
Tentu. Di FreeBSD:
Itu menunjukkan bahwa saat ini, saya memiliki partisi swap terenkripsi 4G dengan redundansi cermin. Saya akan menambahkan 4G lainnya dari swap non-redundan, tidak terenkripsi:
Pertama-tama buat perangkat "disk memori" (
md
) yang didukung RAM :Kemudian katakan
swapon
untuk menambahkannya ke kumpulan perangkat swap yang tersedia, danswapinfo
mengkonfirmasi bahwa saya sekarang memiliki 8G swap:sumber
mdconfig(8)
termasuk catatan bahwa menghilangkan-o reserve
opsi "adalah cara yang sangat mudah untuk panik suatu sistem". Ini juga mencatat bahwa jenisnya dapat diatur untukswap
memungkinkan skenario yang sangat menghibur dari suatu sistem yang memindahkan halaman memori ke swap yang dengan sendirinya berada di memori! Bahkan ada opsi-o force
untuk boneka seperti saya yang ingin menghilangkan "pemeriksaan kewarasan tambahan". Selamat tertawa membaca ini.Seharusnya tidak mungkin.
swapon
panggilan sistem mensyaratkanreadpage
danbmap
(secara tidak langsung) panggilan diimplementasikan oleh sistem file:http://lxr.free-electrons.com/source/mm/swapfile.c?v=4.0#L2412
Tapi tidak ada yang diimplementasikan oleh tmpfs , entri seperti itu tidak ada yang sesuai
address_space_operations
: http://lxr.free-electrons.com/source/mm/shmem.c?v=4.0#L3104Untuk alasan yang sama, tmpfs tidak dapat menahan mount loops, dan ramfs tidak akan berfungsi dengan baik (tidak ada
bmap
panggilan)sumber
Dari T&J ini /superuser/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem (situs referensi asli tidak merespons):
Alasan ketidakcocokan yang saya curigai adalah "ketergantungan sirkular". Dari artikel ini: http://www.jamescoyle.net/knowledge/951-the-difference-between-a-tmpfs-and-ramfs-ram-disk :
Yang mana akan sangat tidak mungkin dalam skenario Anda.
Ini mungkin bekerja dengan
ramfs
, tho - yang tidak memiliki masalah ini.sumber
tmpfs
partisi sebagai swap akan mulai dan loop tanpa akhir ketika mesin mulai bertukar.Anda dapat dengan mudah menghindari masalah dengan fungsi yang hilang dan bertukar ke tmpfs, meskipun sedikit tidak langsung:
Dikombinasikan dengan zswap, itu tampak seperti solusi "memory expander" yang hebat sampai RasPi4 saya membeku hampir sepenuhnya (konsol ssh membeku, X membeku, youtube di chrome terus berbicara selama beberapa menit dan membeku juga, tetapi sistem itu membalas ping dan pengawas tidak dapat melakukan sesuatu yang bermanfaat. Diluncurkan melalui ssh (sebelum itu terjadi) di atas tidak menunjukkan sesuatu yang luar biasa juga - tampaknya ada ruang ram dan swap yang cukup, Bahkan, ide serupa dengan OpenSolaris (swap ke zvol terkompresi) mengarah pada hasil yang serupa.
sumber