Як покращити роботу диска сервера


10

У мене є мікросервер HP, на якому працює Ubuntu 10.04 LTS. Це сервер малої потужності з 5 внутрішніми відсіками накопичувача. Я використовую його для резервного копіювання віддалених серверів, VPS та локальних ноутбуків по мережі. Я хочу отримати найкращі показники роботи з дисків, але не знаю, чи оптимально це налаштування, тому я шукаю поради.

Мій сервер працює rsnapshot кілька разів на день для резервного копіювання віддалених хостів. Фактична додаткова резервна частина займає дуже мало часу. Значний час витрачається на такі речі, як: -

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

Що займає близько 2 годин. Я розумію, що там є мільйон крихітних файлів.

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

Також, коли rsnapshot видаляє стару резервну копію, це може зайняти багато часу: -

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

На що йде близько півгодини.

Мої запитання наступні: конфігурація сервера та деякі статистичні дані IO детально описані нижче. Я, звичайно, можу надати більше інформації про налагодження, якщо потрібно: -

Як я можу визначити, де є вузькі місця?

Чи досягаю я меж того, на що здатний (IO мудрий) за допомогою цього поля?

Чи можна змінити ефективність роботи?

Чи варто використовувати інший рівень RAID?

Чи має сенс замінити два внутрішні диски RAID (половина кожного дзеркала) двома "іншими половинками іншого дзеркала" на зовнішній масив?

Примітка: Я дещо не схильний робити такі речі, як складання власного ядра. В ідеалі я хотів би дотримуватися 10,04 LTS, якщо тільки в пізніших версіях не є якась магія, яка робить це все набагато швидшим.

Внутрішній сервер має завантажувальний диск SATA 1х160 ГБ та диски 4x2 ТБ: -

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

Чотири внутрішні диски 2 ТБ встановлені в програмі MD RAID10: -

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

Крім того, у мене є зовнішній корпус накопичувача EDGE10, який підключений через карту PCI-E eSATA і містить ще чотири накопичувачі об'ємом 500 ГБ: -

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

Це також налаштування у вигляді масиву MD RAID10

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

md0 і md1 об'єднуються, щоб отримати один великий LVM. Примітка: я нещодавно додав зовнішній масив, тому він майже порожній, я не думаю, що на ньому зараз немає блоків.

Це представлено у вигляді обсягу 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

Який відформатований як EXT4 та змонтований як / srv: -

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

Тут багато вільного місця.

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

Інша інформація, яка може бути корисною: -

$ 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)

Під час виконання команди cp під час rsnapshot в 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

Так що в основному багато записів, багато IO чекати.

Тож зараз ящик не працює, я призупинив усі роботи.

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

Виглядає персиково!

$ 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

Хм. Я ненавиджу розбиття дискових структур на інше обладнання, тому що такі речі настільки важко вирішити. Зазвичай я пропоную виконувати щось подібне bonnie++на кожному масиві окремо, щоб у вас були основні орієнтири швидкості. У мене не дуже багато досвіду роботи з LVM, тому я не впевнений, що їх роз'єднання - це варіант.
Олі

Зовнішній масив насправді не є проблемою. Блоків на ньому немає. Я сподіваюся отримати звук, це внутрішня продуктивність диска.
папі

Відповіді:


3

На жаль, кеш смуги застосовується лише до RAID5 та 6 - для RAID 0/1/10 немає еквівалента.

Продуктивність ваших окремих приводів (відповідно до hdparm) виглядає чудово - всі вони працюють як слід на дисках цього класу.

Мої пропозиції:

  1. Переконайтеся, що AHCI увімкнено в BIOS і чи внутрішньо встановлені накопичувачі не використовують застарілий режим IDE. Існує зламана BIOS для MicroServer, яка також дозволяє AHCI для порту eSATA (див. Це посилання для отримання додаткової інформації) - можливо, варто вивчити накопичувачі у зовнішньому корпусі, хоча вони все ще будуть обмежені тим, що знаходяться позаду мультиплікатор портів.
  2. Увімкніть NCQ для всіх накопичувачів і подивіться, чи це має значення (може, не може).
  3. Переконайтесь, що налаштування файлової системи оптимізовані (монтаж часу, час, час). Ви також можете відключити бар'єри для запису , але це може бути занадто ризиковано.
  4. Перевірте, чи бачите ви користь від перемикання планувальника вводу-виводу (тут може допомогти noop).
  5. Відрегулюйте буфер зчитування вперед для пристроїв md та LVM: blockdev --setra <size> /dev/md1наприклад (де <size>є 512-байтові сектори). Це допоможе лише читанням.

Ще дві речі, які можуть вплинути на продуктивність, - це вирівнювання розділів та параметрів створення файлової системи (крок тощо), але, використовуючи сучасні інструменти, це не повинно бути проблемою.


Додано дисковий час hdparm і відредагував fstab (і переписав), щоб використовувати час у режимі noatime та nodiratime. Залишмо це 24 години так.
папі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.