Saya memiliki mesin dengan 62GB RAM, dan bagasi yang hanya 7GB, jadi saya pikir saya akan membuat RAM disk dan kompilasi di sana. Saya bukan ahli Linux. Saya menemukan instruksi di internet untuk membuat disk RAM:
mkfs -q /dev/ram1 8192
tapi saya mengubah 8192 ke 16777216 dalam upaya untuk mengalokasikan 16GB ram disk.
Saya mendapat kesalahan berikut:
mkfs.ext2: Filesystem larger than apparent device size.
Proceed anyway? (y,n)
Pada titik mana saya menjadi ketakutan dan ditebus.
sudo dmidecode --type 17 | grep Size
menunjukkan
8x8192MB + 2048MB = 67584 MB
tapi du
pada /dev
memberi 804K
.
Apakah itu masalahnya? Bisakah saya mengatasi /dev
ukuran itu?
mount -o size=16G -t tmpfs none /mnt/tmpfs
Jawaban:
Cara terbaik untuk membuat ram ram di linux adalah tmpfs. Ini adalah filesystem yang hidup di ram, jadi tidak perlu untuk ext2. Anda dapat membuat tmpf dengan ukuran 16Gb dengan:
sumber
tmpfs
dapat menggunakan swap, yang mungkin tidak Anda inginkan dalam disk RAM murni.Linux sangat efisien dalam menggunakan RAM. Ada sedikit kejutan bahwa Anda melihat sedikit jika ada speedup
tmpfs
. Bagian terbesar untuk dibaca ke dalam memori (dan dengan demikian mampu memperlambat prosesnya) adalah alat (compiler, assembler, linker), dan dalam gondrongmake
mereka akan dimuat ke dalam memori pada saat startup dan tidak pernah meninggalkannya. Yang tersisa adalah membaca dalam sumber (penulisan hasil tidak akan memperlambat Anda, kecuali jika memori sangat dibatasi). Sekali lagi, file header comon akan tetap ada, hanya sumber pengguna yang perlu dibaca. Dan itu tidak mungkin lebih dari beberapa megabyte. Menciptakan RAMdisk yang besar (atau bahkan banyak menggunakantmpfs
) dapat memperlambat hal-hal dengan sangat baik (dengan membuat memori build terkendala, file pada RAMdisk atau padatmpfs
tidak dapat digunakan langsung dari sana).sumber
tmpfs
tidak biasa digunakan untuk menyimpan file yang dapat dieksekusi (RAMdisk adalah sisa dari masa lalu yang baik dari disket yang sangat lambat dan semacamnya,tmpfs
adalah untuk data sementara yang rumit), tidak ada yang menganggap cukup penting untuk menambahkan peretasan jelek yang diperlukan.Masalahnya adalah bahwa ukuran maksimum ramdisk, lebih khusus dari ukuran memori yang dapat diakses melalui driver ramdisk yang dikonfigurasi pada compiletime, dapat ditimpa pada boottime, tetapi tetap diperbaiki setelah kernel dimuat ke dalam memori. Nilai default mungkin diukur dalam Megabita. Jika saya ingat dengan benar memori untuk ramdisk dicadangkan tepat saat driver dimuat, semua ramdis memiliki ukuran yang sama dan ada beberapa 16 ramdis secara default. Jadi, bahkan Anda tidak menginginkan ukuran ramdisk 16G :-)
Seperti yang dinyatakan dalam jawaban lain, tmpfs adalah apa yang ingin Anda gunakan. Selanjutnya, Anda tidak akan menang banyak dengan memiliki seluruh OS Anda di ramdisk / tmpfs. Cukup salin builddir Anda ke tmpfs dan lakukan kompilasi Anda kemudian. Anda mungkin harus memastikan bahwa semua hasil sementara ditulis ke lokasi yang ada di tmpfs juga.
sumber
blockdev --flushbufs
.Documentation/blockdev/ramdisk.txt
dalam sumber kernel. Dan pada jawaban saya: file itu juga mengatakan ramdisk bertambah saat memori dikonsumsi sehingga tidak semuanya dialokasikan sekaligus.Untuk membuat ram ram besar setelah boot, tanpa main-main dengan parameter kernel, ini sepertinya berhasil. Gunakan tmpfs, buat file, pasang melalui loop, dan pasang itu melalui sistem file:
Mungkin sedikit penalti kinerja melalui berbagai lapisan ... tapi setidaknya itu berhasil.
sumber
Selain
tmpfs
danramfs
, opsi lain adalah/dev/ram0
perangkat blokir. Pada versi Ubuntu terbaru, perangkat ini tidak ada secara default, tetapi dapat dibuat viamodprobe brd
.Pendekatan ini lebih dapat diprediksi karena ia menciptakan
ext4
sistem file nyata dan tidak pernah melebihi batas yang Anda tentukan. Tetapi butuh lebih banyak langkah untuk mengatur, dan menggunakan RAM kurang efisien.Menggunakan modul brd kernel (/ dev / ram0)
Untuk membuat dan menginisialisasi disk RAM 4GB:
The
rd_nr
parameter menentukan berapa banyak disk RAM untuk membuat (secara default, itu menciptakan 16, yaitu/dev/ram0
melalui/dev/ram15
). Therd_size
parameter ukuran dalam kilobyte . The$(( ... ))
sintaks memungkinkan Anda melakukan aritmatika di shell.Untuk membatalkan alokasi disk RAM, unmount dan lepaskan
brd
modul kernel:Membuat perangkat blok di dalamnya
ramfs
Atau, Anda dapat membuat perangkat blok di dalam
ramfs
:The
truncate
Perintah menciptakan sebuah file kosong dari ukuran tertentu sedemikian rupa sehingga diinisialisasi (yaitu mengkonsumsi memori) on-demand.Untuk membatalkan alokasi disk RAM, umount dan hapus gambar disk:
Perbandingan dengan
tmpfs
danramfs
Meskipun
tmpfs
danramfs
lebih efisien daripada menggunakan perangkat blok, di bawah ini adalah beberapa kelemahannya.tmpfs
dapat bertukar ke disk. Ini lebih efisien, tetapi mungkin ada saatnya Anda menginginkan disk RAM murni:ramfs
mudah untuk diatur, mengambil kembali ruang setelah Anda menghapus file, dan menggunakan RAM lebih efisien (sistem tidak buffer file karena tahu mereka ada dalam RAM). Tetapi memiliki kelemahan dan kejutannya sendiri:The
df
utilitas tidak melaporkan penggunaan ruang:Tidak ada parameter batas ukuran. Jika Anda menaruh terlalu banyak di ramdisk, sistem Anda akan hang.
File yang jarang dapat menjadi tidak jelas ketika Anda tidak mengharapkannya. Pagi ini, saya menyalin gambar VM (150G, tetapi 49G digunakan pada disk) ke
ramfs
(saya punya 128G RAM). Itu berhasil. Tapi ketika saya disalin dari yangramfs
ke tujuan, sistem saya menjadi tidak responsif. Thecp
utilitas rupanya mengisi lubang di membaca , tetapi tidak pada menulis.Keduanya
tmpfs
danramfs
mungkin berperilaku berbeda dariext4
sistem file nyata . Membuat perangkat blok dalam RAM dan menginisialisasi denganext4
menghindari ini.Untuk perbandingan yang lebih mendalam: https://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt
sumber
OP jumlah RAM dinyatakan dalam MB. Jadi yang perlu Anda masukkan di sana adalah 16384. Dan kemudian voila Anda akan berbisnis.
sumber
mkfs.ext2
Anda dapat memasang
ramfs
sistem file, menyalin proyek Anda ke dalamnya dan bekerja dari sana. Ini menjamin file input Anda dimuat ke RAM, dan itu tidak akan dibaca kembali dari drive disk yang jauh lebih lambat. Namun ketika Anda menemukan, ini umumnya bukan strategi yang berguna. Anda sudah mendapatkan manfaat yang sama persis.- https://github.com/torvalds/linux/blob/v4.18/Documentation/filesystems/ramfs-rootfs-initramfs.txt
Anda sudah bisa percaya file input Anda di-cache dalam RAM, saat pertama kali dibaca. File output Anda juga di-cache, sehingga Anda tidak menunggu mereka dituliskan ke disk.
Tidak ada batasan artifisial tentang seberapa banyak Anda dapat melakukan cache, berapa lama cache itu disimpan, dll. Cache hanya mulai turun begitu Anda telah mengisi RAM. Cache yang dibuang lebih dulu dipilih oleh algoritma yang sangat rumit. Perkiraan pertama, adalah kami menggambarkannya sebagai Paling Baru Digunakan. Lihat Algoritma penggantian halaman apa yang digunakan dalam kernel Linux untuk cache file OS?
Perhatikan bahwa editor teks Anda akan secara eksplisit
fsync()
menyimpan file ke disk.Jika Anda menjalankan tes program yang melibatkan
fsync()
, menjalankan ini dalam sistem file sepertiramfs
mungkin mempercepat mereka. Strategi lain adalah mencoba dan menonaktifkanfsync()
denganeatmydata
/nosync.so
.Beberapa sistem operasi lain mungkin memiliki batasan spesifik, yang dapat dilewati menggunakan ramdisk. Pada salah satu ujung, kurangnya setiap file caching sebabnya ramdisks yang populer di DOS .
tmpfs
tmpfs
berfungsi sama denganramfs
, kecuali bahwa itu dapat menggunakan ruang swap jika Anda memilikinya. Yaitu jika Anda membutuhkan RAM untuk sesuatu yang lain, algoritma Least Baru Digunakan dapat memilih blok data dari tmpfs dan menukar mereka ke disk.Kebanyakan orang tetap dengan
tmpfs
, karena itu juga memungkinkan Anda membatasi ukuran total, dan menunjukkan ruang yang digunakan dengan benar misalnya dalamdf
perintah. Saya tidak yakin mengapa perbedaan ini ada. Batas ukurantmpfs
melindungi Anda dari secara tidak sengaja mengisi seluruh RAM Anda dan pada dasarnya mematikan sistem Anda. Ini default untuk setengah dari RAM Anda.Alasan lain mengapa menulis bisa melambat
Di atas adalah penyederhanaan yang disesuaikan dengan kasus Anda. File menulis ke dalam kasus Anda tidak perlu menunggu disk. Namun ada beberapa kasus penulisan yang dilakukan. Lihat posting blog yang bagus Mengapa penulisan buffer terkadang terhenti . Kasus yang paling mengejutkan adalah perubahan terbaru ke Linux yang disebut "stable page wrote".
sumber