Как повысить производительность моего сервера

10

У меня есть HP Microserver, работающий под 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 мудрый) с этим полем?

Есть ли какие-либо улучшения производительности, которые я мог бы сделать?

Должен ли я использовать другой уровень RAID?

Имеет смысл обменять два внутренних диска RAID (половина каждого зеркала) на две «другие половинки другого зеркала» на внешнем массиве?

Примечание: Я немного не склонен заниматься такими вещами, как компиляция собственного ядра. В идеале я хотел бы придерживаться 10.04 LTS, если в более поздних версиях нет какой-то магии, что заставляет все работать намного быстрее.

Внутренне сервер имеет загрузочный диск SATA 1x160GB и диски 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

Четыре внутренних диска 2TB находятся в программной настройке 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

Таким образом, в основном много записей, много ожидающих ввода-вывода.

Итак, теперь ящик простаивает, я приостановил все задания.

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
    
задан popey 16.06.2011 в 10:38
источник

1 ответ

3

К сожалению, кеш-полоса применяется только к RAID5 и 6 - для RAID 0/1/10 нет эквивалента.

Производительность ваших отдельных дисков (в зависимости от hdparm ) выглядит отлично - все они работают как ожидалось для дисков этого класса.

Мои предложения:

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

Две другие вещи, которые могут повлиять на производительность, - это параметры разбиения на разделы и параметры создания файловой системы (шаг и т. д.), но поскольку вы используете современные инструменты, это не должно быть проблемой.

    
ответ дан mjturner 16.06.2011 в 13:09