Tukar ukuran partisi pada komputer RAM 64 GB untuk pekerjaan yang intensif memori

36

Saya memiliki 64 GB RAM dan 240 GB SSD di komputer saya, yang akan saya gunakan untuk perhitungan intensif memori (pembelajaran mesin, penambangan data, dll.). Sebagian besar saran yang saya temukan di Internet adalah sekitar 2-4-8 GB komputer RAM, dan mereka merekomendasikan ukuran partisi swap RAM 2x (jadi 128 GB).

Apakah masuk akal untuk membuat partisi swap 128 GB? keuntungan apa yang saya dapatkan dengan membuat partisi swap besar?

Apakah saya mengerti benar bahwa, jika saya kehabisan RAM fisik:

  1. Jika saya tidak memiliki swap, saya mendapatkan kesalahan 'kehabisan memori'
  2. Jika saya memiliki swap, beberapa halaman RAM akan disalin ke partisi swap, dan program akan terus berjalan (walaupun lebih lambat).

Beberapa orang mengatakan itu adalah ide yang buruk untuk melakukan swap pada SSD, karena memiliki jumlah siklus baca / tulis yang terbatas. Seberapa cepat menggunakan swap akan menghabiskan siklus membaca / menulis SSD (sejauh yang saya tahu, ini tentang 50000 menulis IOPS)?

Saya menggunakan Linux ( Ubuntu 14.04 (Trusty Tahr)).

Akan menetapkan swap 16 GB untuk saat ini, karena seharusnya sudah cukup (misalnya, RedHat menyarankan 4 GB), dan ruang disk 16 GB sebenarnya bukan masalah besar.

wih
sumber
1
Alih-alih mengandalkan swap secara eksplisit, jika Anda tahu ukuran pekerjaan Anda diatur di muka, atau bersedia melakukan sedikit lebih banyak manajemen memori tingkat rendah, pertimbangkan mmapuntuk mengalokasikan halaman-halaman pengaturan kerja Anda. Maka jumlah swap Anda akan persis jumlah yang Anda butuhkan untuk proses Anda.
lembut
5
Saran merekomendasikan "dua kali jumlah RAM" tanggal kembali ke masa lalu, ketika komputer memiliki sedikit RAM. Beberapa dokumen menyatakan bahwa ini terutama berlaku untuk komputer dengan <2GB RAM. Di atas itu, ukuran swap sebagian besar terkait dengan apa yang Anda lakukan dengan mesin.
John WH Smith
Lihat juga Q & a - Kesalahan Server ini - jika Anda menjalankan Java (dan mungkin aplikasi lain), Anda ingin memastikan bahwa Anda memiliki cukup swap untuk meningkatkan alokasi memori mereka. Saya pribadi tetap menggunakan standar RHEL RAM + 2 untuk partisi swap saya
warren
2
Sayang sekali sebagian besar komentar di sini telah dihapus. Menambahkan kembali: Perlu disebutkan, secara kebetulan, bahwa jika kernel Anda mendukungnya, Anda mungkin ingin memasang partisi swap Anda dengan discardSSD. Juga (dan ini disebutkan dalam jawaban di bawah), jangan lupa Anda dapat menggunakan file alih-alih partisi untuk manajemen yang lebih mudah (dan tidak ada performa yang dicapai pada SSD karena misalnya fragmentasi).
Jason C
1
Jika Anda memiliki aplikasi yang intensif memori, seperti pembelajaran SVM, dan Anda kehabisan ram dan mulai bertukar, semuanya akan menjadi terlalu lamban untuk dipulihkan dan satu-satunya langkah Anda yang tersedia adalah menarik steker (yang terjadi pada saya beberapa kali) . Anda mungkin ingin proses Anda terbunuh OOM jika mulai bertukar, sehingga Anda setidaknya dapat mengubah hal-hal dan memulai lagi. Mungkin dengan drive SSD tidak begitu buruk. Saya akan memeriksa pengaturan OOMK juga - itu terjadi pada saya di Ubuntu bahwa kadang-kadang proses mendapatkan OOM-
kill

Jawaban:

36

Anda mungkin hanya perlu sedikit swap. Ketika Anda memiliki RAM yang cukup untuk perangkat kerja tipikal komputer Anda, yang saya yakin Anda lakukan, Anda hanya perlu menukar untuk dua hal:

  1. Anda perlu swap untuk mendapatkan informasi yang kemungkinan tidak akan pernah diakses dari RAM untuk membebaskan lebih banyak ruang untuk cache disk. Banyak aplikasi berjalan pada startup sistem dan tidak akan pernah diakses lagi. Anda tidak ingin ada halaman yang kotor di RAM selamanya. Jadi, Anda perlu swap untuk menahannya.

  2. Anda perlu swap untuk menutup alokasi yang tidak akan pernah terisi. Ruang ini harus tersedia, meskipun tidak akan digunakan. Tanpa itu, sistem harus menolak untuk mengalokasikan memori bahkan ketika itu memiliki banyak RAM fisik gratis karena tidak memiliki backing store untuk memungkinkan semua alokasi untuk digunakan sekaligus.

Tidak satu pun dari ini membutuhkan sejumlah besar swap. 16GB, misalnya, harus lebih dari cukup. Tujuannya bukan untuk membiarkan Anda menjalankan perangkat kerja yang lebih besar dengan mengorbankan kecepatan. Tujuannya adalah agar Anda menggunakan 64GB Anda secara efektif dan tidak harus menyumbatnya dengan sampah atau mencadangkannya untuk kasing tepi yang tidak akan pernah terjadi.

(Saya setuju dengan Bert bahwa 4GB kemungkinan besar cukup.)

David Schwartz
sumber
2
@wrwt Pasang partisi swap Anda di akhir drive (atau setidaknya setelah partisi data Anda), itu akan membuat mengubah ukurannya lebih cepat dan kurang intensif menulis jika Anda pernah memilih untuk menyesuaikannya (lebih khusus itu akan membuat mengubah ukuran partisi data untuk mengakomodasi itu lebih sederhana, karena Anda tidak harus memindahkan awal). Tidak ada hubungan antara posisi dan kinerja pada SSD karena kadang-kadang ada pada drive mekanis.
Jason C
Sementara jawaban ini mungkin cukup untuk sebagian besar penggemar, maka itu adalah saran yang buruk untuk server nyata - jawabannya tergantung pada bagaimana aplikasi ditulis, karena kehabisan ruang swap akan menyebabkan pembunuh kehabisan memori untuk menendang dan mengakhiri proses secara acak (ya Anda membacanya kan; "acak")
Soren
3
@ Koren Ini superuser, bukan serverfault. ;) Memang benar bahwa pengaturan ruang swap bukan satu-satunya keputusan yang perlu Anda buat untuk "server nyata". Anda juga perlu membuat keputusan tentang hal-hal seperti overcommit, Anda mungkin perlu menyetel pembunuh OOM, dan sebagainya. (Dan jawabannya menjadi jauh lebih rumit jika Anda mengharapkan perangkat kerja Anda melebihi RAM fisik. Tetapi hampir tidak ada yang mengoperasikan mesin seperti itu lagi.)
David Schwartz
5
Linux akan overcommit memori bahkan tanpa swap diaktifkan. Ini hanya akan memproses OOMK ketika terlalu banyak memori benar-benar digunakan. Jadi poin kedua jawabannya salah.
Ruslan
1
@MaciejPiechotka Atau gunakan file.
Jason C
29

RedHat merekomendasikan 4 GB pada mesin dengan 64 GB .

Namun, pertukaran ukuran lebih merupakan seni daripada sains. Tergantung pada mesin apa yang digunakan, berapa banyak ruang disk dan memori yang Anda miliki, dan faktor-faktor lainnya. Ingat, Anda selalu dapat menambahkan lebih banyak swap nanti.

Menggunakan aturan memori fisik 2X sudah usang dengan jumlah sistem memori yang ada saat ini. Tetapi menjalankan dengan zero swap tidak disarankan kecuali Anda tahu apa yang Anda lakukan. Rekomendasi 4 GB adalah titik awal yang baik.

Bert
sumber
12
+1 untuk paragraf terakhir. Rekomendasi 2x tanggal kembali ke saat kebanyakan komputer tidak memiliki ram cukup untuk menghindari bertukar dalam penggunaan normal. Secara subyektif, dari menggunakan komputer, batas 2x tampaknya telah dipilih sebagai angka yang cukup besar sehingga komputer akan menjadi sangat lambat sebelum kehabisan swap.
Dan Neely
1
2X juga berfungsi dengan baik ketika sistem memiliki 4GB / 8GB RAM dan ratusan gigabytes ruang disk. Tentu, itu mungkin lebih dari yang dibutuhkan, tetapi apa salahnya? Tetapi sekarang sistem memiliki 16GB / 64GB RAM dan 128GB / 256GB SSD, kerugiannya jelas.
David Schwartz
12

Di Linux, Anda memerlukan swap yang cukup sehingga total memori virtual yang tersedia (RAM + SWAP) cukup untuk semua proses yang ingin Anda jalankan sekaligus dan jejak virtual maksimumnya.

Jika Anda memiliki lebih sedikit swap daripada ini, atau tidak ada swap sama sekali, maka situasi berikut terjadi: sistem kehabisan memori mencoba mengalokasikan halaman. Tapi, ini masih kegagalan lunak meskipun tidak ada swap, karena sistem memiliki banyak halaman "korban" yang dapat dihapus untuk membuat ruang: yaitu, halaman semua pemetaan memori yang didukung file, seperti file executable dan perpustakaan bersama!

Karena sistem Anda menuntut lebih banyak dan lebih banyak ruang untuk data (yang tidak dapat ditukar), itu akan semakin mengevakuasi kode yang dapat dieksekusi (shared library dan executable), yang mengarah ke meronta-ronta yang mengerikan, karena set kerja dipangkas menjadi set yang lebih ketat dan lebih ketat dari halaman.

Swap space melunakkan masalah ini dengan menyediakan tempat bagi halaman anonim (bukan file yang dipetakan) untuk ditukar: halaman yang digunakan untuk alokasi memori, sehingga kode yang dapat dieksekusi dapat tetap berada dalam memori.

Meski begitu, jika Anda tidak sering menjalankan tugas-tugas intensif-memori, Anda mungkin bisa lolos dari menjalankan swapless sebagian besar waktu, dan secara manual mengkonfigurasi file swap (bukan partisi khusus) ketika Anda membutuhkannya. Untuk membuat file swap dengan cepat, jadikan root dan:

dd if=/dev/zero of=/path/to/swapfile size=$((1024 * 1024)) count=32768  # 32 Gb.
mkswap /path/to/swapfile
swapon /path/to/swapfile

Ketika Anda tidak membutuhkannya lagi:

swapoff /path/to/swapfile
rm /path/to/swapfile

Catatan:

  1. Anda pasti tidak perlu mengkonfigurasi setidaknya swap sebanyak yang Anda punya RAM. Aturan praktis ini berasal dari sistem operasi di mana itu merupakan persyaratan yang sulit karena cara swapping dirancang.

  2. Ada beberapa cara untuk membuat Linux gagal ketika tidak ada memori yang tersedia, yaitu dengan memanipulasi nilai-nilai entri sysctl ini:

    vm.overcommit_memory
    vm.overcommit_ratio
    
Kaz
sumber
2
+1 untuk benar-benar merujuk pada parameter konfigurasi kernel - Kuncinya ada di bagian pertanyaan If I have no swap, I get an 'out of memory' error- yaitu false- kebenarannya adalah ketika Anda kehabisan ruang swap, pembunuh kehabisan memori akan menendang dan membunuh proses acak untuk membebaskan ruang - sehingga jumlah ruang swap yang diperlukan tergantung pada bagaimana aplikasi Anda ditulis.
Soren
@Soren Kemungkinan sebagian besar RAM akan diisi dengan data aktual, sehingga pembunuh kehabisan memori tidak akan membuat banyak perbedaan. Terima kasih untuk 'kebenaran'.
Wrwt
3

Ada lebih banyak pertimbangan. Jika Anda perlu / ingin menunda untuk bekerja maka Anda perlu setidaknya ukuran RAM Anda dan kemudian beberapa. Namun kedengarannya tidak mungkin Anda membutuhkannya karena Anda tampaknya terutama membangun kuda kerja komputasi.

Dalam hal ini harap pertimbangkan untuk menggunakan file swap daripada partisi. Anda tidak perlu terlalu khawatir tentang ukuran, membuang atau menambahkannya nanti tidak memerlukan partisi ulang. Tidak ada penalti kinerja (terlihat) menggunakan file di atas partisi. Jika Anda membutuhkannya, lihat ukurannya dan ini juga akan memberi Anda petunjuk yang baik.

kasta
sumber
1
@ Ka, saya pikir Anda berbicara tentang sesuatu yang berbeda dari kasta. kaste mengatakan bahwa jika Anda ingin dapat menangguhkan / hibernasi komputer Anda, matikan, dan ambil di mana Anda tinggalkan nanti, Anda perlu ruang swap yang cukup untuk menyimpan semua RAM Anda (kalau tidak kemana perginya?).
amalloy
@allalloy Jika Anda menyimpan RAM di ruang swap Anda, kemana perginya swap (mengingat bahwa swap diperlakukan sebagai memori - jika hilang sama dengan kehilangan ram).
NPSF3000
2

Beban kerja yang ingin Anda terapkan pada mesin membutuhkan sejumlah memori untuk dijalankan (ingat untuk menambahkan cukup ke persamaan untuk menangani beban puncak), dan Anda harus mengkonfigurasi komputer Anda untuk memiliki setidaknya itu.

Sistem operasi modern menyediakan memori virtual sebagai kombinasi dari memori fisik dan ruang swap, jadi jika Anda membutuhkan lebih banyak memori daripada yang tersedia mesin Anda harus menambahkan ruang swap yang cukup untuk mengisi celah. Yaitu jika Anda membutuhkan 80 GB maks, dan mesin memiliki 64 GB Anda perlu 16 GB swap.

Biasanya installer sistem operasi meminta Anda untuk membuat area swap awal (karena ini adalah yang paling sederhana dan bahkan memungkinkan komputer kecil untuk menginstal), dan telah ditemukan bahwa aturan praktis yang baik untuk operasi Unix yang khas adalah memiliki ukuran memori virtual menjadi tiga kali memori fisik, jadi ini biasanya disarankan. Namun, Anda tahu lebih banyak tentang pola penggunaan sehingga Anda dapat mengubahnya jika perlu.

Tidak ada yang salah dengan bekerja tanpa swapspace jika tekanan memori Anda selalu kurang. Linux akan secara transparan menggunakan memori yang tidak digunakan sebagai cache disk.

Thorbjørn Ravn Andersen
sumber
2

Gagasan yang jauh lebih baik daripada memiliki "banyak pertukaran" adalah (mengatur ulang) pekerjaan Anda sehingga set kerja sesuai dengan memori, kemudian menggunakan sistem file untuk menyimpan dan mengambil pekerjaan yang Anda lakukan. Yaitu, alih-alih memaksa OS untuk menebak seperti apa pola penggunaan memori Anda, gunakan apa yang Anda ketahui tentang masalah Anda untuk mengontrol pola penggunaan memori Anda.

Sebagai contoh acak yang langsung relevan bagi saya musim panas ini ... Dalam menerapkan saringan kuadrat, kita perlu array besar (tampaknya) berdekatan untuk menandai (dengan beberapa algoritma rumit yang detailnya sebenarnya tidak masalah untuk contoh ini). Array harus ~ 100 Giga-entri, sehingga mudah dalam kisaran 1 TB. Saya bisa berpura-pura mengalokasikan itu dan membiarkan OS melakukan sejumlah besar pertukaran tidak efisien untuk mendapatkan halaman masuk dan keluar dari RAM untuk mendukung semua menulis berurutan melalui array. Alih-alih melakukan sesuatu yang bodoh, saya telah mengatur untuk mengalokasikan array yang jauh lebih kecil yang pas di memori dan kemudian menggunakan kembali array kecil itu untuk secara iteratif menutupi sisa array besar dalam irisan. Saya juga telah menghapus OS, menanggalkan set layanan yang berjalan, mengganti shell,

SSD mungkin cepat, tetapi hampir tidak secepat mengatur perhitungan Anda untuk melakukan serangkaian operasi yang sama tanpa pernah menunda untuk bertukar.

Eric Towers
sumber
1

Seperti yang disebutkan lainnya, partisi swap adalah ide yang baik bahkan jika Anda memiliki banyak RAM. Ini bukan ide yang baik untuk meletakkannya di SSD; sering menulis partisi swap pada akhirnya akan aus drive Anda.

Jika Anda memiliki port USB 3.0 cadangan, saya sarankan menggunakan flash drive untuk ruang swap Anda. Ada banyak flash drive berkecepatan tinggi yang secepat SSD Anda, tetapi jauh lebih murah - cukup murah untuk diganti jika memang mulai gagal. Pencarian cepat di Amazon menunjukkan bahwa ada banyak flash drive USB 3.0 16 GB yang layak dengan harga di bawah $ 20, dan bahkan beberapa drive 64 GB di bawah $ 60.

Partisi seluruh flash drive sebagai ruang swap, dan Anda akan memiliki ruang swap jika Anda membutuhkannya, dan ketenangan pikiran mengetahui bahwa memori yang berulang kali ditulis mudah (dan murah) dapat diganti.

ArmanX
sumber
3
+1 untuk tidak menukar ke SSD, -1 untuk menukar ke komponen yang memiliki masa hidup yang sangat singkat bila digunakan seperti itu.
Aviator45003
1
@TC benar, ArmanX - jika Anda mencoba menghindari menggunakan flash (SSD), mengapa Anda menggunakan flash pada USB? Itu tidak rasional.
warren
2
@TC: Tidak menggunakan SSD untuk swap karena memakai medium adalah legenda urban yang tidak bisa dibenarkan. Bertukar tidak terjadi "sepanjang waktu", tetapi jarang. Juga, ini adalah sesuatu yang telah diteliti secara ekstensif di Microsoft setelah rilis Win7 dengan hasil bahwa pola akses swap yang umum cukup dapat diterima untuk SSD (itu Windows, bukan Ubuntu, tetapi kemungkinan Linux tidak berkinerja lebih buruk). Anda memiliki seratus (atau ribuan) kali lebih banyak operasi penulisan yang mengurangi SSD Anda karena file log konyol yang tidak pernah dibaca siapa pun (biasanya menyinkronkan setiap baris).
Damon
Logikanya cacat: jika thumbdrive memang secepat SSD, mengapa lebih murah?
Agent_L
Itu keseimbangan. Di satu sisi, itu ide yang baik untuk memiliki file swap. Di sisi lain, jika file swap tidak aus SSD (yang, Anda benar, mungkin tidak masalah), akan lebih baik menggunakan pengganti yang murah - dan flash drive seharga $ 20 jauh lebih baik daripada SSD dengan harga lebih dari $ 100.
ArmanX
1

Anda akan baik-baik saja bahkan dengan 1GiB (dan kemungkinan lebih sedikit) dari swap. Komputer kerja saya biasanya menggunakan tidak lebih dari 140-150 MiB. Satu gigabyte memiliki banyak ketentuan untuk itu.
Kecuali jika Anda melakukan tugas komputasi yang membutuhkan kumpulan data dalam ratusan gigabyte dan (yang ini penting!) Data diakses dengan cara akses yang kurang lebih sekali akses, Anda tidak akan pernah ingin memiliki pertukaran yang jauh lebih besar dari itu. Tetapi sekali lagi, hanya pemetaan memori datafile bekerja sama baiknya untuk aplikasi itu.

Tetapi lebih banyak pertukaran membantu lebih banyak, bukan? Lebih banyak hal selalu lebih baik!

Pertimbangkan perbedaan apa yang swap, katakanlah, 16GiB akan buat (atau pikirkan 64GiB). Jika Anda tidak pernah menggunakan 16GiB ini, Anda sebaiknya tidak menyisihkannya sejak awal. Tetapi jika Anda menggunakannya, apa yang terjadi? Disk, dibandingkan dengan memori utama, sangat lambat. Bahkan dengan SSD SATA-600, mentransfer 16GiB membutuhkan waktu antara 30 dan 40 detik, dan 2-4 kali lebih lama pada beberapa konfigurasi lainnya.
Sekarang seseorang pasti akan keberatan bahwa Anda agak paging masuk dan keluar selusin halaman 4kiB, bukan 16GiB sekaligus. Meskipun itu benar, intinya tetap ada. Jika Anda hanya perlu menukar masuk dan keluar beberapa halaman, Anda tidak perlu swap 16GiB, tetapi jika Anda memang membutuhkan swap 16GiB, maka Anda juga akan mentransfernya (dengan satu atau lain cara).

Secara teori, 99,9% dari semua pengguna bahkan dapat menggunakan mesin 64GiB (atau mesin 8 + GiB) tanpa swap apa pun, dan kemungkinan besar tidak pernah melihat sesuatu yang hilang. Namun, ini tidak disarankan.
Pertama, ini kurang optimal karena sistem operasi memiliki lebih sedikit pilihan dalam apa yang dapat dibuang ketika kehabisan memori fisik. Ada dua hal yang bisa dilakukan: Menukar sesuatu yang tidak digunakan, atau membuang halaman dari cache buffer. Jika Anda tidak memiliki swap, hanya ada satu hal yang dapat dilakukan. Membuang halaman dari cache buffer tidak berbahaya, tetapi hal itu dapat mempengaruhi kinerja.
Kedua, pemetaan anonim pribadi mungkin gagal jika tidak ada swap. Itu biasanya tidak akan terjadi, tetapi pada akhirnya ketika tidak ada cukup memori fisik yang tersedia untuk memuaskan mereka semua, dan tidak ada swap, sistem operasi hanya memiliki salah satu dari pilihan ini, kecuali ...
Ketiga, pembunuh OOM yang ditakuti dapat menendang Yang berarti proses yang kurang lebih acak akan terbunuh. Tidak terima kasih. Ini bukan sesuatu yang Anda inginkan terjadi.

Dengan itu, saran seperti Anda memerlukan swap X kali jumlah RAM yang diinstal berasal dari orang yang mengulangi sesuatu yang mereka dengar (dan tidak mengerti!) Dari seseorang yang mengulangi sesuatu yang mereka dengar (dan tidak mengerti!) Puluhan tahun lalu.
Aturan "use 2X your RAM" adalah aturan praktis yang mudah diingat pada 1980-an dan 1990-an, itu tidak pernah menjadi "kebenaran emas" (hanya sesuatu yang bekerja OK untuk sebagian besar pengguna), dan itu tidak berlaku sama sekali saat ini .

Anda harus memiliki jumlah swap yang masuk akal yang dapat Anda beli dengan mudah (katakanlah, satu gigabyte), sehingga OS dapat mengeluarkan beberapa hal yang basi, dan agar dunia tidak segera berakhir ketika Anda pernah meminta sedikit lebih banyak memori. Tapi begitulah.

Damon
sumber