Perbedaan kinerja antara ramf dan tmpf

23

Saya perlu mengatur sistem penyimpanan dalam memori untuk sekitar 10 GB data, yang terdiri dari banyak file tunggal 100 kb (gambar). Akan ada banyak membaca dan menulis cukup berkala (menambahkan file baru, menghapus beberapa yang lama).
Sekarang, saya tahu tmpfs berperilaku seperti sistem file biasa yang Anda dapat, misalnya, memeriksa ruang kosong / bekas dengan df , yang merupakan fitur bagus untuk dimiliki. Namun saya tertarik jika ramf akan menawarkan beberapa keunggulan berkaitan dengan kecepatan operasi IO. Saya tahu bahwa saya tidak dapat mengontrol ukuran memori yang dikonsumsi saat menggunakan ramf dan bahwa sistem saya dapat hang jika benar-benar mengkonsumsi RAM gratis, tetapi itu tidak akan menjadi masalah dalam skenario ini.

Singkatnya, saya tertarik:
- Kinerja bijaksana, yang lebih cepat: ramfs atau tmpfs (dan mungkin mengapa)?
- Kapan tmpfs menggunakan ruang swap? Apakah ini memindahkan data yang sudah tersimpan untuk ditukar (untuk membebaskan RAM untuk program lain yang sedang berjalan) atau hanya data baru jika pada saat itu tidak ada RAM yang tersisa?

Ivan Kovacevic
sumber
Um, berapa banyak RAM di server?
ewwhite
1
Server memiliki total 16 GB RAM. Juga patut dicatat adalah bahwa saya tidak memiliki penyimpanan SSD tetapi hanya 7200 rpm HDD. Itu sebabnya saya mempertimbangkan untuk menggunakan beberapa jenis penyimpanan RAM.
Ivan Kovacevic

Jawaban:

21

Rekomendasi saya:

Ukur dan amati aktivitas kehidupan nyata dalam kondisi normal.

File-file itu sepertinya TIDAK SEMUA dibutuhkan dan disajikan dari cache setiap saat. Tapi ada alat bagus bernama vmtouch yang dapat memberi tahu Anda apa yang ada di cache pada saat tertentu. Anda juga dapat menggunakannya untuk mengunci direktori atau file tertentu ke dalam cache. Jadi lihatlah apa yang terlihat setelah digunakan secara teratur. Menggunakan tmpfs dan ramf tidak diperlukan untuk situasi ini.

Lihat: http://hoytech.com/vmtouch/

Saya pikir Anda akan terkejut melihat bahwa file yang paling aktif mungkin sudah ada dalam cache.


Sejauh tmpf dibandingkan ramf, tidak ada perbedaan kinerja yang cukup besar. Ada perbedaan operasional. Case use kehidupan nyata adalah Oracle, di mana ramf digunakan untuk memungkinkan Oracle mengelola data dalam RAM tanpa risiko swap. Data tmpfs dapat ditukar keluar di bawah tekanan memori. Ada juga perbedaan dalam mengubah ukuran dan mengubah pengaturan dengan cepat.

putih
sumber
1
Utilitas kecil yang luar biasa! +1
Janne Pikkarainen
1
@ewwhite Jawaban yang sangat bagus. Dalam salah satu kasus kami beberapa tahun yang lalu kami memang menemukan bahwa sebagian besar file yang digunakan sudah ada dalam cache. Petunjuk: Sistem file saat ini jauh lebih cerdas daripada yang saya pikirkan.
giannisapi
13

Jangan terlalu memikirkan ini. Masukkan RAM yang cukup di sistem Anda dan biarkan cache disk kernel menangani hal-hal untuk Anda. Dengan begitu Anda mendapatkan manfaat dari bacaan yang datang langsung dari memori, sambil tetap bisa mempertahankan data pada disk.

EEAA
sumber
1
Sistem saya saat ini memiliki 16 GB RAM. Ini adalah instalasi Debian sederhana yang menjalankan Nginx untuk melayani gambar-gambar itu. Saya memiliki koneksi jaringan 1 Gbit yang akan di bawah 100% memuat sepanjang waktu, melayani gambar-gambar itu tanpa urutan tertentu. Apakah Anda berpikir bahwa kernel akan memuat semua 10 pertunjukan gambar dalam cache dalam skenario ini?
Ivan Kovacevic
3
Ya, jika ada cukup RAM di sistem, dan aplikasi lain di server tidak bersaing untuk sumber daya RAM, file-file itu akan tetap dalam cache.
EEAA
2
Saya telah berada di administrasi unix selama ~ 15 tahun, dan saya tidak pernah mengalami situasi di mana tmpfs / ramfs akan memberikan manfaat apa pun atas cache fs kernel asli. Itu bukan untuk mengatakan bahwa situasi tidak ada di luar sana di mana mereka akan dijamin, tetapi mereka cukup langka. Biasanya jika Anda membutuhkan cache RAM untuk sesuatu, seseorang menggunakan layer caching build-build (Redis / Memcache / dll.).
EEAA
4
Disk caching tentu akan berfungsi untuk kasus di mana gambar perlu dibaca, tetapi tmpfs atau ramfs masih bisa berguna jika Anda ingin mempercepat banyak penulisan acak / kecil tetapi terikat ke disk yang lambat dengan I / acak acak. HAI. Perlu diingat bahwa jika mesin mengalami crash atau mengalami kegagalan daya, isi tmpfs akan hilang karena mereka berada di tempat (hanya) dalam memori.
Martijn
1
@ Martijn benar. tmpfs dan ramfs memang berguna. Sebagai contoh, saya sedang melakukan penulisan ulang intensif (filter-branch) dari repositori git. Melakukannya di memori lebih cepat daripada melakukannya di SSD saya. Caching membantu membaca tidak menulis, karena (biasanya) Linux harus memenuhi beberapa jaminan tentang kelanjutan operasi disk.
Paul Draper
7

1) Tolok ukur kinerja.

Menggunakan halaman ini sebagai referensi, saya melakukan perbandingan I / O antara tmpfs dan ramfs, dan hasilnya cukup identik dalam hal kinerja:

# !mount
mount | grep -E "tmp|ram"
tmpfs on /dev/shm type tmpfs (rw)
ramfs on /mnt/ram type ramfs (rw,size=1G)

# dd bs=1M count=1024 if=/dev/zero of=/dev/shm/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.634054 s, 1.7 GB/s

# dd bs=1M count=1024 if=/dev/zero of=/mnt/ram/test conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 0.559557 s, 1.9 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/dev/shm/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.5104 s, 1.7 GB/s

# dd bs=1M count=4096 if=/dev/zero of=/mnt/ram/test conv=fdatasync
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 2.36923 s, 1.8 GB/s

2) Menurut halaman ini , tmpfs menggunakan swap, dan ramfs tidak menggunakan swap.

Michael Martinez
sumber
2
Jawaban Anda ada di jalur yang benar. Namun saya tidak akan setuju dengan kesimpulan Anda tentang kinerja, tes Anda menunjukkan bahwa ADA perbedaan 0,2 GB / s dan 0,1 GB / s dalam mendukung ramfs. Saya percaya ini harus diuji lebih jauh untuk memberikan sampel statistik yang valid. Mengenai 2) Ya itu diketahui, namun saya berharap bisa mendapatkan wawasan yang lebih baik tentang kapan swap digunakan.
Ivan Kovacevic
jika kita melakukan benchmark ini beberapa kali dengan file ukuran yang berbeda, saya tidak berpikir kita akan melihat perbedaan. Anda akan melihat bahwa ketika saya menabrak ukuran empat kali, perbedaannya sebenarnya menyempit daripada melebar.
Michael Martinez
1
Bagaimana dengan kasus di mana Anda memiliki banyak file kecil. Misalnya menulis sejuta file 100-200 kb. Anda juga mendapatkan perbedaan 0,2 GB / s berulang kali untuk ukuran file yang sama? Yang pasti akan menunjukkan perbedaan kinerja. Saya mungkin akan menguji ini sendiri ketika itu sesuai jadwal saya. Tapi itu sebabnya saya bertanya di sini, jadi saya mungkin bisa melewatinya dari daftar yang harus dilakukan jika ada orang lain yang sudah melakukannya.
Ivan Kovacevic
ya satu-satunya cara untuk mengetahui dengan pasti adalah dengan melakukan tes.
Michael Martinez
1

Jika Anda memiliki jumlah RAM yang cukup diinstal untuk meng-host berbagai buffer kernel, aplikasi menumpuk dan menumpuk, cache sistem file biasa dan semua file yang ingin Anda masukkan ke dalamnya, ramfstidak boleh lebih lambat daripada tmpfskarena tidak akan ada risiko I / O fisik dengan desain. I / O Fisik tidak diragukan lagi merupakan penyebab utama penurunan kinerja di area tersebut.

Namun, jika Anda belum memiliki jumlah RAM yang terpasang, menggunakan ramfsmungkin dan mungkin akan lebih lambat daripada tmpfsyang terakhir menggunakan heuristik memori virtual untuk memutuskan apa yang harus lebih baik pada disk (yaitu di area swap) vs apa yang harus di RAM sementara dengan itu tmpfs, data sistem file Anda macet pada RAM yang mungkin merupakan pemborosan sumber daya.

Untuk menjawab pertanyaan kedua Anda, ya, tmpfsakan memindahkan data lama terlebih dahulu ke area swap, bukan yang "panas" terakhir.

Jlliagre
sumber