Оптимизация производительности. Часть 4. fcstat
Рассмотрим еще одну полезную команду для глубокой диагностики, позволяющую находить и анализировать проблемы канала передачи данных от диска к контроллерам на системах, использующих интерфейс FC к дискам. Это системы с полками DS14, которые постепенно заменяются на дисковые полки, работающие по SAS, в новых моделях FAS, но все еще широко распространенные в продакшне.
Как вы помните из первой серии этой темы, проблемы в канале передачи между дисками и контроллером системы хранения занимает в сформулированном там Top5 проблем, вызывающих падение производительности, второе место.
na_fcstat - Fibre Channel stats functions
Формат:
fcstat link_stats [ adapter number ]
fcstat fcal_stats [ adapter number ]
fcstat device_map [ adapter number ]
Описание:
??спользуйте команду fcstat чтобы отобразить:
(a) статистику соединений для дисков в петле Fibre Channel,
(b) внутреннюю статистику, собираемую драйвером Fibre Channel, и
(c) размещение и карту относительного расположения дисков в петле Fibre Channel.
Подкоманды:
link_stats
Все диски хранят ряд полезных метрик, связанных с событиями канала передачи даных. Наиболее интересные для нас это ошибки линка (link failures), потеря синхронизма (loss-of-sync), а также количество кадров, принятых с ошибками CRC (CRC errors).
Счетчик ошибок линка (link failure)
Диск записывает число событий потери линка (link failure), это просходит, когда диск теряет синхронизацию с тактовым генератором интерфейса на время, большее чем R_T_TOV, обычно это порядка миллисекунд. Ошибка link failure приводит к презапуску процедуры инициализации петли.
Счетчик потерь синхронизма (loss of sync)
Диск отмечает событие loss of sync, если теряет синхронизацию с тактовым генератором на период меньше десятков микросекунд, и затем восстанавливает с ним синхронизацию. Число link failures включено в этот счетчик.
Счетчик неверного CRC кадра (frame CRC error)
Каждый кадр, который получает диск, содержит контрольную сумму, которая покрывает весь фрейм. Если после приема кадра контрольная сумма не совпадает, увеличивается счетчик invalid CRC, и кадр отбрасывается.
Каждое из трех событий может, при определенных условиях, рассматриваться как нарушение целостности петли FC. Ошибка link failure считается наиболее серьезной из трех, так как указывает на значительные, долгоживущие, в масштабах FC, проблемы передачи, на участке перед диском. Все три события обычно указывают на проблемы потерь кадров, и вызывают пропадания кадров в потоке передачи, таймауты команд и, как следствие, повторные отдачи команд SCSI контроллером. Все три события указывают на проблемы в FC-петле передачи данных.
Отметьте, что нарушение целостности FC-петли этого типа, даже вызывающее data underruns и/или таймауты команд SCSI, не приводит к повреждению данных как таковых. Адаптер хоста обнаруживает эти проблемы и перепосылает соответствующие команды. В наихудшем варианте развития событий вы можете столкнуться с падением производительности.
В общем случае, все счетчики сохраняют свои значения после перезагрузок и сигнала сброса (reset) для дисков, и обнуляются только при физическом отключении дисков от электропитания.
fcal_stats
Драйвер хост-адаптера Fibre Channel собирает статистику о различных обнаруженых ошибках, возникших exception, и предпринятых действиях. В общем случае, интерпретация обычно требует понимания деталей внутренней работы драйвера. Однако некоторые счетчики показывают статистику отдельно по дискам, (например device_underrun_cnt, device_overrun_cnt, device_timeout_cnt) и могут быть полезны при обнаружении потенциально проблемных дисков.
Счетчики обнуляются при перезагрузке контроллера.
device_map
Петля Fibre Channel, как указывает нам ее название, это, с точки зрения передачи фрейма, логическая замкнутая петля. Поэтому, проблема с компонентом "выше по течению", будет наблюдаться как проблема для устройств "ниже по течению".
Относительное физическое положение дисков в петле не всегда непосредственно соотносится с их loop IDs (которые, в свою очередь, определяются заданием shelf IDs). Подкоманда device_map нужна для того, чтобы определить относительное физическое место нужного устройства в петле.
Отображаемая информация делится на две части, (a) относительная физическая позиция устройства в петле, если бы петля была единым плоским линейным пространством и (b) размещение устройств по полкам, что помогает найти корреляцию между конкретным диском и его размещением в полке.
Пример использования:
Предположим, вы наблюдаете некие проблемы на системе хранения, выражающиеся в ошибках FC-канала.
Например вы видите в syslog системы, что SCSI-команда отменена(abort) и подана повторно (retried) по причине parity/CRC errors,
Sun Apr 18 06:02:11 GMT [isp2100_main]: Disk 0a.43(0xfffffc0000dfba48): op
0×2a:008cbf38:0010 sector 9223976 aborted command - Parity/CRC error (b 47, 0)
или команда SCSI отменена и передана заново по причине data underrun errors,
Sun Feb 28 01:46:06 GMT [isp2100_main]: Disk 0a.62: Data underrun (0xfffffc0000c16dd0,0×28,0)
Чтобы определить, в какой FC-петле находится сбойный компонент, мы начнем сбор данных с помощью link_stats. Мы подозреваем, основываясь на приведенных выше двух сообщениях, что причина находится где-то перед дисками 0a.62 и 0a.43.
filer> fcstat link_stats 0a
Device Link Loss of Loss of Invalid Frame In Frame Out
Failure Sync Signal CRC count count
count count count count
0a.0 22 688 0 0 85700 105514
0a.1 0 215 0 0 88467 108223
0a.2 0 30 0 0 88229 107859
0a.3 0 75 0 0 85981 105647
0a.4 1 30 0 0 86958 105326
0a.5 0 29 0 0 86635 107651
0a.6 0 29 0 0 130159 156811
0a.8 0 30 0 0 193487 189231
0a.9 0 31 0 0 201382 191864
0a.10 0 30 0 0 34 42
0a.11 0 32 0 0 231161 218013
0a.12 1 43 0 0 36513 19815
0a.13 0 30 0 0 182970 183862
0a.14 0 29 0 0 183365 185091
0a.16 0 30 0 0 87770 107862
0a.17 0 30 0 0 86321 105501
0a.18 0 31 0 0 88892 108832
0a.19 0 30 0 0 88183 107521
0a.20 1 31 0 0 87375 109211
0a.21 0 30 0 0 87136 106172
0a.22 0 29 0 0 104973 125573
0a.24 0 30 0 0 112242 137036
0a.25 0 30 0 0 106090 130400
0a.26 0 30 0 0 105671 129123
0a.27 0 30 0 0 105690 126090
0a.28 0 29 0 0 105613 126339
0a.29 0 29 0 0 105125 127903
0a.30 0 29 0 0 110796 132422
0a.32 1 65387 0 0 103633 124969
0a.33 0 414 0 0 88639 109109
0a.34 0 142 0 0 88372 107148
0a.35 0 129 0 0 85495 105253
0a.36 2 934 0 0 96899 120639
0a.37 0 29 0 0 351265 335597
0a.38 0 29 0 0 351008 334888
0a.40 0 30 0 0 87951 106965
0a.41 0 31 0 0 86146 105930
0a.42 0 30 0 0 88140 107450
0a.43 0 30 0 0 96994 120934
0a.44 1 30 0 0 394056 372306
0a.45 0 29 0 0 87067 105831
0a.46 0 30 0 0 89177 107585
0a.48 0 30 0 0 87592 106658
0a.49 0 30 0 0 91692 112696
0a.50 0 30 0 0 85998 104912
0a.51 0 32 0 0 86694 106126
0a.52 1 186 0 0 85942 105626
0a.53 0 29 0 0 87278 105760
0a.54 0 30 0 0 103682 124354
0a.56 0 30 0 0 30517 16449
0a.57 0 31 0 0 29266 17378
0a.58 0 29 0 0 28906 17334
0a.59 0 30 0 0 29234 16880
0a.60 0 29 0 0 41727 14465
0a.61 0 29 0 0 360425 241067
0a.62 0 30 0 0 32684 19860
0a.ha 0 1 1 0 6839257 6339541
Мы видим, что счетчик loss of sync показывает довольно высокие значения у трех дисков, 0a.0 (count = 688), 0a.32 (count = 65387) и 0a.36 (count = 934).
Следующим шагом мы проверим их относительное физическое расположение при помощи подкоманды device_map.
filer> fcstat device_map 0a
Loop Map for adapter 0a:
Raw LIRP Frame: Port Count 57
17 ef e8 e4 e2 d9 d6 d5 d4 cd cc cb ca c3 bc ba
b9 b2 b1 ae ad a7 a6 a5 a3 98 97 90 8f 80 7c 7a
79 76 75 74 88 84 82 9f 9e 9d ac ab aa b6 b5 b4
c9 c7 c6 d3 d2 d1 e1 e0 dc
Translated Map: Port Count 57
119 0 1 2 3 8 9 10 11 16 17 18 19 24 25 26
27 32 33 34 35 40 41 42 43 48 49 50 51 56 57 58
59 60 61 62 52 53 54 44 45 46 36 37 38 28 29 30
20 21 22 12 13 14 4 5 6
Eurologic shelf mapping:
Shelf 0: – 6 5 4 3 2 1 0
Shelf 1: — 14 13 12 11 10 9 8
Shelf 2: — 22 21 20 19 18 17 16
Shelf 3: — 30 29 28 27 26 25 24
Shelf 4: — 38 37 36 35 34 33 32
Shelf 5: — 46 45 44 43 42 41 40
Shelf 6: — 54 53 52 51 50 49 48
Shelf 7: — 62 61 60 59 58 57 56
Глядя на translated map, мы видим, что диск номер 0 это первый диск в петле, идущий сразу после хост-адаптера. Отметьте, что порт хост-адаптера (119) будет всегда показываться первым на position map. Так как каждая перезагрузка системы вызывает реинициализацию хост-адаптера, то первый диск в петле в этом случае будет видеть "обрыв" и переподключение. По этой причине мы можем проигнорировать высокий уровень loss of sync у этого драйва, так как он, скорее всего, вызван этой причиной.
Далее мы заметим , что диск 32 находится сразу за диском 27, и что он первый диск на полке 4. Мы видим, что статистика соединения для диска 27 довольно чистая. Поэтому можно с достаточно высокой вероятностью сделать вывод, что компонент перед диском 32 и после диска 27 является источником проблем, в нашем случае это кабель между полками 3 и 4, или, возможно, сам диск 32, или же сама эта полка.
Поэтому план действий будет: заменить кабель между полками 3 и 4, если это не поможет, то заменить диск 32, и, наконец, если это не привело к решению проблемы, заменить дисковую полку 4 целиком.
приветствую.
Роман, данные команды выполнялись на 7 версии ONTAP?
Mc.Sim:
Дело давнее, уже плохо помню, но в документации на 7.3.7 такая команда есть.
https://library.netapp.com/ecmdocs/ECMP1113837/html/man1/na_fcstat.1.html
Сори, прошлый коммент можно удалить)
Да и этот тоже )
Команды актуальны как для 7 так и для 8 )
Я просто сейчас на D7ADM учусь, скоро напишу обзор курса и некоторое мнение у себя на страничке.
Вот делаю лабы, интенсивно читаю Ваши статьи )