GNU/Linux >> Belajar Linux >  >> Linux

Batasi flush latar belakang Linux (halaman kotor)

Solusi 1:

Setelah banyak pembandingan dengan sysbench, saya sampai pada kesimpulan ini:

Untuk bertahan (dari segi kinerja) situasi di mana

  • proses penyalinan yang jahat membanjiri halaman kotor
  • dan cache tulis perangkat keras ada (mungkin juga tanpa itu)
  • dan pembacaan atau penulisan sinkron per detik (IOPS) sangat penting

buang saja semua elevator, antrean, dan cache halaman kotor. Tempat yang tepat untuk halaman kotor adalah di RAM cache tulis perangkat keras tersebut.

Sesuaikan dirty_ratio (atau dirty_bytes baru) serendah mungkin, tetapi awasi throughput berurutan. Dalam kasus khusus saya, 15 MB optimal (echo 15000000 > dirty_bytes ).

Ini lebih merupakan peretasan daripada solusi karena gigabyte RAM sekarang hanya digunakan untuk caching baca, bukan cache kotor. Agar cache yang kotor bekerja dengan baik dalam situasi ini, pembilas latar belakang kernel Linux harus rata-rata pada kecepatan berapa perangkat yang mendasarinya menerima permintaan dan menyesuaikan pembilasan latar belakang yang sesuai. Tidak mudah.

Spesifikasi dan tolok ukur untuk perbandingan:

Diuji saat dd 'ing nol ke disk, sysbench menunjukkan sukses besar , meningkatkan 10 utas penulisan fsync pada 16 kB dari 33 menjadi 700 IOPS (batas tidak aktif:1500 IOPS) dan utas tunggal dari 8 menjadi 400 IOPS.

Tanpa beban, IOPS tidak terpengaruh (~1500) dan throughput sedikit berkurang (dari 251 MB/dtk menjadi 216 MB/dtk).

dd panggilan:

dd if=/dev/zero of=dumpfile bs=1024 count=20485672

untuk sysbench, test_file.0 disiapkan untuk diurai dengan:

dd if=/dev/zero of=test_file.0 bs=1024 count=10485672

panggilan sysbench untuk 10 utas:

sysbench --test=fileio --file-num=1 --num-threads=10 --file-total-size=10G --file-fsync-all=on --file-test-mode=rndwr --max-time=30 --file-block-size=16384 --max-requests=0 run

panggilan sysbench untuk satu utas:

sysbench --test=fileio --file-num=1 --num-threads=1 --file-total-size=10G --file-fsync-all=on --file-test-mode=rndwr --max-time=30 --file-block-size=16384 --max-requests=0 run

Ukuran blok yang lebih kecil menunjukkan angka yang lebih drastis.

--file-block-size=4096 dengan 1 GB dirty_bytes:

sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
1 files, 10Gb each
10Gb total file size
Block size 4Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Calling fsync() after each write operation.
Using synchronous I/O mode
Doing random write test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  0 Read, 30 Write, 30 Other = 60 Total
Read 0b  Written 120Kb  Total transferred 120Kb  (3.939Kb/sec)
      0.98 Requests/sec executed

Test execution summary:
      total time:                          30.4642s
      total number of events:              30
      total time taken by event execution: 30.4639
      per-request statistics:
           min:                                 94.36ms
           avg:                               1015.46ms
           max:                               1591.95ms
           approx.  95 percentile:            1591.30ms

Threads fairness:
      events (avg/stddev):           30.0000/0.00
      execution time (avg/stddev):   30.4639/0.00

--file-block-size=4096 dengan 15 MB dirty_bytes:

sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
1 files, 10Gb each
10Gb total file size
Block size 4Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Calling fsync() after each write operation.
Using synchronous I/O mode
Doing random write test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  0 Read, 13524 Write, 13524 Other = 27048 Total
Read 0b  Written 52.828Mb  Total transferred 52.828Mb  (1.7608Mb/sec)
    450.75 Requests/sec executed

Test execution summary:
      total time:                          30.0032s
      total number of events:              13524
      total time taken by event execution: 29.9921
      per-request statistics:
           min:                                  0.10ms
           avg:                                  2.22ms
           max:                                145.75ms
           approx.  95 percentile:              12.35ms

Threads fairness:
      events (avg/stddev):           13524.0000/0.00
      execution time (avg/stddev):   29.9921/0.00

--file-block-size=4096 dengan 15 MB dirty_bytes pada sistem diam:

sysbench 0.4.12:tolok ukur evaluasi sistem multi-utas

Running the test with following options:
Number of threads: 1

Extra file open flags: 0
1 files, 10Gb each
10Gb total file size
Block size 4Kb
Number of random requests for random IO: 0
Read/Write ratio for combined random IO test: 1.50
Calling fsync() after each write operation.
Using synchronous I/O mode
Doing random write test
Threads started!
Time limit exceeded, exiting...
Done.

Operations performed:  0 Read, 43801 Write, 43801 Other = 87602 Total
Read 0b  Written 171.1Mb  Total transferred 171.1Mb  (5.7032Mb/sec)
 1460.02 Requests/sec executed

Test execution summary:
      total time:                          30.0004s
      total number of events:              43801
      total time taken by event execution: 29.9662
      per-request statistics:
           min:                                  0.10ms
           avg:                                  0.68ms
           max:                                275.50ms
           approx.  95 percentile:               3.28ms

Threads fairness:
      events (avg/stddev):           43801.0000/0.00
      execution time (avg/stddev):   29.9662/0.00

Sistem Uji:

  • Adaptec 5405Z (itu adalah cache tulis 512 MB dengan perlindungan)
  • Intel Xeon L5520
  • RAM 6 GiB @ 1066 MHz
  • Motherboard Supermicro X8DTN (chipset 5520)
  • 12 disk Seagate Barracuda 1 TB
    • 10 dalam perangkat lunak Linux RAID 10
  • Kernel 2.6.32
  • Sistem file xfs
  • Debian tidak stabil

Singkatnya, saya sekarang yakin konfigurasi ini akan bekerja dengan baik dalam situasi menganggur, beban tinggi, dan bahkan beban penuh untuk lalu lintas database yang sebaliknya akan kelaparan oleh lalu lintas berurutan. Throughput berurutan lebih tinggi daripada yang dapat dihasilkan oleh dua link gigabit, jadi tidak masalah untuk menguranginya sedikit.

Solusi 2:

Meskipun penyetelan parameter kernel menghentikan masalah, sebenarnya masalah kinerja Anda mungkin disebabkan oleh bug pada pengontrol Adaptec 5405Z yang diperbaiki dalam pembaruan firmware 1 Februari 2012. Catatan rilis mengatakan "Memperbaiki masalah di mana firmware dapat hang selama tekanan I/O tinggi." Mungkin menyebarkan I/O seperti yang Anda lakukan sudah cukup untuk mencegah terpicunya bug ini, tetapi itu hanya dugaan.

Berikut catatan rilisnya:http://download.adaptec.com/pdfs/readme/relnotes_arc_fw-b18937_asm-18837.pdf

Bahkan jika ini tidak terjadi pada situasi khusus Anda, saya pikir ini dapat bermanfaat bagi pengguna yang menemukan posting ini di masa mendatang. Kami melihat beberapa pesan seperti berikut di output dmesg kami yang akhirnya mengarahkan kami ke pembaruan firmware:

aacraid: Host adapter abort request (0,0,0,0)
[above was repeated many times]
AAC: Host adapter BLINK LED 0x62
AAC0: adapter kernel panic'd 62.
sd 0:0:0:0: timing out command, waited 360s
sd 0:0:0:0: Unhandled error code
sd 0:0:0:0: SCSI error: return code = 0x06000000
Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT,SUGGEST_OK
sd 0:0:0:0: timing out command, waited 360s
sd 0:0:0:0: Unhandled error code
sd 0:0:0:0: SCSI error: return code = 0x06000028
Result: hostbyte=DID_OK driverbyte=DRIVER_TIMEOUT,SUGGEST_OK
sd 0:0:0:0: timing out command, waited 360s
sd 0:0:0:0: Unhandled error code
sd 0:0:0:0: SCSI error: return code = 0x06000028

Berikut adalah nomor model pengontrol Adaptec RAID yang tercantum dalam catatan rilis untuk firmware yang memiliki perbaikan hang I/O tinggi:2045, 2405, 2405Q, 2805, 5085, 5405, 5405Z, 5445, 5445Z, 5805, 5805Q, 5805Z, 5805ZQ, 51245, 51645, 52445.


Linux
  1. Ganti halaman manual dengan Tealdeer di Linux

  2. Apa Itu Halaman Kotor di Linux

  3. Proses latar belakang di linux

  1. Cara Meningkatkan Jumlah Batas File Terbuka di Linux

  2. Cara Memantau Aktivitas Pengguna Di Linux

  3. Cara membatasi perintah pengguna di Linux

  1. Cara Membatasi Penggunaan CPU Suatu Proses Di Linux

  2. linux:matikan tugas latar belakang

  3. Bagaimana cara membaca halaman manual Linux?