LINUX.ORG.RU

HDD Utilization 100% при низких read и write

 


0

4

Добрый день, господа!

Прошу Вас помощи в теории о странном поведении системы в плане работы с жестким диском.

В мире существует достаточно загруженный сервер на Centos 6.7, являющиеся виртуальной машиной VMWare. Сервер очень загружен днём и не сильно ночью. В своё время данную виртуальную машину апгрейдили по CPU, RAM и HDD. Однако пользователей становилось всё больше и мы упёрлись в I/O HDD, который уже так просто не «добавить».

Пока оптимизация данного параметра только в планах, однако мне на руки попался график с Zabbix, где я обнаружил одну странную вещь.

График

Дело в том, что днём HDD Utilization доходит до 100% и оно понятно - пользователи выполняют кучу операций по чтению и записи. Но меню больше интересует, что творить ночью. Как видите, часов в 5-6 HDD Utilization держится на 100%, однако операции чтения/записи околонулевые. Сколько я не пытался найти информацию по поводу данного факта в интернете - ничего полезного не узнал. Совершенно не понятно, что заставляет Утилизацию держаться на максимальных значениях: то ли идёт какая-то проверка дисков на целостность данных по ночам (тогда почему фиксируется Утилизация, но не фиксируется чтение/запись), то ли планировщик сошел с ума и гоняет считыватель жесткого диска туда-сюда, то ли соседние виртуальные машины на этом сервере виртуализации VMWare выполняют какой-то массовую обработку информации и нашему серверу эти все операции видны только зашкаливающей утилизацией. Не понятно.

Подскажите, было ли в Вашей работе нечто подобное и куда тут стоит копать?

Смотри crontab, что там у тебя запускается. Может бэкап делается или сканер какой работает. Ну или проснись в это время, залезь в консоль и смотри top/iotop/iostat.

И с чего ты взял что ио не фиксируется? Ты его не видишь потому что масштаб большой.

anonymous ()
Ответ на: комментарий от anonymous

А что, у них быстрее random seek? Ты бы ещё дискеты и стримеры вспомнил.

anonymous ()

Что именно на данном графике считается за 100%?

Deleted ()

Сколько у тебя iops в нормальном состоянии (при утилизации в районе 70%) и сколько при 100%?

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

Что в это время говорит iotop?

CaveRat ★★ ()

Хотелось бы обратить внимание экспертов на то, что это виртуальная машина. Нагрузку на диск/схд могут создавать другие потребители. В т.ч. другие хосты.

Ночь - время бекапов, кстати

router ★★★★★ ()
Ответ на: комментарий от CaveRat

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

ТС обозначил временные рамки проблемы: 5-6 утра, на графике в этот период почти нет синеньких черточек, одни зеленые. Где запись увидел?

anonymous ()
Ответ на: комментарий от router

Эксперты обратили внимание, но странно что никто пока не сказал что ТС что-то не то меряет. :)

в график не мешало бы всунуть временные метрики из iostat, например: iowait, avgsvctime, etc.

anonymous ()

График

Увеличил график. Там выделилось чтение на 0.5К r/s и пики записи на ~1К w/r. Считайте, что нулевая нагрузка.

Для сравнения, в дневное время данные цифры держатся в районе 30-70К.

Вот IOstat в дневное время:

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,00    49,20  114,40    8,20  5206,40   459,20    46,21     0,43    3,48   2,37  29,04
sdf               0,00    98,20  308,40  165,80  7392,00  2112,00    20,04     0,99    2,09   1,44  68,44
sde               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    12,00  401,80    3,60 16489,60   124,80    40,98     1,73    4,26   2,32  94,16
sdd               0,00     3,60   45,60    3,20   985,60    54,40    21,31     0,15    3,13   3,00  14,64
sda               0,00     1,20    0,00    0,40     0,00    12,80    32,00     0,00    0,50   0,50   0,02
sdg               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    1,60     0,00    12,80     8,00     0,00    0,50   0,12   0,02
dm-1              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00   0,00   0,00
dm-2              0,00     0,00  870,60  343,80 30043,20  2750,40    27,00     3,66    3,02   0,82 100,00  

В ночное я чуть позже смогу снять.

dm-2 - это LVM из дисков sdb, sdc, sdd, sdf, sdg Именно на него ложится вся нагрузка и именно он фигурирует в графике.

PIKNIK ()
Ответ на: комментарий от PIKNIK

покажи iostat в мегабайтах, а не секторах.
похоже, что у тебя диск читает на полную катушку, если перевести сектора в мегабайты при условии сектор=4К

Deleted ()
Ответ на: комментарий от Deleted

Сейчас уже вечер, утил на половину упал.

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,01   485,47   57,09   27,50     1,97     2,00    96,13     0,31    3,63   1,94  16,38
sdf               0,06   217,69  115,79   89,05     4,17     1,20    53,69     1,34    6,53   1,66  34,08
sde               0,00     0,00    0,00    0,00     0,00     0,00     9,63     0,00    0,10   0,09   0,00
sdc               0,00    36,45   26,61    3,54     1,14     0,16    88,26     0,14    4,74   3,12   9,42
sdd               0,01    64,83   36,90    4,93     2,39     0,27   130,32     0,23    5,58   2,53  10,56
sda               1,95     9,21    4,97    3,77     0,13     0,05    42,74     0,04    4,43   0,91   0,80
sdg               0,01   124,44    1,13    1,07     0,14     0,49   584,58     1,09  492,03   6,65   1,47
dm-0              0,00     0,00    4,62   11,57     0,12     0,05    21,22     0,31   19,41   0,46   0,74
dm-1              0,00     0,00    2,31    1,41     0,01     0,01     8,00     0,05   12,44   0,37   0,14
dm-2              0,00     0,00  237,60 1054,98     9,81     4,12    22,07     0,58    0,28   0,40  51,79

PIKNIK ()

Нужно просто понимать, как рассчитывается утилизация диска. На коротких временных интервалах утилизация составляет либо 100%, либо 0%. Диск либо занят выполнением какой-либо операции, либо простаивает - третьего не дано. Всякие там мониторинги просто усредняют это значение на более длинных временных интервалах. Например, если ты видишь утилизацию диска, равную 60% на минутном интервале, то это означает, что на протяжении 60% времени от 1 минуты диск был занят на 100%, и на протяжении 40% времени от 1 минуты диск был занят на 0%.

Если у тебя там ночью около 200 IO/s, то при service_time в 5 ms это уже даст 100%-ю утилизацию диска (диск был занят 200*5=1000ms в сек). Кстати, на графиках этого самого service_time очень не хватает.

bigbit ★★★★★ ()
Ответ на: комментарий от PIKNIK

Ну смотри, у тебя 1055 запроса в секунду на запсись, я считаю, что это неплохая производительность для гипервизора с 16 дисками в radid10 при средней нагрузке.

Deleted ()

Из мана по iostat:

%util
      Percentage of CPU time during  which  I/O  requests  were
      issued  to  the  device  (bandwidth  utilization  for the
      device). Device saturation  occurs  when  this  value  is
      close to 100% for devices serving requests serially.  But
      for devices serving requests in parallel,  such  as  RAID
      arrays  and  modern  SSDs,  this  number does not reflect
      their performance limits.

Т.е. этот параметер меряет на самом деле попугаев, а точнее отношение того, сколько CPU(! не диск!) занимался I/O или своими прямыми обязаностями (расчётами и т.д.).

Ночью нагрузка на CPU маленькая (DB и заводы стоят, юзвери спят, webserver скучает). Всё, чем занимается CPU — это обработка парочки залётных I/O запросов и занимется этим (та-дам!) ~100% своего времени.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 1)

дефрагментация? планировщик io пробовали менять?

darkenshvein ★★★★★ ()
Ответ на: комментарий от beastie

сколько CPU(! не диск!) занимался I/O или своими прямыми обязаностями (расчётами и т.д.)

%util - это сколько квантов времени диск делал хоть что-то, т.е. был хоть чем-то занят. На том же stackoverflow.com есть тема «How the util of iostat is computed?» с исходниками iostat или вот тут по-русски неплохо описано:
http://beastea.blogspot.ru/2012/11/util-iostat.html

Обрати внимание на 2 последних предложения из мана, которые ты выше процитировал про разные точки насыщения для RAID и SSD. Если бы дело было только в CPU, как ты говоришь, то эти строки не имели бы смысла.

bigbit ★★★★★ ()
Ответ на: комментарий от PIKNIK

В общем ночью цифры держатся в тех же значениях.

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,01   440,80   55,48   25,17     1,94     1,82    95,37     0,29    3,62   1,96  15,82
sdf               0,06   201,04  114,49   87,46     4,14     1,13    53,42     1,26    6,25   1,67  33,78
sde               0,00     0,00    0,00    0,00     0,00     0,00     9,70     0,00    0,10   0,10   0,00
sdc               0,00    33,43   26,10    3,30     1,13     0,14    88,79     0,14    4,71   3,12   9,17
sdd               0,01    57,76   36,79    4,50     2,39     0,24   130,76     0,22    5,39   2,51  10,36
sda               1,74     8,94    4,56    3,70     0,12     0,05    41,80     0,04    4,33   0,93   0,77
sdg               0,01   118,90    1,38    1,03     0,17     0,47   540,98     1,00  415,16   6,24   1,50
dm-0              0,00     0,00    4,26   11,38     0,11     0,04    20,36     0,28   18,12   0,46   0,71
dm-1              0,00     0,00    2,04    1,25     0,01     0,00     8,00     0,04   12,44   0,37   0,12
dm-2              0,00     0,00  234,32  973,39     9,77     3,80    23,01     2,13    1,60   0,43  51,53

Эти ~51% утилизации держатся всю ночь, хотя нагрузка на сервер тогда минимальная (но не отсутствующая т.к. несколько заблудших пользователей продолжают работать). При этом в Zabbix'e в это время показывает 100% утилизации.

Теперь вообще странные данные получились. Полное несоответствие графиков и iostat. Я уже было думал, что сервера перепутал, но это я перепроверил раза 3.

Сморите, вот график.

А вот iostat в

3:45

Птн Июл  8 03:45:35 MSK 2016

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9,40    0,00    1,02    1,82    0,00   87,76

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,01   441,84   55,49   25,23     1,93     1,82    95,34     0,29    3,62   1,96  15,84
sdf               0,06   201,50  114,38   87,64     4,11     1,13    53,14     1,26    6,25   1,67  33,73
sde               0,00     0,00    0,00    0,00     0,00     0,00     9,70     0,00    0,10   0,10   0,00
sdc               0,00    33,51   26,10    3,31     1,13     0,14    88,71     0,14    4,71   3,12   9,17
sdd               0,01    57,89   36,54    4,51     2,38     0,24   130,79     0,22    5,41   2,52  10,33
sda               1,75     8,95    4,56    3,70     0,12     0,05    41,82     0,04    4,33   0,93   0,77
sdg               0,01   119,09    1,38    1,03     0,17     0,47   540,84     1,00  415,19   6,24   1,50
dm-0              0,00     0,00    4,27   11,40     0,11     0,04    20,37     0,28   18,14   0,46   0,71
dm-1              0,00     0,00    2,05    1,26     0,01     0,00     8,00     0,04   12,44   0,37   0,12
dm-2              0,00     0,00  233,97  975,54     9,72     3,81    22,91     2,10    1,58   0,43  51,43

4:05

Птн Июл  8 04:05:35 MSK 2016

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9,39    0,00    1,02    1,82    0,00   87,77

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,01   441,38   55,45   25,21     1,93     1,82    95,37     0,29    3,62   1,96  15,82
sdf               0,06   201,29  114,44   87,57     4,13     1,13    53,31     1,26    6,25   1,67  33,76
sde               0,00     0,00    0,00    0,00     0,00     0,00     9,70     0,00    0,10   0,10   0,00
sdc               0,00    33,48   26,08    3,30     1,13     0,14    88,78     0,14    4,71   3,12   9,17
sdd               0,01    57,83   36,55    4,50     2,38     0,24   130,98     0,22    5,41   2,52  10,33
sda               1,75     8,94    4,56    3,70     0,12     0,05    41,81     0,04    4,33   0,93   0,77
sdg               0,01   119,06    1,38    1,03     0,17     0,47   540,98     1,00  415,16   6,24   1,50
dm-0              0,00     0,00    4,26   11,39     0,11     0,04    20,37     0,28   18,13   0,46   0,71
dm-1              0,00     0,00    2,05    1,25     0,01     0,00     8,00     0,04   12,44   0,37   0,12
dm-2              0,00     0,00  233,98  974,64     9,74     3,81    22,96     2,13    1,60   0,43  51,47

4:30

Птн Июл  8 04:30:06 MSK 2016

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           9,38    0,00    1,02    1,82    0,00   87,78

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,01   440,81   55,48   25,17     1,94     1,82    95,37     0,29    3,62   1,96  15,82
sdf               0,06   201,04  114,47   87,46     4,14     1,13    53,43     1,26    6,25   1,67  33,78
sde               0,00     0,00    0,00    0,00     0,00     0,00     9,70     0,00    0,10   0,10   0,00
sdc               0,00    33,44   26,10    3,30     1,13     0,14    88,79     0,14    4,71   3,12   9,17
sdd               0,01    57,76   36,79    4,50     2,39     0,24   130,76     0,22    5,39   2,51  10,36
sda               1,74     8,94    4,56    3,70     0,12     0,05    41,80     0,04    4,33   0,93   0,77
sdg               0,01   118,90    1,38    1,03     0,17     0,47   540,98     1,00  415,16   6,24   1,50
dm-0              0,00     0,00    4,26   11,38     0,11     0,04    20,36     0,28   18,12   0,46   0,71
dm-1              0,00     0,00    2,04    1,25     0,01     0,00     8,00     0,04   12,44   0,37   0,12
dm-2              0,00     0,00  234,30  973,41     9,77     3,80    23,01     2,13    1,60   0,43  51,53


В итоге у нас 2 неизвестных:
1) почему график показывает 100% утила, когда он ~51%
2) Почему значения на iostat почти не меняются, а в графике меняются.

Я прям чувствую, что кто-то обманывает... Но кто и зачем - не понятно.

PIKNIK ()
Ответ на: комментарий от PIKNIK

Как iostat запускаешь? Надеюсь, ты в курсе, что первое измерение в iostat надо отбрасывать, т.к. это средние значения с момента загрузки ОС? Либо запускать с опцией -y.

bigbit ★★★★★ ()
Ответ на: комментарий от PIKNIK

Впоимал нужные пики утила.

10.07.2016 04:30:24
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1,57    0,00    0,37    2,86    0,00   95,20

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,00     5,67    0,10    2,50     0,00     0,03    25,74     0,00    1,45   1,33   0,35
sdf               0,00     2,80   82,50    6,27    11,43     0,04   264,53     1,32   14,85   9,68  85,90
sde               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,10    0,23    0,10     0,03     0,00   209,60     0,00    3,00   2,30   0,08
sdd               0,00     0,33   11,27    0,33     1,54     0,00   271,59     0,20   17,62  11,45  13,28
sda               0,00     7,37    2,23    3,27     0,06     0,04    36,46     0,01    1,28   0,88   0,48
sdg               0,00     1,07    0,50    1,07     0,02     0,01    39,83     0,00    1,96   0,96   0,15
dm-0              0,00     0,00    2,23   10,63     0,06     0,04    15,59     0,01    1,07   0,38   0,49
dm-1              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00   0,00   0,00
dm-2              0,00     0,00   94,63   20,23    13,03     0,08   233,66     1,54   13,41   8,62  99,04


10.07.2016 04:35:24
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1,87    0,00    0,48    2,38    0,00   95,27

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,00     1,43  143,80    1,07    19,22     0,01   271,80     0,51    3,54   2,10  30,44
sdf               0,00     2,17    3,37   21,27     0,03     0,09    10,50     0,03    1,11   1,02   2,52
sde               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,40  280,93    1,07    37,38     0,01   271,48     1,00    3,56   2,10  59,36
sdd               0,00     0,00   37,03    0,00     4,86     0,00   268,79     0,14    3,73   2,24   8,30
sda               0,00     2,30    1,77    1,93     0,04     0,02    30,99     0,00    1,34   0,67   0,25
sdg               0,00     0,17    0,00    0,17     0,00     0,00    16,00     0,00    0,80   0,80   0,01
dm-0              0,00     0,00    1,77    4,23     0,04     0,02    19,11     0,01    1,38   0,41   0,25
dm-1              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00   0,00   0,00
dm-2              0,00     0,00  465,13   27,73    61,49     0,11   255,95     1,69    3,43   1,98  97,58


11.07.2016 11:01:40
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          15,30    0,00    2,47    4,26    0,00   77,98

Device:         rrqm/s   wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await  svctm  %util
sdb               0,00    31,63  233,77   13,17    10,08     0,18    85,02     0,86    3,47   2,12  52,45
sdf               0,00    93,43  388,47  174,53     6,73     1,05    28,29     2,29    4,07   1,68  94,58
sde               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    21,93  124,10    5,20     3,92     0,11    63,72     0,57    4,43   2,97  38,41
sdd               0,00     4,93   83,53    6,53     1,42     0,04    33,40     0,43    4,83   3,30  29,75
sda               0,93     6,80    2,93    2,93     0,06     0,04    34,45     0,01    1,59   1,20   0,70
sdg               0,00     2,53    2,07    2,07     0,08     0,02    49,74     0,03    6,90   3,73   1,54
dm-0              0,00     0,00    3,90    9,73     0,06     0,04    14,83     0,03    2,24   0,52   0,71
dm-1              0,00     0,00    0,00    0,00     0,00     0,00     0,00     0,00    0,00   0,00   0,00
dm-2              0,00     0,00  832,00  355,93    22,23     1,39    40,73     4,44    3,73   0,84  99,43

В первом выводе у нас имеется 99% утила при одном лишь чтении в 13МБ/с, а на втором (разница 5 минут) уже 97% утила при чтении в 61МБ/с. Сверил с графиком - он корректно вырисовывает цифры r/s и w/s. То есть непонятна разница, почему утил может пикануть при 13МБ/c чтении, а может при 61МБ/с чтении.

Для сравнения третий вывод - это вывод пика днём.

В общем вопрос всё тот же: почему утил держится на 100%, но при этом жесткий диск на чтение может показывать несоизмеримо разные значения...

Мне всё же кажется, что это проделки виртуальной машины (может IOstat считает read и write от ОС, а утил от драйвера HDD, который эмулируется сервером виртуализации). Но это только догадки.

PIKNIK ()
Ответ на: комментарий от PIKNIK

Ну все правильно. Разберем первое измерение: (94,63+20,23)*8,62 = 990.0932. Т.е. 990 миллисекнд из 1000 (1 секунда) диск чем-то занимался. Т.е. его утилизация и правда 99%. Он сделал всего 114 IO/s, но делал их очень медленно - обрати внимание на service_time=8,62. Наверняка ночью идут бэкапы, и возрастает время отклика. С этими данными уже можно идти к админам гипервизора и стораджа и разбираться, какого фига и доколе (шутка, 8 ms это тоже неплохо).

По остальным измерениям аналогично. Там service_time отличный, но и IO/s намного больше, что и дает ту же утилизацию в 100%.

Вообще, тебя не должно удивлять то, что диск выдает 100% утилизвцию при малом количестве IO/s и ту же 100% утилизацию при большом. Метод подсчета утилизации не учитывает, что некоторые диски могут делать несколько операций одновремено. Другими словами, если диск занят на 100%, это не означает, что он не может делать больше. Это отнсится к RAID и в особенности к SSD. Да, диск был занят 100% времени, но если ему еще поддать IO/s, то он их сделает, т.к. может делать несколько операций параллельно.

bigbit ★★★★★ ()
Последнее исправление: bigbit (всего исправлений: 1)
Ответ на: комментарий от bigbit

Да, действительно полезное говоришь. Спасибо!

Очень приятно пообщаться со знающими людьми. Буду и дальше продолжать развиваться в этом вопросе!

Спасибо всем за всё! Удачи)

PIKNIK ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.