Saya memiliki server Linux dan saya memiliki partisi disk 500GB. Saya ingin memformatnya dan menggunakannya untuk / tmp. Server sesekali menjalankan beberapa tugas pemrosesan data besar sehingga bisa terjadi bahwa / tmp akan menampung GB data sementara.
Lalu saya mendapat ide bahwa alih-alih saya bisa menambahkannya sebagai partisi swap dan mount / tmp ke tmpfs. Apakah ide ini masuk akal?
Server memiliki 6GB RAM, sehingga dalam banyak kasus data di / tmp hanya akan ada dalam RAM, dengan keunggulan kecepatan yang jelas. Pertanyaannya adalah, bagaimana jika akan ada katakanlah 10-20GB data di / tmp, bagaimana sistem akan bekerja? Apa yang akan menjadi kinerja dibandingkan dengan sekadar / tmp dipasang ke partisi ext4? Terimakasih atas bantuannya.
Sunting: Jelas bahwa sistem akan mulai menukar memori ketika penggunaan tmpfs mencapai batas RAM. Tetapi apakah Linux cukup pintar untuk menukar data tmpfs dan menyimpan data "biasa" dalam RAM? Jika ya, maka saya kira itu bisa berperilaku wajar. Jika tidak, maka keseluruhan sistem akan sangat terpengaruh.
Jawaban:
Ini BUKAN Ide Bagus TM .
Anda akan baik-baik saja dengan
/tmp
partisi besar , dipasang seperti ini (dari Anda/etc/fstab
)Dan Anda dapat menambahkan drive eksternal Anda sebagai partisi swap raksasa
Ketika itu mencapai batasnya, mesin Anda akan mulai menukar halaman dari RAM ke disk - pada titik mana, rata-rata pemuatan akan melewati atap dan mesin akan terhenti.
Itu ide yang buruk untuk mengandalkan SWAP dengan cara apa pun, Anda akan lebih baik menjual drive 500GB Anda dan hanya membeli lebih banyak RAM - murah.
Singkatnya
Jika Anda benar-benar ingin menggunakan disk 500GB Anda, Anda bisa memasang disk 500GB Anda
/tmp
dengan sistem file non-journal dengan atime dan diratime dinonaktifkan (mis.ext2
). Itu akan jauh lebih cepat daripada berurusan dengan mesin yangSWAP
ingsumber
tmp
akses yang lebih cepat .Ini bisa menjadi ide yang masuk akal.
Menempatkan filesystem aktual di / tmp memang menimbulkan overhead, karena filesystem harus berusaha keras untuk memastikan bahwa data pada disk tidak rusak jika terjadi kegagalan sistem. Untuk a / tmp yang dibersihkan saat boot, itu jelas hanya overhead. Menggunakan tmpfs akan menghindari overhead itu.
Di sisi lain, sistem file juga memastikan bahwa file diatur pada disk dengan cara yang mengoptimalkan waktu akses - yaitu, mereka akan menghindari fragmentasi. Akses file sekuensial yang khas (sebagian besar) akan menghasilkan akses disk sekuensial, yang lebih efisien daripada akses acak. Efek ini lebih terasa pada harddisk berputar daripada pada SSD. Kombinasi swap + tmpfs tidak dapat dengan mudah melakukan ini, karena swap tidak mengetahui bagian memori mana dari file mana dan tmpfs tidak mengetahui bagaimana halaman dipetakan ke memori fisik atau ke disk. Untuk file besar, bagaimanapun, itu harus bekerja dengan baik, karena tmpfs dan swap mencoba untuk menjaga hal-hal yang berdekatan dalam kasus itu. Setidaknya, selama ada banyak ruang kosong di swap (jika tidak fragmentasi menendang), dan menulis terjadi cukup lambat sehingga mereka mendapat kesempatan untuk ditukar.
Jadi intinya adalah: itu tergantung, Anda harus mencoba kedua opsi untuk melihat mana yang terbaik.
Saat Anda memasang tmpfs, jangan lupa untuk mengatur ukuran secara eksplisit. Standarnya adalah setengah dari RAM fisik, jadi hanya 3GB.
sumber
Ini sebenarnya ide yang baik ketika Anda biasanya tidak memiliki banyak data
/tmp
, tetapi sesekali mengkonsumsi gigabyte tak terbatas untuk durasi terbatas. Masalahnya adalah sistem swap linux tidak cukup tahu tentang use case Anda untuk melakukannya dengan benar. Ini umumnya akan memprioritaskan dumping atau menukar cache di atas halaman program, tetapi itu tidak terlalu membantu. Dimungkinkan untuk menggunakan cgroup untuk mencapai tujuan Anda, itu adalah ketika data awal disimpan dalam memori program, tetapi saya tidak yakin bagaimana mengkonfigurasi cgroup dalam kasus ini (saya kira Anda bisa menggunakan tmpfs FUSE ...) . Untungnya, itu tidak diperlukan. Anda bisa mendapatkan perilaku yang diinginkan dengan zram dan perangkat pendukung.zram-init
adalah program yang mengotomatiskan pengaturan zram, yang merupakan perangkat blok ram terkompresi. Biasanya ada contoh dalamzram-init
konfigurasi untuk pemasangan/tmp
sebagai zram. Ini akan menjadi seperti berikut iniIni akan memampatkan dan menyimpan dalam memori apa pun yang ditulis ke / tmp. Kompresi biasa sekitar 50%. Ini akan mengkonsumsi paling banyak 2G memori fisik. Jika kehabisan memori fisik, itu akan mengambil file tertua dan mendorongnya ke perangkat pendukung, masih terkompresi. Perhatikan bahwa itu menimbulkan beberapa overhead CPU untuk kompres dan dekompresi file, tetapi ini biasanya diimbangi oleh berkurangnya IO.
Pengaturan serupa dapat digunakan bersama dengan cgroup untuk membiarkan proses tertentu bertukar tanpa mempengaruhi kinerja sistem secara keseluruhan.
sumber