Menggunakan tmpfs + partisi swap yang sangat besar untuk / tmp daripada sistem file biasa?

8

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.

Petr Pudlák
sumber
Jangan lupa tentang zram.
Ken Sharp

Jawaban:

12

Ini BUKAN Ide Bagus TM .

Anda akan baik-baik saja dengan /tmppartisi besar , dipasang seperti ini (dari Anda /etc/fstab)

tmpfs  /dev/tmp  tmpfs  defaults,nosuid,nodev,noexec,noatime,nodiratime,size=6000M 0 0

Dan Anda dapat menambahkan drive eksternal Anda sebagai partisi swap raksasa

/dev/sdb1  swap  swap  defaults  0 0

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 /tmpdengan sistem file non-journal dengan atime dan diratime dinonaktifkan (mis. ext2). Itu akan jauh lebih cepat daripada berurusan dengan mesin yang SWAPing

Fran
sumber
1
Ini adalah ide yang MENGERIKAN. Menggunakan tmpfs dan mengandalkannya untuk didorong untuk bertukar terdengar seperti ide ... tetapi kenyataannya adalah bahwa sistem Anda mungkin mendorong hal-hal yang salah untuk bertukar demi menjaga tmpfs dalam RAM fisik. Anda akan lebih baik hanya memasang partisi 500GB Anda ke / tmp dan selesai dengan itu. Saya sarankan menggunakan sistem file yang sangat ringan seperti xfs dari riserfs ... karena Anda dapat dengan cepat memformat ulangnya saat startup atau kapan pun diperlukan ... dan Anda benar-benar tidak memerlukan semua fitur canggih dari ext2 / 3/4 dan semacamnya.
TheCompWiz
3
Mengapa downvote? Saya tidak memaafkan tindakan ini - tetapi memberikan cara tentang bagaimana melakukannya. Pertanyaannya adalah apakah itu mungkin dan bagaimana melakukannya - bukan apakah itu ide yang baik atau tidak. Saya telah secara eksplisit menyatakan bahwa ini adalah A Bad Idea - dan bahwa solusi sebenarnya adalah membeli lebih banyak RAM jika dia membutuhkan tmpakses yang lebih cepat .
Fran
1
Ini adalah tempat untuk ide - ide bagus ... bukan solusi lakban & permen karet. Orang-orang datang ke sini untuk meminta bantuan ... dan bukan untuk ide-ide tentang bagaimana membuat hidup mereka menjadi neraka.
TheCompWiz
Saya mengedit jawaban saya sesuai dengan komentar Anda, terima kasih atas masukan Anda
Fran
3
Semua orang di sini tampaknya setuju bahwa ini adalah ide yang buruk. Namun, tmpfs.txt pada dokumentasi kernel mencantumkan ini sebagai salah satu kasus penggunaan untuk tmpfs. @ Fran, apakah Anda memiliki data untuk mendukung pernyataan menakutkan Anda bahwa itu akan menyebabkan meronta-ronta? Jelas ini tergantung pada apa yang akan berjalan / tmp.
migle
1

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.

Arnout
sumber
- jawaban yang masuk akal (yang ironisnya jauh lebih dalam dari yang lain)
poige
1

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-initadalah program yang mengotomatiskan pengaturan zram, yang merupakan perangkat blok ram terkompresi. Biasanya ada contoh dalam zram-initkonfigurasi untuk pemasangan /tmpsebagai zram. Ini akan menjadi seperti berikut ini

type0=/tmp
flag0= 
size0=524288 # 500G of logical space
mlim0=2G # 2G of memory
back0=/dev/loop0 # (or /dev/sdxN, your large slow drive)
notr0= 
maxs0=4 # maximum number of parallel processes for this device
algo0=zstd 
labl0=tmp # the label name
uuid0= 
args0= 

Ini 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.

Perkins
sumber