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:
- Jika saya tidak memiliki swap, saya mendapatkan kesalahan 'kehabisan memori'
- 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.
mmap
untuk mengalokasikan halaman-halaman pengaturan kerja Anda. Maka jumlah swap Anda akan persis jumlah yang Anda butuhkan untuk proses Anda.discard
SSD. 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).Jawaban:
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:
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.
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.)
sumber
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.
sumber
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:
Ketika Anda tidak membutuhkannya lagi:
Catatan:
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.
Ada beberapa cara untuk membuat Linux gagal ketika tidak ada memori yang tersedia, yaitu dengan memanipulasi nilai-nilai entri sysctl ini:
sumber
If I have no swap, I get an 'out of memory' error
- yaitufalse
- 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.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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber