Bagaimana cara meningkatkan kinerja disk server saya

10

Saya memiliki HP Microserver yang menjalankan Ubuntu 10,04 LTS. Ini adalah server berdaya rendah dengan 5 bay drive internal. Saya menggunakannya untuk mencadangkan server jauh, VPS, dan laptop lokal saya melalui jaringan. Saya ingin mendapatkan kinerja terbaik dari disk, tetapi saya tidak tahu apakah itu setup secara optimal, jadi saya mencari beberapa saran.

Server saya menjalankan rsnapshot beberapa kali sehari untuk membuat cadangan host jarak jauh. Bagian cadangan tambahan yang sebenarnya hanya membutuhkan sedikit waktu. Waktu yang signifikan dihabiskan untuk melakukan hal-hal seperti: -

/bin/cp -al /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1

Yang memakan waktu sekitar 2 jam. Saya menyadari ada bazillion file kecil di sana.

$ sudo du -hs hourly.1
659G    hourly.1

Juga ketika rsnapshot menghapus cadangan lama, ini bisa memakan waktu lama: -

/bin/rm -rf /srv/rsnapshot/daily.6/

Yang memakan waktu sekitar setengah jam.

Pertanyaan saya adalah sebagai berikut, konfigurasi server dan beberapa statistik IO dirinci di bawah ini. Tentu saja saya bisa memberikan lebih banyak info debug jika perlu: -

Bagaimana saya bisa mengidentifikasi kemacetannya?

Apakah saya mencapai batas kemampuan (dengan bijaksana) dengan kotak ini?

Apakah ada tweak kinerja yang bisa saya lakukan?

Haruskah saya menggunakan level RAID yang berbeda?

Apakah masuk akal untuk menukar dua disk RAID internal (setengah dari masing-masing mirror) dengan dua 'bagian lain dari mirror lain' pada array eksternal?

Catatan: Saya agak tidak cenderung melakukan hal-hal seperti mengkompilasi kernel saya sendiri. Idealnya saya ingin tetap menggunakan 10,04 LTS, kecuali ada beberapa keajaiban di versi selanjutnya yang membuat ini bekerja lebih cepat.

Secara internal server memiliki disk boot SATA 1x160GB dan disk 4x2TB: -

Disk /dev/sde: 160.0 GB, 160041885696 bytes
Disk /dev/sdf: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdh: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdi: 2000.4 GB, 2000398934016 bytes
Disk /dev/sdg: 2000.4 GB, 2000398934016 bytes

Keempat disk 2TB internal berada dalam pengaturan MD RAID10 perangkat lunak: -

md0 : active raid10 sdg1[3] sdh1[0] sdi1[2] sdf1[1]
      3907023872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

Selain itu saya memiliki penutup drive EDGE10 eksternal yang terhubung melalui kartu PCI-E eSATA dan berisi empat drive lebih dari 500GB: -

Disk /dev/sda: 500.1 GB, 500107862016 bytes
Disk /dev/sdb: 500.1 GB, 500107862016 bytes
Disk /dev/sdc: 500.1 GB, 500107862016 bytes
Disk /dev/sdd: 500.1 GB, 500107862016 bytes

Ini juga diatur sebagai array MD RAID10

md1 : active raid10 sdb1[1] sda1[0] sdd1[3] sdc1[2]
      976767872 blocks 64K chunks 2 near-copies [4/4] [UUUU]

md0 dan md1 digabungkan untuk membuat satu LVM besar. Catatan: Saya baru saja menambahkan array eksternal, jadi itu cukup kosong, saya tidak berpikir ada blok di sana sekarang.

Ini disajikan sebagai volume LVM: -

--- Logical volume ---
LV Name                /dev/data/data
VG Name                data
LV UUID                amZCgU-sQLi-R363-dUFx-Bcdf-iwlt-ZNnDp8
LV Write Access        read/write
LV Status              available
# open                 1
LV Size                4.54 TiB
Current LE             1190134
Segments               2
Allocation             inherit
Read ahead sectors     auto
- currently set to     512
Block device           251:0

Yang diformat sebagai EXT4 dan dipasang sebagai / srv: -

/dev/mapper/data-data on /srv type ext4 (rw)

Ada banyak ruang kosong.

/dev/mapper/data-data
                      4.5T  2.2T  2.1T  51% /srv

Informasi lain yang mungkin berguna: -

$ uname -a
Linux ubuntuserver 2.6.32-32-server #62-Ubuntu SMP Wed Apr 20 22:07:43 UTC 2011 x86_64 GNU/Linux

.

00:11.0 SATA controller: ATI Technologies Inc SB700/SB800 SATA Controller [AHCI mode] (rev 40)
02:00.0 RAID bus controller: Silicon Image, Inc. SiI 3132 Serial ATA Raid II Controller (rev 01)

Ketika melakukan perintah cp selama rsnapshot saya melihat hal berikut di iostat: -

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.55    0.00    5.47   66.14    0.00   27.85

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.00    0.10    0.00     0.80     0.00     8.00     0.00    0.00   0.00   0.00
sdf               0.00   407.50    0.00   66.80     0.00  3790.40    56.74   124.86 1524.88  13.55  90.50
sdh               0.00   406.90    0.00   66.90     0.00  3790.40    56.66    92.89 1230.52  13.21  88.40
sdi               0.00   407.80    5.50   70.20    44.00  3824.00    51.10   113.83 1333.84  12.34  93.40
sdg               0.00   406.80    6.10   71.60    48.80  3827.20    49.88    64.32  787.68  11.69  90.80
md0               0.00     0.00   11.50 1484.60    92.00 11876.80     8.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00   11.50 1484.70    92.00 11877.60     8.00  5331.18  471.91   0.63  94.70
md1               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Jadi pada dasarnya banyak menulis, banyak menunggu IO.

Jadi sekarang kotaknya tidak digunakan, saya telah menangguhkan semua pekerjaan.

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.00    0.00  100.00

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdf               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdh               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdi               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdg               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
md0               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
md1               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00

Terlihat sangat bagus!

$ sudo hdparm -T -t /dev/sd[a-i]

/dev/sda:
 Timing cached reads:   2532 MB in  2.00 seconds = 1265.95 MB/sec
 Timing buffered disk reads:  270 MB in  3.02 seconds =  89.53 MB/sec

/dev/sdb:
 Timing cached reads:   2516 MB in  2.00 seconds = 1258.07 MB/sec
 Timing buffered disk reads:  264 MB in  3.02 seconds =  87.37 MB/sec

/dev/sdc:
 Timing cached reads:   2442 MB in  2.00 seconds = 1220.80 MB/sec
 Timing buffered disk reads:  272 MB in  3.00 seconds =  90.60 MB/sec

/dev/sdd:
 Timing cached reads:   2520 MB in  2.00 seconds = 1259.64 MB/sec
 Timing buffered disk reads:  272 MB in  3.02 seconds =  90.07 MB/sec

/dev/sde:
 Timing cached reads:   2524 MB in  2.00 seconds = 1261.48 MB/sec
 Timing buffered disk reads:  306 MB in  3.01 seconds = 101.56 MB/sec

/dev/sdf:
 Timing cached reads:   2366 MB in  2.00 seconds = 1183.28 MB/sec
 Timing buffered disk reads:  388 MB in  3.01 seconds = 128.88 MB/sec

/dev/sdg:
 Timing cached reads:   2536 MB in  2.00 seconds = 1267.52 MB/sec
 Timing buffered disk reads:  400 MB in  3.00 seconds = 133.12 MB/sec

/dev/sdh:
 Timing cached reads:   2538 MB in  2.00 seconds = 1269.08 MB/sec
 Timing buffered disk reads:  426 MB in  3.00 seconds = 141.90 MB/sec

/dev/sdi:
 Timing cached reads:   2538 MB in  2.00 seconds = 1268.57 MB/sec
 Timing buffered disk reads:  402 MB in  3.01 seconds = 133.69 MB/sec
popey
sumber
Hmm. Saya benci membelah struktur disk di perangkat yang berbeda karena membuat hal-hal seperti ini sangat sulit untuk dipecahkan. Biasanya saya sarankan menjalankan sesuatu seperti bonnie++pada setiap array secara terpisah sehingga Anda memiliki tolok ukur kecepatan dasar untuk mereka. Saya tidak punya banyak pengalaman dengan LVM jadi saya tidak yakin memisahkan mereka adalah pilihan sekarang.
Oli
Array eksternal sebenarnya bukan masalah. Tidak ada blok di sana. Ini adalah kinerja disk internal yang saya harapkan untuk terdengar.
popey

Jawaban:

3

Sayangnya strip cache hanya berlaku untuk RAID5 dan 6 - tidak ada yang setara untuk RAID 0/1/10.

Kinerja masing-masing drive Anda (sesuai per hdparm) terlihat baik - mereka semua berkinerja seperti yang diharapkan untuk drive dari kelas itu.

Saran saya:

  1. Periksa apakah AHCI diaktifkan di BIOS dan bahwa drive yang dipasang secara internal tidak menggunakan mode IDE lama. Ada BIOS yang diretas untuk MicroServer yang tersedia yang juga memungkinkan AHCI untuk port eSATA juga (lihat tautan ini untuk info lebih lanjut) - mungkin perlu diselidiki untuk drive di enklosur eksternal, meskipun mereka masih akan dibatasi dengan berada di belakang sebuah pengganda port.
  2. Aktifkan NCQ untuk semua drive dan lihat apakah itu membuat perbedaan (mungkin, mungkin tidak).
  3. Pastikan pengaturan sistem file dioptimalkan (memasang noatime, nodiratime). Anda juga dapat menonaktifkan hambatan penulisan , tetapi itu mungkin terlalu berisiko.
  4. Periksa apakah Anda melihat manfaat dari beralih penjadwal I / O (noop dapat membantu di sini).
  5. Sesuaikan buffer baca-depan untuk perangkat md dan LVM: blockdev --setra <size> /dev/md1misalnya (di mana <size>sektor 512-byte). Itu hanya akan membantu membaca.

Dua hal lain yang dapat memengaruhi kinerja adalah penyelarasan partisi dan parameter pembuatan sistem file (stride, dll) tetapi saat Anda menggunakan alat modern, itu seharusnya tidak menjadi masalah.

mjturner
sumber
Menambahkan disk hdparm kali, dan telah mengedit fstab (dan remounted) untuk menggunakan noatime dan nodiratime. Akan meninggalkannya 24 jam seperti itu.
popey