Saya memiliki server yang agak lama yang memiliki 4GB RAM dan itu cukup banyak melayani file yang sama sepanjang hari, tetapi ia melakukannya dari hard drive sementara 3GB RAM "bebas".
Siapa pun yang pernah mencoba menjalankan ram-drive dapat menyaksikan bahwa ini luar biasa dalam hal kecepatan. Penggunaan memori sistem ini biasanya tidak pernah lebih tinggi dari 1GB / 4GB jadi saya ingin tahu apakah ada cara untuk menggunakan memori ekstra untuk sesuatu yang baik.
- Apakah mungkin untuk memberi tahu filesystem untuk selalu melayani file tertentu dari RAM?
- Apakah ada metode lain yang bisa saya gunakan untuk meningkatkan kemampuan membaca file dengan menggunakan RAM?
Lebih khusus lagi, saya tidak mencari 'hack' di sini. Saya ingin panggilan sistem file untuk melayani file dari RAM tanpa perlu membuat ram-drive dan menyalin file di sana secara manual. Atau setidaknya skrip yang melakukan ini untukku.
Kemungkinan aplikasi di sini adalah:
- Server web dengan file statis yang banyak dibaca
- Server aplikasi dengan perpustakaan besar
- Komputer desktop dengan terlalu banyak RAM
Ada ide?
Sunting:
- Menemukan ini sangat informatif: Cache Halaman Linux dan pdflush
- Seperti yang ditunjukkan Zan, memori itu sebenarnya tidak gratis. Maksud saya adalah bahwa itu tidak digunakan oleh aplikasi dan saya ingin mengontrol apa yang harus di-cache dalam memori.
sumber
Jawaban:
vmtouch sepertinya alat yang bagus untuk pekerjaan itu.
Highlight:
manual vmtouch
EDIT: Penggunaan seperti yang ditanyakan dalam pertanyaan tercantum dalam contoh 5 pada vmtouch Hompage
EDIT2: Seperti disebutkan dalam komentar, sekarang ada repositori git yang tersedia.
sumber
vmtouch
cocok dengan niche ini dengan baik.Ini juga mungkin menggunakan vmtouch Virtual Memory toucher utilitas .
Alat ini memungkinkan Anda untuk mengontrol cache sistem file pada sistem Linux. Anda dapat memaksa atau mengunci file atau direktori tertentu di subsistem cache VM, atau menggunakannya untuk memeriksa untuk melihat bagian mana dari file / direktori yang terkandung dalam VM.
Atau...
sumber
Trik orang miskin untuk memasukkan hal-hal ke dalam cache sistem file adalah dengan membuatnya dan mengarahkannya ke / dev / null.
sumber
cat
untuk file yang mana / dev / null secara berkalaLinux akan men-cache IO disk dalam memori sebanyak mungkin. Ini adalah statistik cache dan buffer memory. Mungkin akan melakukan pekerjaan yang lebih baik daripada Anda akan menyimpan hal-hal yang benar.
Namun, jika Anda bersikeras menyimpan data dalam memori, Anda dapat membuat ram drive menggunakan tmpfs atau ramfs. Perbedaannya adalah bahwa ramf akan mengalokasikan semua memori yang Anda minta, karena tmpf hanya akan menggunakan memori yang digunakan perangkat blok Anda. Ingatan saya agak berkarat, tetapi Anda harus bisa melakukannya:
atau
dan kemudian salin data Anda ke direktori. Jelas, ketika Anda mematikan mesin atau melepas partisi itu, data Anda akan hilang.
sumber
Setelah membaca secara ekstensif fitur-fitur kernel 2.6 dan caching halaman, saya menemukan 'fcoretools'. Yang terdiri dari dua alat;
(Jika ada orang lain yang menganggap ini menarik, saya memposting ini di sini)
sumber
Ada dua pengaturan kernel yang dapat sangat membantu bahkan tanpa menggunakan alat lain:
swappiness
memberitahu kernel Linux seberapa agresif seharusnya menggunakan swap. Mengutip artikel Wikipedia:
vfs_cache_pressure
Mengutip dari vm.txt :
Dengan menetapkan
swappiness
tinggi (seperti 100), kernel akan memindahkan semua yang tidak perlu ditukar, membebaskan RAM untuk menyimpan file cache. Dan dengan menetapkanvfs_cache_pressure
lebih rendah (misalkan ke 50, bukan ke 0!), Itu akan lebih memilih caching file daripada menyimpan data aplikasi dalam RAM.(Saya bekerja pada proyek Java besar dan setiap kali saya menjalankannya, butuh banyak RAM dan mem-flush cache disk, jadi lain kali saya mengkompilasi proyek, semuanya dibaca dari disk lagi. Dengan menyesuaikan kedua pengaturan ini, saya mengatur untuk menjaga sumber dan mengkompilasi output dalam cache, yang mempercepat proses.)
sumber
Saya sangat ragu bahwa itu sebenarnya melayani file dari disk dengan RAM 3 GB gratis. Caching file Linux sangat baik.
Jika Anda melihat IO disk, saya akan melihat konfigurasi logging Anda. Banyak log ditetapkan sebagai tidak dibuat-buat, untuk menjamin bahwa informasi log terbaru tersedia jika terjadi kerusakan. Dalam sistem yang harus cepat terlepas, gunakan log buffer IO atau gunakan server log jarak jauh.
sumber
Jika Anda memiliki banyak memori, Anda cukup membaca di file yang ingin Anda cache dengan cat atau sejenisnya. Linux kemudian akan melakukan pekerjaan yang baik untuk mempertahankannya.
sumber
Anda mungkin dapat memiliki program yang hanya
mmap
menyimpan file Anda kemudian tetap berjalan.sumber
Ada berbagai sistem ramf yang dapat Anda gunakan (mis., Ramfs, tmpfs), tetapi secara umum jika file benar-benar sering dibaca, mereka duduk di cache sistem file Anda. Jika set file kerja Anda lebih besar dari ram gratis Anda, maka file akan dihapus dari itu - tetapi jika set kerja Anda lebih besar dari ram gratis Anda, tidak ada cara Anda akan memasukkan semuanya ke dalam ramdisk juga.
Periksa output dari perintah "gratis" di shell - nilai di kolom terakhir, di bawah "Cached", adalah berapa banyak ram gratis Anda digunakan untuk cache sistem file.
sumber
Adapun pertanyaan terakhir Anda, pastikan bahwa RAM Anda duduk di saluran memori yang berbeda sehingga prosesor dapat mengambil data secara paralel.
sumber
Saya pikir ini mungkin lebih baik diselesaikan di level aplikasi. Misalnya, mungkin ada server web khusus untuk ini, atau Anda dapat mempertimbangkan mod_cache dengan Apache. Jika Anda memiliki tujuan tertentu, seperti melayani konten web lebih cepat, maka Anda bisa mendapatkan peningkatan dari hal semacam ini yang saya pikir.
Tetapi pertanyaan Anda bersifat umum, subsistem memori Linux dirancang untuk memberikan penggunaan umum RAM yang terbaik. Jika Anda ingin menargetkan jenis kinerja tertentu, pertimbangkan mencari semuanya di / proc / sys / vm.
Paket fcoretools menarik, saya tertarik pada artikel tentang aplikasinya ... Tautan ini berbicara tentang panggilan sistem aktual yang digunakan dalam suatu aplikasi.
sumber
Komputer desktop (mis. Ubuntu) sudah menggunakan file preloading (setidaknya, pustaka bersama yang populer) ke memori saat boot. Ini digunakan untuk mempercepat waktu booting dan startup dari berbagai bloarware seperti FF, OO, KDE dan GNOME (dengan evolution bloat-mailer).
Alat ini bernama readahead http://packages.ubuntu.com/dapper/admin/readahead
Ada juga syscall yang sesuai: readahead (2) http://linux.die.net/man/2/readahead
Ada juga proyek daemon preloading: http://linux.die.net/man/8/preload
sumber
http://www.coker.com.au/memlockd/ melakukan ini
meskipun Anda benar-benar tidak membutuhkannya, linux akan melakukan pekerjaan yang cukup baik untuk melakukan caching file yang Anda gunakan sendiri.
sumber
saya baru saja mencoba dd jika = / dev / yourrootpartition of = / dev / null \ bs = 1Mcount = howmuchmemoryyouwanttofill
itu tidak memberi saya kontrol yang Anda inginkan tetapi setidaknya mencoba menggunakan memori yang terbuang
sumber
Saya menggunakan find / -nama stringofrandomcharacter itu membantu banyak
sumber
Tidak persis apa yang diminta, tetapi saya gunakan
untuk memicu inisialisasi file dalam volume AWS yang dibuat dari snapshot. Ini lebih fokus daripada rekomendasi resmi menggunakan dd jika Anda hanya ingin membaca beberapa file.
sumber
Kadang-kadang saya mungkin ingin menyimpan file dalam folder tertentu dan subfoldernya. Saya hanya pergi ke folder ini dan menjalankan yang berikut:
Temukan . -exec cp {} / dev / null \;
Dan file-file itu di-cache
sumber