Как улучшить производительность моего сервера
У меня есть микросервер 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/
Что занимает около получаса.
Мои вопросы заключаются в следующем, конфигурация сервера и некоторые статистические данные ввода-вывода подробно описаны ниже. Я, конечно, могу предоставить больше отладочной информации, если это необходимо:-
Как я могу определить, где находятся узкие места?
Достигаю ли я границы того, на что способен (умный ввод-вывод) с этой коробкой?
Могу ли я сделать какие-либо изменения производительности?
Должен ли я использовать другой уровень RAID?
Имеет ли смысл заменять два внутренних RAID-диска (половину каждого зеркала) на две "другие половины другого зеркала" на внешнем массиве?
Примечание: я не склонен заниматься такими вещами, как компиляция собственного ядра. В идеале я хотел бы остановиться на 10.04 LTS, если только в более поздних версиях нет какой-то магии, которая заставляет все это работать намного быстрее.
Внутренне сервер имеет загрузочный диск SATA 1x160 ГБ и диски 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
1 ответ
К сожалению, полосовой кеш относится только к RAID5 и 6 - нет эквивалента для RAID 0/1/10.
Производительность ваших отдельных дисков (согласно hdparm
) выглядит хорошо - все они работают, как и ожидалось, для дисков этого класса.
Мои предложения:
- Убедитесь, что AHCI включен в BIOS и что установленные на нем диски не используют устаревший режим IDE. Существует доступный взломанный BIOS для MicroServer, который также включает AHCI для порта eSATA (см. Эту ссылку для получения дополнительной информации) - возможно, стоит изучить диски во внешнем корпусе, хотя они все еще будут ограничены тем, что находятся за Множитель порта.
- Включите NCQ для всех дисков и посмотрите, будет ли это иметь значение (может, а может и нет).
- Убедитесь, что настройки файловой системы оптимизированы (монтирование noatime, nodiratime). Вы также можете отключить барьеры записи, но это может быть слишком рискованным.
- Проверьте, видите ли вы какую-либо выгоду от переключения планировщика ввода / вывода (здесь может помочь noop).
- Настройте буфер опережающего чтения для устройств md и LVM:
blockdev --setra <size> /dev/md1
например (где<size>
это 512-байтовые сектора). Это только поможет читать, хотя.
Еще две вещи, которые могут повлиять на производительность, - это выравнивание разделов и параметры создания файловой системы (шаг и т. Д.), Но поскольку вы используете современные инструменты, это не должно быть проблемой.