Saya tidak khawatir tentang penggunaan RAM (seperti yang saya punya cukup) atau tentang kehilangan data jika terjadi kecelakaan yang tidak disengaja (karena kekuatan saya didukung, sistem ini dapat diandalkan dan data tidak kritis). Tetapi saya melakukan banyak pemrosesan file dan dapat menggunakan beberapa peningkatan kinerja.
Itu sebabnya saya ingin mengatur sistem agar menggunakan lebih banyak RAM untuk membaca dan menulis caching sistem file, untuk mengambil file secara agresif (mis. Baca-depan seluruh file yang diakses oleh aplikasi jika file berukuran waras atau setidaknya baca-depan sebagian besar itu sebaliknya) dan untuk menyiram menulis buffer kurang sering. Bagaimana cara mencapai ini (mungkinkah)?
Saya menggunakan sistem file ext3 dan ntfs (saya menggunakan ntfs banyak!) Dengan XUbuntu 11.10 x86.
sudo mount -o ro,nobarrier /path/to/mountpoint
atau sesuaikan/etc/fstab
untuk memasukkannobarrier
semua sistem file yang bersedia Anda korbankan untuk peningkatan kinerja. Namun, jika perangkat penyimpanan Anda memiliki baterai internal seperti Intel 320 SSD series, menggunakannobarrier
tidak menyebabkan kehilangan data.Jawaban:
Meningkatkan kinerja cache disk secara umum lebih dari sekedar meningkatkan ukuran cache sistem file kecuali jika seluruh sistem Anda cocok dengan RAM dalam hal ini Anda harus menggunakan drive RAM (
tmpfs
bagus karena memungkinkan jatuh kembali ke disk jika Anda membutuhkan RAM dalam beberapa kasus) untuk penyimpanan runtime (dan mungkin skrip initrd untuk menyalin sistem dari penyimpanan ke drive RAM saat startup).Anda tidak memberi tahu apakah perangkat penyimpanan Anda adalah SSD atau HDD. Inilah yang saya temukan bekerja untuk saya (dalam kasus saya
sda
adalah HDD terpasang pada/home
dansdb
SSD dipasang pada/
).Pertama-tama optimalkan bagian load-stuff-from-storage-to-cache:
Ini pengaturan saya untuk HDD (pastikan AHCI + NCQ diaktifkan di BIOS jika Anda memiliki matikan):
Perlu dicatat untuk kasus HDD tinggi
fifo_expire_async
(biasanya menulis) dan panjangslice_sync
untuk memungkinkan satu proses mendapatkan throughput tinggi (diaturslice_sync
ke angka yang lebih rendah jika Anda menekan situasi di mana beberapa proses menunggu beberapa data dari disk secara paralel). Ituslice_idle
selalu merupakan kompromi untuk HDD tetapi pengaturannya di suatu tempat dalam kisaran 3-20 akan baik-baik saja tergantung pada penggunaan disk dan firmware disk. Saya lebih suka menargetkan nilai rendah tetapi pengaturan terlalu rendah akan merusak throughput Anda. Thequantum
pengaturan tampaknya mempengaruhi throughput yang banyak tapi mencoba untuk menjaga ini serendah mungkin untuk menjaga latency pada tingkat yang masuk akal. Pengaturan yangquantum
terlalu rendah akan merusak throughput. Nilai dalam kisaran 3-8 tampaknya berfungsi baik dengan HDD. Latensi kasus terburuk untuk dibaca adalah (quantum
*slice_sync
) + (slice_async_rq
*slice_async
) ms jika saya memahami perilaku kernel dengan benar. Async sebagian besar digunakan oleh menulis dan karena Anda bersedia menunda menulis ke disk, atur keduanyaslice_async_rq
danslice_async
ke angka yang sangat rendah. Namun, pengaturanslice_async_rq
nilai yang terlalu rendah dapat menghentikan bacaan karena menulis tidak dapat ditunda setelah membaca lagi. Konfigurasi saya akan mencoba untuk menulis data ke disk paling setelah 10 detik setelah data telah diteruskan ke kernel tapi karena Anda dapat mentolerir hilangnya data pada penurunan daya juga mengaturfifo_expire_async
untuk3600000
memberitahu bahwa 1 jam apa-apa untuk penundaan ke disk. Tetapslice_async
rendah, karena jika tidak, Anda bisa mendapatkan latensi baca yang tinggi.The
hdparm
perintah diperlukan untuk mencegah AAM dari membunuh banyak kinerja yang AHCI + NCQ memungkinkan. Jika disk Anda mengeluarkan terlalu banyak suara, lewati saja ini.Ini pengaturan saya untuk SSD (Intel 320 series):
Di sini perlu diperhatikan nilai rendah untuk pengaturan slice yang berbeda. Pengaturan paling penting untuk SSD adalah
slice_idle
yang harus diatur ke 0-1. Mengaturnya ke nol memindahkan semua keputusan pemesanan ke NCQ asli sementara mengaturnya ke 1 memungkinkan kernel untuk memesan permintaan (tetapi jika NCQ aktif, perangkat keras dapat menimpa pemesanan kernel sebagian). Uji kedua nilai untuk melihat apakah Anda dapat melihat perbedaannya. Untuk Intel 320 series, tampaknya pengaturanslide_idle
untuk0
memberikan throughput terbaik tetapi pengaturan untuk1
memberikan latensi keseluruhan terbaik (terendah).Untuk informasi lebih lanjut tentang merdu ini, lihat http://www.linux-mag.com/id/7572/ .
Sekarang kita telah mengkonfigurasi kernel untuk memuat hal-hal dari disk ke cache dengan kinerja yang masuk akal, saatnya untuk menyesuaikan perilaku cache:
Menurut tolok ukur yang telah saya lakukan, saya tidak akan repot mengatur baca depan
blockdev
sama sekali. Pengaturan default kernel baik-baik saja.Atur sistem untuk lebih suka menukar data file dengan kode aplikasi (ini tidak masalah jika Anda memiliki cukup RAM untuk menyimpan seluruh sistem file dan semua kode aplikasi dan semua memori virtual yang dialokasikan oleh aplikasi dalam RAM). Ini mengurangi latensi untuk bertukar di antara berbagai aplikasi melebihi latensi untuk mengakses file besar dari satu aplikasi:
Jika Anda lebih suka menyimpan aplikasi hampir selalu dalam RAM, Anda dapat mengatur ini ke 1. Jika Anda menetapkan ini ke nol, kernel tidak akan bertukar sama sekali kecuali benar-benar diperlukan untuk menghindari OOM. Jika memori Anda terbatas dan bekerja dengan file besar (mis. Mengedit video HD), maka mungkin masuk akal untuk mengatur ini mendekati 100.
Saya saat ini (2017) lebih suka tidak memiliki swap sama sekali jika Anda memiliki cukup RAM. Tanpa swap biasanya akan kehilangan 200-1000 MB RAM pada mesin desktop yang berjalan lama. Saya rela berkorban banyak untuk menghindari latensi skenario terburuk (menukar kode aplikasi ketika RAM penuh). Dalam prakteknya, ini berarti saya lebih suka OOM Killer daripada bertukar. Jika Anda mengizinkan / perlu bertukar, Anda mungkin ingin menambah
/proc/sys/vm/watermark_scale_factor
juga, untuk menghindari latensi. Saya akan menyarankan nilai antara 100 dan 500. Anda dapat mempertimbangkan pengaturan ini sebagai perdagangan penggunaan CPU untuk latensi swap yang lebih rendah. Default adalah 10 dan maksimum yang mungkin adalah 1000. Nilai yang lebih tinggi harus (sesuai dengan dokumentasi kernel ) menghasilkan penggunaan CPU yang lebih tinggi untukkswapd
proses dan latensi swapping keseluruhan yang lebih rendah.Selanjutnya, beri tahu kernel untuk lebih memilih menjaga hierarki direktori dalam memori daripada konten file jika beberapa RAM perlu dibebaskan (sekali lagi, jika semuanya sesuai dalam RAM, pengaturan ini tidak melakukan apa-apa):
Pengaturan
vfs_cache_pressure
nilai rendah masuk akal karena dalam kebanyakan kasus, kernel perlu mengetahui struktur direktori sebelum dapat menggunakan konten file dari cache dan membilas cache direktori terlalu cepat akan membuat cache file di samping tidak berharga. Pertimbangkan untuk turun ke 1 dengan pengaturan ini jika Anda memiliki banyak file kecil (sistem saya memiliki sekitar 150 ribu foto 10 megapiksel dan dianggap sebagai sistem "banyak file kecil"). Jangan pernah atur ke nol atau struktur direktori selalu disimpan dalam memori meskipun sistem kehabisan memori. Mengatur ini ke nilai besar masuk akal hanya jika Anda hanya memiliki beberapa file besar yang terus-menerus dibaca kembali (sekali lagi, pengeditan video HD tanpa cukup RAM akan menjadi contoh kasus). Dokumentasi kernel resmi mengatakan bahwa "Pengecualian: jika Anda memiliki jumlah file dan direktori yang sangat besar dan Anda jarang menyentuh / membaca / membuat daftar semua file dengan pengaturan
vfs_cache_pressure
lebih tinggi dari 100 mungkin bijaksana. Ini hanya berlaku jika Anda tidak memiliki RAM yang cukup dan tidak dapat menyimpan seluruh struktur direktori dalam RAM dan masih memiliki cukup RAM untuk cache dan proses file normal (misalnya server file perusahaan dengan banyak konten arsip). Jika Anda merasa perlu menambah divfs_cache_pressure
atas 100, Anda berjalan tanpa RAM yang cukup. Meningkatkanvfs_cache_pressure
mungkin membantu tetapi satu-satunya perbaikan nyata adalah untuk mendapatkan lebih banyak RAM. Setelahvfs_cache_pressure
ditetapkan ke angka tinggi mengorbankan kinerja rata-rata untuk memiliki kinerja yang lebih stabil secara keseluruhan (yaitu, Anda dapat menghindari perilaku kasus terburuk yang sangat buruk tetapi harus berurusan dengan kinerja keseluruhan yang lebih buruk).Terakhir, suruh kernel untuk menggunakan hingga 99% dari RAM sebagai cache untuk menulis dan memerintahkan kernel untuk menggunakan hingga 50% dari RAM sebelum memperlambat proses penulisan (default for
dirty_background_ratio
is10
). Peringatan: Saya pribadi tidak akan melakukan ini tetapi Anda mengaku memiliki cukup RAM dan bersedia kehilangan data.Dan katakan bahwa penundaan penulisan 1 jam tidak masalah bahkan untuk mulai menulis hal-hal pada disk (sekali lagi, saya tidak akan melakukan ini):
Jika Anda meletakkan semua itu
/etc/rc.local
dan menyertakan berikut di akhir, semuanya akan ada dalam cache sesegera mungkin setelah boot (hanya lakukan ini jika filesystem Anda benar-benar sesuai dengan RAM):Atau alternatif yang sedikit lebih sederhana yang mungkin bekerja lebih baik (hanya cache
/home
dan/usr
, lakukan ini hanya jika Anda benar/home
-/usr
benar sesuai dengan RAM):sumber
Pertama, saya TIDAK menyarankan Anda terus menggunakan NTFS, karena implementasi ntfs di Linux akan menimbulkan masalah kinerja dan keamanan kapan saja.
Ada beberapa hal yang dapat Anda lakukan:
ext4
ataubtrfs
bfq
preload
systemd
preload saat bootingMungkin Anda ingin mencobanya :-)
sumber
btrfs
baru-baru ini dirancang sistem file, saya akan menghindari itu jika diperlukan kinerja. Kami telah menjalankan sistem yang identik denganbtrfs
danext4
sistem file danext4
menang di dunia nyata dengan margin besar (btrfs
tampaknya membutuhkan waktu CPU sekitar 4xext4
kebutuhan untuk tingkat kinerja yang sama dan menyebabkan lebih banyak operasi disk untuk satu perintah logis). Tergantung pada beban kerja, saya sarankanext4
,jfs
atauxfs
untuk pekerjaan yang menuntut kinerja apa pun.Baca di depan:
Pada sistem 32 bit:
Pada sistem 64 bit:
Tulis di belakang cache:
Ini akan menggunakan hingga 100% dari memori bebas Anda sebagai cache tulis.
Atau Anda bisa keluar semua dan menggunakan tmpfs. Ini hanya relevan jika Anda memiliki RAM yang cukup. Menempatkan ini dalam
/etc/fstab
. Ganti 100G dengan jumlah RAM fisik.Kemudian:
Kemudian gunakan / mnt / tmpfs.
sumber
Anda dapat mengatur ukuran baca-depan dengan
blockdev --setra sectors /dev/sda1
, di mana sektor adalah ukuran yang Anda inginkan dalam sektor 512 byte.sumber
Pengaturan pembunuh saya sangat sederhana dan sangat efektif:
Penjelasan dari dokumentasi kernel :
vfs_cache_pressure
pada tahun 2000 menyebabkan sebagian besar komputasi terjadi pada RAM dan penulisan disk yang sangat terlambat.sumber
vfs_cache_pressure
terlalu tinggi (saya anggap2000
terlalu tinggi) akan menyebabkan akses disk yang tidak perlu bahkan untuk hal-hal sederhana seperti daftar direktori yang harus dengan mudah disimpan dalam cache. Berapa banyak RAM yang Anda miliki dan apa yang Anda lakukan dengan sistem? Seperti yang saya tulis dalam jawaban saya, menggunakan nilai tinggi untuk pengaturan ini masuk akal untuk misalnya mengedit video HD dengan RAM terbatas.Tidak terkait dengan menulis caching, tetapi terkait dengan menulis:
Untuk sistem ext4, Anda bisa menonaktifkan penjurnalan sepenuhnya
Ini akan mengurangi jumlah disk menulis untuk setiap pembaruan tertentu, tetapi mungkin meninggalkan sistem file tidak konsisten setelah shutdown yang tidak terduga, memerlukan fsck atau lebih buruk.
Untuk menghentikan pembacaan disk dari memicu disk menulis:
Mount dengan relatime atau opsi noatime
Saat Anda membaca file, metadata "waktu terakhir diakses" untuk file itu biasanya diperbarui. The
noatime
pilihan akan menonaktifkan perilaku itu. Ini mengurangi penulisan disk yang tidak perlu, tetapi Anda tidak akan lagi memiliki metadata itu. Beberapa distribusi (misalnya Manjaro) telah mengadopsi ini sebagai default pada semua partisi (mungkin untuk menambah umur SSD model sebelumnya).relatime
memperbarui waktu akses lebih jarang, sesuai dengan heuristik yang membantu mendukung aplikasi yang menggunakan atime. Ini adalah default pada Red Hat Enterprise Linux.Pilihan lain:
sumber