Что такое регистровая RDIMM-память и зачем нужен ECC
Содержание
Содержание
Что такое RDIMM, для чего нужен регистр
Оперативная память в сокращении может называться ОЗУ. Ее также называют оперативным запоминающим устройством, памятью с произвольным доступом, RAM. ОЗУ также можно ласково назвать «оперативкой». RAM логически состоит из ячеек памяти. Каждая ячейка хранит количество бит, равное степени двойки. 2^3=8 бит, 2^4=16 бит, 2^5=32 бит, 2^6=64 бит. У каждой ячейки памяти есть свой адрес. Адрес ячейки «оперативки» выглядит следующим образом: FFFFFFFFF.
Регистровой памятью (Registered DIMM, RDIMM) называют модули ОЗУ, которые имеют на «борту» отдельный регистр для адресов «оперативки» и команд.
Контроллер ОЗУ в процессоре обращается к регистрам, регистры же направляют информацию в микросхемы памяти. Такая организация «оперативки» позволяет увеличить количество модулей на канал RAM за счет снижения электрической нагрузки на контроллер памяти. Контроллер находится либо в северном мосту материнской платы, либо в процессоре. Также вдвое уменьшается емкость модулей памяти, если модуль содержит два регистра.
Регистровая память отличается от обычной, небуферизованной «оперативки», более высокими задержками при чтени и записи информации в модулях ОЗУ. Это происходит из-за того, что модули содержат дополнительный промежуточный узел — буфер. Чтение/запись производит контроллер памяти в процессоре или северном мосту материнской платы. Работа с этим узлом, естественно, требует дополнительного времени работы. Но при этом отметим то, что уменьшается нагрузка на процессор, так как буфер отвечает за непосредственную работу с банками памяти.
Каждый модуль ОЗУ содержит микросхему SPD (Serial Presence Detect). Данная микросхема содержит прошивку модуля памяти. Эта прошивка определяет работу более простых микросхем.
Регистровая и буферизованная память — одно и то же
Регистровая память — это буферизованная память. Как было обозначено выше — регистр — это буфер для адресов и команд при работе с памятью. Процессор или северный мост материнской платы отправляют данные, адреса ячеек памяти и команды. Регистры выполняют команды по указанным адресам.
Такая память стоит дороже обычной, небуферизованной памяти. Используется она исключительно в серверах, потому что позволяет получить больший объем памяти на один процессор в сервере.
Что такое FB-DIMM
FB-DIMM, Full Buffered Dual Inline Memory Module — полностью буферизованная DIMM — это планки ОЗУ DDR2. Плашки ОЗУ при этом используют последовательный интерфейс передачи данных между модулями памяти и контроллером «оперативки». В отличие от стандартных модулей RAM, они используют не 240-pin, а 96-pin из 240 возможных пинов. Такая организация работы позволяет организовывать с помощью контроллеров памяти большее количество каналов на материнской плате. Вплоть до 6 каналов. Данные модули памяти несовместимы с обычными планками «оперативки».
Последовательный интерфейс — это интерфейс передачи данных, при работе которого данные передаются по одному проводу или дорожке на печатной плате друг за другом. Таких проводов (дорожек) может быть несколько, но принцип передачи данных при этом не меняется.
Advanced Memory Buffer, AMB — микросхема, которая организует работу модулей памяти FB-DIMM. Эта микросхема располагается прямо на планке «оперативки».
В один канал памяти при такой организации работы модулей ОЗУ возможна установка до 8 планок «оперативки». Это позволяет, в случае с RAM DDR2, добиться емкости ОЗУ до 192 Гигабайт на один сервер.
В связи с тем, что микросхема AMB добавляет свои задержки в работу модуля памяти, данные плашки работают несколько медленнее модулей RDIMM, регистровой ОЗУ. Но, так как общее количество памяти в данном случае возрастает, то общая производительность системы также возрастает.
Краткая история оперативной памяти
Ниже приводится краткая история развития типов ОЗУ. Начинаем мы ее со времени выпуска памяти SDRAM. Это произошло в 1996 году. Пропускная способность данной RAM составила 1.1 GBps.
Следующей памятью в таблице указана память RDRAM. Она была выпущена в 1998 году. Это была абсолютно новая архитектура ОЗУ. Совершенно новый стандарт от фирмы Rambus. Было выпущено несколько поколений памяти. Она отличалась более высокими частотами, стабильными таймингами, вот только при этом задержки функционирования памяти были немного выше. К сожалению, данная память не выдержала конкуренции на рынке и вынуждена была сойти со сцены рынка памяти.
Следующими в таблице указаны линейки RAM DDR. Double Data Rate Synchronous Dynamic Random Access Memory — синхронная динамическая память с произвольным доступом и удвоенной скоростью передачи данных. Этот стандарт ОЗУ был выпущен на рынок в 2000 году. Данная память используется и на текущий момент. При этом развивается стандарт для достижения более высоких скоростей функционирования.
Последним типом RAM DDR, выпущенным на рынок, на данный момент является память DDR4.
Серверная память: DDR3/4, Buffered, …unBuffered, ECC? Помогаем разобраться с выбором памяти для различных платформ
Пока компьютерный прогресс бежит сломя голову, в стане серверов остаются доступными совершенно различные конфигурации, как современные, так и 5-10 летние железки. И в момент подбора комплектующих для апгрейда возникает закономерный вопрос, а какую память и в каком количестве доустанавливать или менять? Помимо привычного разъема DIMM используется и SO-DIMM, а о том, что бывает память с ECC и без нее, буферизованная и нет, знает каждый школьник.

Платформы Intel
За более чем 40-летнюю историю существования компания Intel разработала и выпустила десятки серверных платформ. Сейчас две из них пользуются повышенным вниманием: V3/V4 Xeon процессоры распространены благодаря относительно дешевым ценам в пересчете на 1 ядро, а также Xeon Scalable из-за неимоверного разнообразия процессоров.
Чтобы не запутаться в версиях/ревизиях посмотрим на типы процессоров Intel, разделив их на большие группы по архитектуре.
LGA 1151
1151 сокет использовался для 3 платформ продолжительное время. Начальным этапом стали процессоры Skylake-S, содержащие 4 физических ядра. Потом их сменили процессоры Kaby Lake-S, и наконец завершающим семейством стали CPU Coffee Lake-S WS. Все поколения оснащались 2-канальным контроллером памяти. По мере совершенствования архитектуры он перешел с частоты 1866 МГц к 2666 МГц. Платы на LGA 1151 поддерживают до 4 разъемов DIMM (2 модуля Х 2 канала), как с ECC, так и без нее. Совсем редко попадаются конфигурации с DDR3L памятью (от 1333 до 1600 МГц). Максимальный объем памяти 64 Гбайт.
Для Skylake, Kaby Lake и Coffee Lake LGA 1151 можно использовать DDR4 память с ECC частотой от 1866МГц до 2666 МГц (как не буферизированная, так и регистровая). Существует 2 типа плат: с 2 разъемами и с 4 разъемами DIMM. Для 2 разъемов используйте парные модули, чтобы задействовать оба канала. Для 4 разъемов устанавливайте память парами (2х DIMM в 2 канала или 4х DIMM в 2 канала). В зависимости от версии процессора используйте максимально разрешенную частоту для достижения максимальной производительности подсистемы памяти.
LGA 2066
Платформа LGA 2066 с процессорами Skylake-W поддерживают до 8 разъемов DIMM (2×4 канала), ECC с частотой от 1600 до 2666 МГц. Тип памяти DDR4. Максимальный объем памяти 512 Гбайт.
Для Skylake LGA 2066 можно использовать DDR4 память (ECC RDIMM, Registered ECC RDIMM, Registered ECC LRDIMM, Registered ECC LRDIMM) частотой 1600-2666МГц. Существует 2 основных конфигурации с 4 слотами и 8.
В материнскую плату с 4/8 слотами лучше всего устанавливать память по 4 модуля для максимальной производительности. Для достижения максимальной емкости задействуйте 8 слотов. В зависимости от версии процессора используйте максимально разрешенную частоту для достижения максимальной производительности подсистемы памяти.
LGA 3647
Платформа LGA 3647 поддерживает до 12 разъемов DIMM (2×6 каналов), ECC с частотой от 2133 до 2666 МГц. Тип памяти DDR4. В список не включены процессоры Xeon Platinum 92ХХ.
8 слотов памяти при 6 (А, B, C, D, E, F) каналах. Два канала разделены на ранги (А1 ранг + А2 ранг и D1 + D2), типичная ситуация, когда «А» и «D» канал делят пополам. Допускается установка различных конфигураций, но наиболее производительная – установка 6 модулей без «2» рангов.
4 слота памяти при 6 (А, B, C, D, E, F) каналах. Из 6 каналов чаще всего выброшен канал «С» и «F». Другими словами, система из 6 канальной превращается в 4 канальную. Соответственно уменьшается пропускная способность и суммарная производительность.
6 и 12 слотов памяти прекрасно соотносятся с 6 канальными контроллерами памяти. Здесь все просто – для достижения максимальной скорости ПСП используем 6 или 12 модулей.
LGA 1200
Для Comet Lake-S LGA 1200 нужно использовать DDR4 память с и без ECC частотой до 2933 МГц. Существует 2 типа плат: с 2 разъемами и с 4 разъемами DIMM (SO-DIMM). Для 2 разъемов используйте парные модули, чтобы задействовать оба канала. Для 4 разъемов устанавливайте память парами (2х DIMM в 2 канала или 4х DIMM в 2 канала). В зависимости от версии процессора используйте максимально разрешенную частоту для достижения максимальной производительности подсистемы памяти.
LGA 4189 (v2)
Наиболее производительные платформы от Intel. Оговоримся сразу, Socket LGA 4189 и LGA 4189v2 не совместимы между собой. «Свежайшие» Ice Lake-SP появились совсем недавно и поддерживают память с частотой 3200 МГц. Фактическое размещение модулей может быть разным, как и конфигурации DIMM на материнских платах. В таблице нет ошибки с наименованиями. Intel действительно выпустила 2 поколения процессоров под разные сокеты с похожими названиями:
ark.intel.com/content/www/us/en/ark/products/codename/189143/cooper-lake.html#@Server
ark.intel.com/content/www/us/en/ark/products/codename/74979/ice-lake.html#@Server
Мало того, даже названия самих процессоров слишком похожи. Добавляет путаницы общее принадлежность CPU к «3rd Generation Intel Xeon Scalable Processors». В любом случае разбирать конфигурацию памяти лучше раздельно, из-за различий в количестве поддерживаемых каналов. Первая ревизия LGA 3647 оснащена контроллером памяти с 6 каналами. На рынке присутствуют платы со слотами кратными 3, и 6, где память подключается логично. Но встречаются модели с меньшим числом слотов DIMM. 4х DIMM вариант просто не задействует 2 из 6 каналов, а 8-ми модульные системы разделяют А и D канал на 2 банка (А1+А2, D1+D2). Выбор частот совместимых модулей велик – от 2666 до 3200 МГц.
Процессоры Ice Lake-SP поддерживают 8 каналов памяти, значит устанавливаются модули кратно 4 и 8. Конечно сейчас появятся в продаже материнские платы с конфигурацией DIMM 2+2 слота (это минус 4 канала памяти), ли с разделяемыми каналами на банки.
Тонкости подбора модулей в различных конфигурациях
Начиная с конца 2019 года производители микросхем постепенно начали переходить на нормы тех. процесса менее 20 нм. Это позволило удвоить объем памяти на модуле. К сожалению не все процессоры Intel способны работать с новыми планками. При выборе памяти для старых платформ убедитесь, что материнская плата получила обновление BIOS в котором заявлена совместимость с 16 Гбит микросхемами.
Список новых 16 Гбит модулей Kingston:
Простое правило наращивания частоты никто не отменял. Чем больше использованных каналов и выше частота памяти, тем выше производительность сервера. В конфигурациях, где материнская плата не реализует часть каналов скорость работы с памятью существенно ниже.
Пример установки 384Гб памяти в плату тремя различными способами. В первых двух неправильно заполненные каналы приводят к двукратному снижению ПСП. Оптимальный режим – это установка высокочастотной памяти по 1 планке в каждый канал без использования второго банка. Причем о ранговости обязательно нужно помнить!
2-ранговая память всегда будет быстрее 1-ранговой. Однако учтите, что не все системы могут работать с 2-ранговой памятью, установленной во все слоты памяти. Не стоит использовать 2-ранговуе модули в разделенных канала. И тем более смешивать их с 1-ранговыми.
Платы с разделенными каналами позволяют покупать сервера в минимальной комплектации экономя средства на начальном этапе. Дальнейший апгрейд подсистемы памяти часто происходит с ошибками. Практически любая материнская плата позволяет работать с 1 модулем, но в дальнейшем добавление модулей строго регламентируется производителем. Конечно идеальный вариант – это доустановка аналогичных планок, чтобы задействовать все каналы. Но стоимость комплектующих зачастую неподъемна. Поэтому, выбирая начальную конфигурацию с памятью, которая использует 1 банк из канала учитывайте особенности апгрейда. Деление каналов позволяет суммарно установить больше памяти в ущерб производительности.
Вернемся к конечному подбору модулей памяти. Быстрый и эффективный способ – выяснить причастность процессора/ов к определенному семейству. Для этого используйте сайт ark.intel.com. После определения посетите страницу сервера или материнской платы. Запишите название, и продолжите подбор на сайте в разделе «Manufacturer Qualification». Далее по названию вашей материнской платы «Motherboard» найдите подходящие модули памяти. Если в сервере уже установлено какое-то количество планок, то через сторонние утилиты или открыв сервер и найдя память запишите и выясните конфигурацию модуля. Вам важно понять ранговость, частоту, наличие ECC и т.п. А далее можно смело переходить на страницу выбора памяти с фиксированным BOM.
FAQ по серверной памяти
По умолчанию вся серверная память «де-факто» имеет поддержку ECC. Другое дело остальные характеристики. Их значения не всегда правильно трактуются.
UDIMM — обычная память для настольных компьютеров. У такой памяти в маркировке присутствует буква U (Unbuffered). Почему мы включаем такую память в обзор? Многие серверные 1-процессорные платы поддерживают помимо процессоров Xeon десктопные CPU. В них нет совместимости с ECC, поэтому допускается установка UDIMM в такие системы со всеми вытекающими последствиями.
ECC — любая память может быть с ЕСС и без. В сервера устанавливается только с ECC. Большинство ошибок при работе памяти удается исправить во время работы, даже если они появляются, не теряя данные.
Registered DIMM (FBDIMM) — регистровая память с коррекцией ошибок (ECC). Позволяет масштабировать емкость используемых рангов без появления ошибок и перегрузки контроллера памяти в процессоре. Установленная микросхема берет на себя управление адресами.
LRDIMM — эволюционное развитие Registered DIMM (FBDIMM). На такие модули ставят вспомогательный контроллер. Он управляет как адресами, так и питанием модуля. Дополнительный бонус – создание памяти глубиной до 4 рангов и более высокая частота работы в сравнении с Registered DIMM. В результате LRDIMM обладает массой положительных свойств за исключением цены.
Видимый эффект от применения LRDIMM в сравнении с Registered DIMM.
Неочевидные характеристики
Частота и тайминги: покупать память с частотой выше поддерживаемой вашим сервером не приведет к росту пропускной способности. Это 100% аксиома, потому что редкий случай, когда материнская плата позволяет менять частоту. Классический вариант – поддерживаемая частота считывается из SPD микросхемы и выбирается поддерживаемая процессором.
Ранги памяти: 1R,2R и 4R.
Модули памяти могут быть одно, двух, четырех или даже восьмиранговыми. Самые распространенные – это 1-2 ранговые модули, которые не накладывают множество ограничений в отличие от 4-8 ранговых. Производители материнских плат в инструкциях подробно расписывают поддерживаемые конфигурации пулов памяти при различной ранговости памяти. Часть оборудования позволяет устанавливать разноранговые модули, но не во все разъемы.
Чип RCD: Rambus или IDT.
Register Clock Driver (RCD) – микросхема управления, устанавливаемая на модули. Есть 2 крупных производителя (Rambus и IDT). Нет никаких ограничений в выборе того или иного производителя. Используется в паре с буферами и температурными сенсорами.
Схема подбора памяти
Выводы
→ В разделе «Manufacturer Qualification» выбирается память по производителю системной платы:
выбрать
→ В разделе памяти с фиксированным BOM подбирается память исходя из требуемых характеристик: подобрать
Для получения дополнительной информации о продуктах Kingston обращайтесь на официальный сайт компании.
Следует ли покупать память ECC?
Джефф Этвуд, возможно, самый читаемый программист-блоггер, опубликовал пост против использования памяти ECC. Как я понимаю, его доводы такие:
1. В Google не использовали ECC в 1999 году
Если вы делаете нечто только из-за того, что когда-то это сделал Google, то попробуйте:
A. Поместите свои серверы в транспортные контейнеры.
Сегодня все ещё пишут статьи о том, что это — отличная идея, хотя Google всего лишь провёл эксперимент, который был расценен как неудачный. Оказывается, даже эксперименты Google не всегда удаются. Фактически, их известное пристрастие к «прорывным проектам» («луншоты») означает, что у них имеется больше неудачных экспериментов, чем у большинства компаний. По-моему, для них это существенное конкурентное преимущество. Не стоит делать это преимущество больше, чем оно есть, слепо копируя провалившиеся эксперименты.
B. Вызывайте пожары в своих собственных центрах обработки данных.
Часть поста Этвуда обсуждает, насколько удивительными были эти серверы:
Некоторые могут взглянуть на эти ранние серверы Google и увидеть непрофессионализм в отношении опасности пожара. Не я. Я вижу здесь дальновидное понимание того, как недорогое стандартное оборудование будет формировать современный интернет.
Последняя часть высказанного — это правда. Но и в первой части есть доля правды. Когда Google начал разрабатывать свои собственные платы, одно их поколение имело проблему «роста» (1 ), вызвавшую ненулевое число возгораний.
Кстати, если вы перейдёте к посту Джеффа и посмотрите на фотографию, на которую ссылается цитата, то вы увидите, что на платах много кабелей-перемычек. Это вызывало проблемы и было исправлено в следующем поколении оборудования. Также можно видеть довольно неряшливо выполненную кабельную разводку, что дополнительно вызывало проблемы и что также было быстро устранено. Были и другие проблемы, но я оставлю их в качестве упражнения для читателя.
C. Создавайте серверы, которые травмируют ваших сотрудников
Острые грани одного из поколений серверов Google заработали им репутацию сделанных из «бритвенных лезвий и ненависти».
D. Создавайте свою погоду в ваших центрах обработки данных
После разговоров с сотрудниками многих крупных технологических компаний создаётся впечатление, что в большинстве компаний был такой климат-контроль, что в их центрах обработки данных образовывались облака или туман. Можно было бы назвать это расчётливым и коварным планом Google по воспроизведению сиэтловской погоды, чтобы переманивать сотрудников Microsoft. Как вариант, это мог быть план создания в буквальном смысле «облачных вычислений». А может и нет.
Обратите внимание, что всё указанное Google попробовал, а затем изменил. Делать ошибки, а затем устранять их — распространённое явление в любой организации, успешно занимающейся разработками. Если вы боготворите инженерную практику, то следует держаться, по крайней мере, за современную практику, а не за сделанное в 1999 году.
Когда Google использовал серверы без ECC в 1999 году, на них проявился ряд симптомов, которые, как в конце концов выяснилось, были вызваны повреждением памяти. В том числе индекс поиска, который возвращал фактически случайные результаты в запросы. Реальный режим сбоя здесь поучителен. Я часто слышу, что на этих машинах можно игнорировать ECC, потому что ошибки в отдельных результатах являются допустимыми. Но даже если вы считаете для себя случайные ошибки допустимыми, их игнорирование означает, что существует опасность полного повреждения данных, если только не проводить тщательный анализ с целью убедиться, что одна ошибка может лишь незначительно исказить один результат.
В исследованиях, проведённых на файловых системах, неоднократно было показано, что, несмотря на героические попытки создания систем, устойчивых к одной ошибке, сделать это крайне сложно. По существу, каждая сильно тестируемая файловая система может иметь серьёзный сбой из-за единственной ошибки (см. результаты работы исследовательской группы Андреа и Ремзи, Висконсин, если вам интересно это). Я не собираюсь нападать на разработчиков файловых систем. Они лучше разбираются в таком анализе, чем 99,9% программистов. Просто неоднократно уже было показано, что эта проблема настолько трудная, что люди не могут достаточно обоснованно обсуждать её, и автоматизированное инструментальное средство для такого анализа ещё далеко от процесса простого нажатия кнопки. В своём справочнике по компьютерной обработке складских данных Google обсуждает обнаружение и исправление ошибок, и память ECC рассматривается как самый правильный вариант, когда очевидно, что необходимо использовать исправление ошибок аппаратного обеспечения (2 ).
Google имеет отличную инфраструктуру. Из того, что я слышал об инфраструктуре в других крупных инфотехнологических компаниях, Google представляется лучшим в мире. Но это не значит, что следует копировать всё, что они делают. Даже если рассматривать только их хорошие идеи, для большинства компаний нет смысла копировать их. Они создали замену планировщику перехвата работ Linux, который использует как аппаратную информацию времени выполнения, так и статические трассировки, чтобы позволить им использовать преимущества нового оборудования в серверных процессорах Intel, что позволяет динамически разбивать кэш между ядрами. Если использовать это на всём их оборудовании, то Google сэкономит за неделю больше денег, чем компания Stack Exchange потратила на все свои машины за всю свою историю. Означает ли это, что вы должны скопировать Google? Нет, если на вас уже не свалилась манна небесная, например, в виде того, что ваша основная инфраструктура написана на высокооптимизированном C++, а не на Java или (не дай бог) Ruby. И дело в том, что для подавляющего большинства компаний написание программ на языке, который влечёт 20-кратное снижение производительности, — совершенно разумное решение.
2. Большинство ошибок ОЗУ — это систематические ошибки
Наше исследование имеет несколько основных результатов. Во-первых, мы обнаружили, что приблизительно 70% сбоев DRAM является повторяющимися (например, постоянными) сбоями, тогда как только 30% является неустойчивыми (перемежающимися) сбоями. Во-вторых, мы обнаружили, что большие многобитовые сбои, такие как сбои, которые затрагивают всю строку, столбец или блок, составляют более 40% всех сбоев DRAM. В-третьих, мы обнаружили, что почти 5% отказов DRAM влияют на схемы на уровне платы, такие как линии данных (DQ) или стробирования (DQS). Наконец, мы обнаружили, что функция Chipkill уменьшила частоту отказов системы, вызываемих сбоями DRAM, в 36 раз.
Цитата кажется несколько ироничной, поскольку она выглядит не аргументом против ECC, а аргументом за Chipkill — определённый класс ECC. Отложив это в сторону, пост Джеффа указывает, что систематические ошибки встречаются в два раза чаще, чем ошибки случайные. Затем пост сообщает, что они запускают memtest на своих машинах, когда происходят систематические ошибки.
Во-первых, соотношение 2:1 не столь велико, чтобы просто игнорировать случайные ошибки. Во-вторых, пост подразумевает веру Джеффа, что систематические ошибки, по существу, неизменны и не могут проявиться через некоторое время. Это неверно. Электроника изнашивается точно так же, как изнашиваются механические устройства. Механизмы разные, но эффекты схожи. Действительно, если сравнить анализ надёжности чипов с другими видами анализа надёжности, то можно видеть, что они часто используют одни и те же семейства распределений для моделирования отказов. В-третьих, ход рассуждений Джеффа подразумевает, что ECC не может помочь в обнаружении или исправлении ошибок, что не только неверно, но и прямо противоречит цитате.
Итак, как часто вы собираетесь запускать memtest на своих машинах в попытках поймать эти системные ошибки и сколько потерь данных вы готовы пережить? Одно из ключевых применений ECC состоит не в том, чтобы исправить ошибки, а в том, чтобы сигнализировать об ошибках, благодаря чему оборудование может быть заменено до того, как произойдёт «silent corruption» («скрытое повреждение данных»). Кто согласится закрывать всё на машине каждый день, чтобы запустить memtest? Это было бы намного дороже, чем просто купить ECC-память. И даже если бы вы смогли убедить гонять тестирование памяти, memtest не обнаружил бы столько ошибок, сколько сможет найти ECC.
Когда я работал в компании с парком в примерно тысячу машин, мы заметили, что у нас происходят странные отказы при проверке целостности данных, и примерно через полгода мы поняли, что отказы на одних машинах более вероятны, чем на других. Эти отказы были довольно редкими (может быть, пару раз в неделю в среднем), поэтому потребовалось много времени для накопления информации и понимания, что же происходит. Без знания причины анализ логов с целью понять, что ошибки были вызваны единичными случаями инвертирования битов (с большой вероятностью), также был нетривиальным. Нам повезло, что в качестве побочного эффекта процесса, который мы использовали, контрольные суммы вычислялись в отдельном процессе на другой машине в разное время, так что ошибка не могла исказить результат и распространить это повреждение на контрольную сумму.
Если вы просто пытаетесь защитить себя с помощью контрольных сумм в памяти, есть немалая вероятность того, что вы выполните операцию вычисления контрольной суммы на уже повреждённых данных и получите правильную контрольную сумму неправильных данных, если только вы не делаете некоторые действительно необычные операции с вычислениями, которые дают их собственные контрольные суммы. А если вы серьёзно относитесь к исправлению ошибок, то вы, вероятно, всё же используете ECC.
Во всяком случае, после завершения анализа мы обнаружили, что memtest не мог обнаружить какие-либо проблемы, но замена ОЗУ на плохих машинах привела к уменьшению частоты ошибок на один-два порядка. У большинства сервисов нет такого рода контрольных сумм, которые были у нас; эти сервисы будут просто молча записывать повреждённые данные в постоянное хранилище и не увидят проблему, пока клиент не начнёт жаловаться.
3. Благодаря развитию аппаратного обеспечения ошибки стали очень редкими
Данных в посте недостаточно для такого утверждения. Обратите внимание, что поскольку использование ОЗУ возрастает и продолжает увеличиваться экспоненциально, отказы ОЗУ должны уменьшаться с большей экспоненциальной скоростью, чтобы фактически уменьшить частоту повреждения данных. Кроме того, поскольку чипы продолжают уменьшаться, элементы становятся меньше, что делает более актуальными проблемы износа, обсуждаемые во втором пункте. Например, при технологии 20 нм конденсатор DRAM может накпливать где-то электронов 50, и это число будет меньше для следующего поколения DRAM при сохранении тенденции уменьшения.
Исследование 2012 года, которое цитирует Этвуд, имеет этот график по исправленным ошибкам (подмножество всех ошибок) на десяти случайно выбранных отказавших узлах (6% узлов имели по крайней мере один отказ):
Рис. 1. Исправленные за месяц ошибки для выбранных случайным образом узлов. Количество ошибок показывает тип сбоя, возникший в каждом узле.
Речь идёт о количестве ошибок от 10 до 10 тыс. для типичного узла, у которого происходит отказ, и это — тщательно отобранное исследование с поста, утверждающего, что вам не нужна память ECC. Обратите внимание, что здесь рассматриваются узлы с ОЗУ только 16 ГБ, что на порядок меньше, чем у современных серверов, и что исследование было проведено на более старом техпроцессе, который был менее уязвим для шума, чем нынешний.
Для тех, кто привык иметь дело с проблемами надёжности и просто хочет знать значение FIT (единица измерения интенсивности отказов): исследование показывает, что значение FIT составляет 0,057-0,071 сбоев на один мегабит (что — в противоположность утверждению Этвуда — не является поразительно низким числом).
Если взять самое оптимистичное значение FIT, равное 0,057, и провести расчёт для сервера не с самой большой оперативной памятью (здесь я использую 128 ГБ, поскольку серверы, которые я вижу в настоящее время, обычно имеют ОЗУ от 128 до 1,5 ТБ), то получим ожидаемое значение 0,057 * 1 000 * 1 000 * 8 760 /1 000 000 000 = 0,5 сбоя в год на каждый сервер. Обратите внимание, что это относится к сбоям, а не к ошибкам. Из графика выше видно, что сбой может легко вызвать сотни или тысячи ошибок в месяц. Ещё нужно отметить, что есть несколько узлов, у которых нет ошибок в начале исследования, но ошибки появляются позже.
Компания Sun/Oracle серьёзно столкнулась с этим несколько десятилетий назад. Транзисторы и конденсаторы DRAM становились всё меньше, как это происходит и сейчас, а использование памяти и кэши росли, так же как и в настоящее время. Столкнувшись, с одной стороны, со всё уменьшающимся транзистором, который был менее стойким к временному нарушению и более сложным в изготовлении, а, с другой стороны, с растущим встроенным кэшем, подавляющее большинство поставщиков серверов ввело ECC в свои кэши. Компания Sun решила сэкономить несколько долларов и не использовать ECC. Прямым результатом было то, что ряд клиентов Sun сообщил о периодических повреждении данных. В результате затем Sun несколько лет занималась разработкой новой архитектуры с кэшем на ECC и заставляла клиентов подписывать NDA для замены чипов.
Ещё одно замечание: когда вы платите за ECC, вы платите не просто за память ECC — вы платите за детали (процессоры, платы), которые являются более качественными. Такое легко можно видеть с частотой отказа дисков, и я слышал, что многие замечают такое в своих личных наблюдениях.
Если приводить общедоступные исследования: насколько помню, группа Андреа и Ремзи несколько лет назад выпустила документ SIGMETRICS, который показал, что вероятность сбоя при чтении у диска SATA в 4 раза выше, чем у диска SCSI, а вероятность скрытого повреждения данных — в 10 раз выше. Это соотношение сохранялось даже при использовании дисков одного изготовителя. Нет особой причины думать, что интерфейс SCSI должен быть более надёжным, чем интерфейс SATA, но речь идёт не об интерфейсе. Речь идёт о покупке высоконадёжных серверных компонентов по сравнению с клиентскими. Возможно, конкретно надёжность диска вас не интересует, потому что у вас всё на контрольных суммах, и повреждения легко находятся, но есть некоторые виды нарушений, которые обнаружить труднее.
4. Если бы память ECC имела, действительно, важное значение, то её использовали бы везде, а не только в серверах.
Немного перефразируя этот аргумент, можно сказать, что «если бы эта характеристика была, действительно, важна для серверов, то она использовалась бы и в не-серверах». Можно применить этот аргумент к довольно большому количеству аппаратных средств сервера. На самом деле это одна из наиболее неприятных проблем, стоящих перед крупными поставщиками облачных решений.
У них достаточно рычагов воздействия, чтобы получать большинство компонентов по подходящей цене. Но поторговаться получится только там, где есть более одного жизнеспособного поставщика.
Одной из немногих областей, где нет каких-либо жизнеспособных конкурентов, является производство центральных процессоров и видеоускорителей. К счастью для крупных поставщиков, видеоускорители им обычно не нужны, нужны процессоры, много — уже давно так сложилось. Было несколько попыток поставщиков процессоров войти на серверный рынок, но всегда каждая такая попытка с самого начала имела фатальные недостатки, делавшие очевидной её обречённость (а это часто проекты, требующие не менее 5 лет, т.е. необходимо было потратить очень много времени без уверенности в успехе).
Усилия Qualcomm получили много шума, но, когда я общаюсь с моими контактами в Qualcomm, они все говорят мне, что сделанный в данный момент чип предназначен, по существу, для пробы. Так получилось, потому что компании Qualcomm нужно было узнать, как сделать серверный чип, у всех тех специалистов, которых она переманила из IBM, и что следующий чип будет первым, который, можно надеяться, станет конкурентоспособным. Я возлагаю большие надежды на Qualcomm, а также на усилия ARM по созданию хороших серверных компонентов, но эти усилия пока не дают желаемого результата.
Почти полная непригодность текущих вариантов ARM (и POWER) (не считая гипотетических вариантов впечатляющего чипа ARM от Apple) для большинства рабочих нагрузок серверов с точки зрения производительности на доллар совокупной стоимости владения (TCO) — эта тема немного в стороне, поэтому я оставлю её для другой публикации. Но дело в том, что Intel имеет такую позицию на рынке, что может заставить людей платить сверху за серверные функции. И Intel это делает. Кроме того, некоторые функции действительно важнее для серверов, чем для мобильных устройств с несколькими гигабайтами оперативной памяти и энергетическим бюджетом в несколько ватт, мобильных устройств, от которых всё равно ожидают периодические вылеты и перезагрузки.
Заключение
Следует ли покупать ECC-ОЗУ? Это зависит от многого. Для серверов это, вероятно, хороший вариант, учитывая затраты. Хотя на самом деле трудно провести анализ затрат/выгод, потому что довольно сложно определить ущерб от скрытого повреждения данных или затраты на риск потерять полгода времени разработчика на отслеживание перемежающихся сбоев, только чтобы обнаружить, что они вызваны использованием памяти без ECC.
Для настольных компьютеров я тоже сторонник ECC. Но если вы не делаете регулярные бэкапы, то вам полезнее вложиться в регулярные бэкапы, чем в ECC-память. И если у вас есть резервные копии без ECC, то вы можете легко записать повреждённые данные в основное хранилище и реплицировать эти повреждённые данные в резервную копию.
Спасибо Прабхакару Рагде, Тому Мерфи, Джею Вайскопфу, Лии Хансон, Джо Уайлдеру и Ральфу Кордерою за обсуждение / комментарии / исправления. Кроме того, спасибо (или, может быть, не-спасибо) Лии за то, что убедила меня написать этот устный экспромт как пост в блоге. Приносим извинения за любые ошибки, отсутствие ссылок и возвышенную прозу; это, по существу, запись половины обсуждения, и я не объяснил условия, не предоставил ссылки или не проверил факты на том уровне детализации, как я обычно делаю.
1. Одним из забавных примеров является (по крайней мере, для меня) магическая самовосстанавливающаяся плавкая перемычка. Хотя реализаций много, представим себе плавкую перемычку на чипе как некоторый резистор. Если вы пропускаете через неё какой-то ток, то вы должны получить соединение. Если ток слишком большой, то резистор разогреется и, в конце концов, разрушится. Это обычно используется для отключения элементов на микросхемах или для таких действий, как задание тактовой частоты. Основной принцип состоит в том, что после сгорания перемычки нет возможности вернуть её в исходное состояние.
Давным давно жил да был производитель полупроводниковых устройств, который немного поторописля со своим производственным процессом и несколько чрезмерно уменьшил допуски в некотором технологическом поколении. Через несколько месяцев (или лет) соединение между двумя концами подобной перемычки смогло снова появиться и восстановить его. Если вам повезёт, то такая перемычка будет чем-то вроде старшего бита множителя тактовой частоты, который в случае его изменения будет выводить чип из строя. Если не повезёт, то это приведёт к скрытому повреждению данных.
Я слышал от многих людей в разных компаниях о проблемах в этом технологическом поколении этого производителя, так что это не были отдельные случаи. Когда я говорю, что это забавно, я имею в виду, что забавно услышать эту историю в баре. Менее забавно обнаружить через год тестирования, что некоторые из ваших чипов не работают, потому что их установки для перемычек бессмысленны, и необходимо переделать ваш чип и отложить выпуск на 3 месяца. Кстати, эта ситуация с восстановлением плавкой перемычки — ещё один пример класса ошибок, остроту которых можно сгладить с помощью ECC.
Это не проблема Google; я упоминаю об этом только потому, что многие люди, с которыми я общаюсь, удивлены тем, каким образом аппаратное обеспечение может выйти из строя.
2. Если вы не хотите копаться во всей книге, то вот нужный фрагмент:
В системе, которая может выдержать ряд отказов на программном уровне, минимальное требование, предъявляемое к аппаратной части, заключается в том, что сбои этой части всегда обнаруживаются и сообщаются программному обеспечению достаточно своевременно, чтобы позволить программной инфраструктуре ограничить их и принять соответствующие действия по восстановлению. Необязательно, чтобы аппаратное обеспечение явно справлялось со всеми сбоями. Это не означает, что оборудование для таких систем должно быть спроектировано без возможности исправления ошибок. Всякий раз, когда функциональные возможности исправления ошибок могут быть предложены с разумной ценой или сложностью, поддержка их часто окупается. Это означает, что, если аппаратная коррекция ошибок была бы чрезвычайно дорогостоящей, то система могла бы иметь возможность использования более дешёвой версии, которая предоставляла бы возможности только обнаружения. Современные системы DRAM являются хорошим примером ситуации, в которой мощная коррекция ошибок может быть предоставлена при очень низких дополнительных затратах. Однако смягчение требования об обнаружении аппаратных ошибок было бы намного сложнее, поскольку это означало бы, что каждый программный компонент был бы обременён необходимостью проверки его собственного правильного выполнения. На начальном этапе своей истории Google пришлось иметь дело с серверами, на которых у DRAM отсутствовал даже контроль чётности. Создание индекса веб-поиска состоит, по существу, из очень большой операции сортировки/слияния, использующей длительно несколько машин. В 2000 году одно из ежемесячных обновлений веб-индекса Google не прошло предварительную проверку, когда обнаружилось, что некоторое подмножество проверенных запросов возвращает документы, по-видимому, случайным образом. После некоторого исследования в новых индексных файлах была выявлена ситуация, которая соответствовала фиксации бита на нуле в определённом месте в структурах данных, что было негативным побочным эффектом потоковой передачи большого количества данных через неисправный чип DRAM. В структуры данных индекса были добавлены проверки непротиворечивости, чтобы свести к минимуму вероятность повторения этой проблемы, и в дальнейшем проблем такого характера не было. Однако следует отметить, что этот способ не гарантирует 100% обнаружения ошибок в проходе индексации, так как не все позиции памяти проверяются — инструкции, например, остаются без проверки. Это сработало потому, что структуры данных индекса были настолько больше, чем все другие данные, участвующие в вычислении, что наличие этих самоконтролируемых структур данных делало очень вероятным, что машины с дефектным DRAM будут идентифицированы и исключены из кластера. Следующее поколение машин в Google уже содержало обнаружение чётности в памяти, и как только цена памяти с ECC опустилась до конкурентного уровня, все последующие поколения использовали ECC-DRAM.























