Seberapa amankah meningkatkan tmpfs ke lebih dari memori fisik?

11

Server saya memiliki 2GB RAM dan 120GB SSD, ditambah beberapa array RAID untuk penyimpanan. OS adalah Debian 8 (Linux 3.16).

Saya memiliki aplikasi intens MySQL yang tmpdir= /run/mysqld, yang tmpfsdikonfigurasi oleh Debian melalui /etc/default/tmpfs:

# Size limits.  Please see tmpfs(5) for details on how to configure
# tmpfs size limits.
TMPFS_SIZE=40%VM

Ini dulu 20%VM, yaitu sekitar 384M. Saya berlari melawan beberapa no space left on device, jadi saya sudah meningkatkannya 40%VM, tetapi bahkan dengan sekitar 763M masih terlalu kecil.

Sekarang saya sekarang saya harus menambahkan lebih banyak RAM, tetapi karena penasaran, saya ingin tahu batas di sini.

  • /dev/sdd1sudah terpasang /memiliki sekitar 50GB gratis, dan cukup cepat (Samsung 850 EVO SSD)
  • /dev/sdd5 adalah partisi swap saya, 3.7G (ID tipe fdisk 82)
  • TMPFS_SIZEdiatur ke 40%VM, artinya /run763M

Sekarang saya tahu bahwa tmpfs dapat bertukar, yang baik untuk saya. Saya ingin MySQL menulis ke RAM kapan pun memungkinkan, tetapi jika membutuhkan lebih banyak memori, saya dapat memungkinkan sistem untuk menukarnya di SSD.

Jadi dengan pengaturan saya, bisakah saya mendorong /rununtuk menjadi:

  • 300 juta besar? Iya. Itu standarnya.
  • 1.5GB besar? Ya, coba, MySQL menggunakan hingga 1,3GB di atasnya dan sistem bekerja seperti pesona. Tapi itu masih kurang dari setengah memori fisik + partisi swap.
  • 2.5GB besar? Ini lebih dari memori fisik, tetapi kurang dari setengah memori fisik + partisi swap saya.
  • 4GB besar? Ini akan cocok dengan setengah fisik + swap
  • Lebih? suka 10GB? dapatkah menggunakan ruang kosong /untuk bertukar lebih banyak?

Saya kira aturan praktis untuk keamanan adalah TMPFS_SIZEtidak lebih besar dari swap + setengah memori fisik. Bisakah saya melampaui ini tanpa meningkatkan partisi swap?

Juga, apakah mungkin untuk menempatkan 200%VMdi /etc/default/tmpfs? Saya sudah membaca tmpfs(5)tanpa mengetahui apakah saya bisa memberi> 100% pada ini.

Terakhir, haruskah saya melakukannya /etc/fstabdan tidak menyentuh /etc/default/tmpfs?

(untuk mengetahui bahwa saya hanya melakukannya mount -o remount, saya belum me-reboot server)

Sunting: untuk pertanyaan terakhir, saya tahu itu dapat / dapat dimodifikasi oleh /etc/fstab(lihat kutipan di bawah dari halaman manual), namun saya ingin mengetahui praktik terbaik, karena saya belum pernah menyentuh apa pun /etc/defaultsejauh ini.

Opsi pemasangan yang lebih kompleks dapat digunakan dengan membuat entri yang sesuai di / etc / fstab.

Benoit Duffez
sumber
Pertanyaan menarik. Saya kira ini mungkin juga sangat terkait dengan pengaturan overcommit memori.
phk
Tampaknya ukuran tmpf maksimum adalah fisik + swap. Saya telah melihat ini di kernel docs .
Benoit Duffez

Jawaban:

8

Saya pikir saya bisa mengujinya, jadi saya berlari:

sudo mount -o remount,size=2800M /run

Bekerja seperti pesona:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G   45M  2.7G   2% /run

Jadi saya mengisinya sedikit:

fallocate -l 1G /run/test.img
fallocate -l 1G /run/test2.img
fallocate -l 500M /run/test3.img

Hasil:

Filesystem      Size  Used Avail Use% Mounted on
tmpfs           2.8G  2.6G  208M  93% /run

Sistem masih berjalan dan berjalan. Ketersediaan swap turun, yang membuktikannya digunakan:

penurunan ketersediaan swap

  • 17:10: buat 2,5 GB file di /run
  • 17:20: hapus file 500M

Total swap dikurangi dengan jumlah yang diambil oleh /run.

Saya akan menguji 10GB pada VM, karena saya tidak tahu apakah kernel akan menolak remount atau hanya memiliki perilaku yang tidak terduga.

Saya masih mencari jawaban yang sebenarnya, tetapi cara pragmatis menunjukkannya berhasil.

Benoit Duffez
sumber