Хачатуров А.М. Разработка алгоритмов тестирования оперативной памяти RUS | UKR | ENG || ДонНТУ > Портал магистров ДонНТУ
Магистр ДонНТУ Хачатуров Алексей Михайлович

Хачатуров Алексей Михайлович

Факультет компьютерных наук и технологий

Кафедра компьютерной инженерии

Специальность: «Компьютерные системы и сети»

Научный руководитель: к.т.н., доц. Назаренко Виктор Иванович


Материалы по теме выпускной работы: Об авторе | Биография | Библиотека | Ссылки | Отчет о поиске | | Индивидуальный раздел

Реферат по теме выпускной работы

Разработка алгоритмов тестирования оперативной памяти

Содержание

Введение
Устройство и принципы функционирования оперативной памяти
Обзор существующих средств тестирования памяти
Анализ проблемы тестирования памяти
Алгоритм определения объема памяти
Чтение SPD
Выводы
Литература


Введение

Актуальность
Рассматриваемая задача является частью архитектурного мониторинга производительности компьютера и находится на границе аппаратного и программного обеспечения.

Оперативная память  -  одни из важнейших элементов компьютера. Именно из нее процессор берет программы и исходные данные для обработки, в нее он записывает полученные результаты. Производство оперативной памяти технологически сложный процесс. Сложность производства состоит в том, что преобладает тенденция на постоянное уменьшение размеров интегральных схем и повышения требований к готовой продукции, что в свою очередь поднимает требования к материалам, из которых изготовлена память, подвергаясь постоянному физическому воздействию, он должен, на длительное время, сохранить свои свойства. Все это делает неизбежным появление неисправностей в изготовленных микросхемах. В любой партии готовых микросхем всегда присутствует определенных процент брака, по большей части его отслеживают на производстве, однако часть неисправных микросхем попадает на рынок, что же делать в том случае. Сбои в работе памяти могут стать причиной потери ценной пользовательской информации и части системной ОС. Особым случаем является несовместимость модулей памяти разных производителей между собой или с материнскими платами[9].


При эксплуатации памяти важно точно знать ее действительные характеристики. Современные материнские платы допускают настраивать некоторые параметры, информация о которых считывается с самих модулей памяти. Это, в первую очередь значения таймингов, которые хранятся в специальной памяти SPD, находящейся на модуле.

Система идентифицирует модули памяти по протоколу Serial Presence Detect (SPD). Модуль SPD, это энергонезависимая микросхема EPROM (объёмом 256 байт), в которой содержится информация о модуле памяти, необходимая для его правильного конфигурирования: серийные номера изделий и имена производителей и т.д. BIOS считывает эти данные при запуске, и для инициализации использует их. Запущенные под ОС программы диагностики читают SPD. При сравнении объема оперативной памяти, выделяемой ОС и BIOS с реальной емкостью установленных модулей, можно обнаружить разницу.

Названные причины свидетельствуют о том, что способы программной оценки объема памяти, ее распределения, а так же доступ к SPD  является актуальными задачами в создании архитектурной базы конкретной платформы персонального компьютера.

Цели и задачи

Целью работы является разработка алгоритмовтестированияпамяти, а так же разработка программного обеспечения на основе разработанных алгоритмов.
Новыми задачами этой проблемы является построение новых тестовых алгоритмов, чья эффективность должна в разы превышать существующие аналоги..
Основные задачи, которые подлежат решению:
                1. Анализ существующих алгоритмов тестирования памяти.
                2. Разработка концепции новых алгоритмов.
                3. Разработка алгоритмов.
                4.Разработка программного обеспечения, основанного на разработанных алгоритмах.

      Устройство и принципы функционирования оперативной памяти.

 Оперативная память — часть системы компьютерной памяти, которой временно хранятся данные и команды, необходимые процессору для выполнения различных  операций

 В настоящее время в персональных компьютерах IBM PC используется память типа DDR SDRAM, DDR SDRAM II  и DDR SDRAM III. Аббревиатура SDRAM расшифровывается как Synchronous Dynamic Random Access Memory — синхронная динамическая память с произвольным доступом, DDR - Double Data Rate (удвоенная скорость передачи данных). 

Общий принцип организации и функционирования микросхем динамической памяти (DRAM) практически един для всех ее типов — как первоначальной асинхронной, так и современной синхронной. Массив памяти можно рассматривать как матрицу (двумерный массив) элементов, каждый из которых содержит одну или несколько физических ячеек, способных вмещать элементарную единицу информации — один бит данных. Ячейки представляют собой сочетание транзистора (ключа) и конденсатора (запоминающего элемента) рис.1. Доступ к элементам матрицы осуществляется с помощью декодеров адреса строки и адреса столбца. Из соображений минимизации размера упаковки микросхемы, адреса строк и столбцов передаются по одним и тем же адресным линиям микросхемы[8]. Особенностью памяти данного типа является то, что  конденсаторы со временем теряют свой заряд, для предотвращения потери данных необходимо периодически обновлять содержимое ячеек. В современных типах памяти, которые поддерживают режимы автоматической регенерации (в «пробужденном» состоянии) и само регенерации (в «спящем» состоянии), обычно это является задачей внутреннего контроллера регенерации, расположенного непосредственно в микросхеме памяти. Схематическое изображение модуля оперативной памяти представлено на рис.2. Еще одной особенностью SDRA, является разбиение массива данных на несколько логических банков (как минимум — 2, обычно — 4). Разбиение массива памяти SDRAM на банки было введено, главным образом, из соображений производительности. Разрядности шины данных контроллера памяти и для всех современных типов контроллеров памяти SDRAM (DDR, DDR2 и DDR3) составляет 64 бита.  Особенностью SDRAM является  одно банковые (или «одноранковые», single-rank) и двух банковые («двухранковые», dual-rank) модули. Двух банковые модули памяти наиболее часто представлены конфигурацией «16 микросхем x8», при этом один из физических банков (первые 8 микросхем) расположен с лицевой стороны модуля, а второй из них (оставшиеся 8 микросхем) — с тыльной. Наличие более одного физического банка в модуле памяти нельзя считать определенным преимуществом, т.к. может потребовать увеличения задержек командного интерфейса.Схема взаимодействия оперативной памяти с другими компонентами ПК представлена на рис.3.

Еще до появления первого типа синхронной динамической оперативной памяти SDR SDRAM стандартом JEDEC предусматривается, что на каждом модуле памяти должна присутствовать небольшая специализированная микросхема ПЗУ, именуемая микросхемой «последовательного обнаружения присутствия» (Serial Presence Detect, SPD). Эта микросхема содержит основную информацию о типе и конфигурации модуля, временных задержках, которых необходимо придерживаться при выполнении той или иной операции на уровне микросхем памяти, а также прочую информацию, включающую в себя код производителя модуля, его серийный номер, дату изготовления и т.п.

Рисунок 1 – Устройство ячейки динамической памяти.


Рисунок 2 – Схематическое изображение модуля оперативной памяти (1); микросхемы памяти (2); матрицы (3) и отдельной ячейки памяти (4).


4кб 8 кабров 400 мс.

Рисунок 3 – Схема взаимодействия оперативной памяти с другими компонентами ПК.

Обзор существующих средств тестирования памяти

Memtest86+.

 Эту утилиту можно запускать с загрузочной дискеты или компакт-диска. MemTest86+, кроме своих прямых обязанностей, определяет основные характеристики компьютера, такие как чипсет, процессор и скорость работы памяти. У программы есть два режима работы: basic и advanced (основной и расширенный). Они отличаются временем тестирования. В основном режиме можно определить какие-то глобальные проблемы с памятью, а в расширенном режиме проводится более тщательное тестирование. 

Docmem - Тест оперативной памяти.

Docmem - это удобная программа для тестирования памяти, которая пользуется заслуженной популярностью. Ее можно переписать с сайта производителей бесплатно, только нужно зарегистрироваться. Программу Docmem нужно записать на дискету, с помощью которой потом надо загрузить компьютер. Программа тоже предлагает два режима тестирования: быстрый (quick) и основной (burn in), который выполняется, пока не будет остановлен пользователем.

Windows memory diagnostic - Тест оперативной памяти.

Компания Microsoft предлагает собственную диагностическую программу, похожую на две предыдущие. Она предлагается в виде стандартного установочного файла с образом загрузочного компакт-диска и программой для создания загрузочной дискеты. Windows memory diagnostic - это более простая программа, чем предыдущие. Кроме того, она имеет дополнительный набор тестов для проверки компьютера. Она позволяет определить, какой именно модуль является источником проблем, если в системе установлено несколько модулей памяти. Чтобы запустить Memory Diagnostic, запустите файл программы и выберите, что вам удобнее - создать загрузочный компакт-диск или дискету. При выборе компакт-диска у вас спросят, куда сохранить его образ. Запомните, куда вы его сохранили, и воспользуйтесь какой-то программой для записи CD дисков, например, Nero.

Если вы выберете создание загрузочной дискеты (create startup disk), то останется просто вставить в дисковод дискету и подождать, пока на нее будет записана вся нужная информация. После этого перезагрузите свой компьютер, загрузив его с помощью созданной дискеты или компакт-диска.

Основным недостатком этих программ является тестирование памяти в щадящих режима. Несмотря на продвинутость тестов и богатый алгоритмический набор, они не могут выявлять проблемы, возникающих в режимах, близких к критическим,  поэтому бывают  ситуации, в которых все предложенные тестеры не выявят ошибок, а во время максимальной загрузки компьютера начинают происходить сбои в работе оперативной памяти. Выходом из данной ситуации является написание собственной программы тестирования памяти. 

Анализ проблемы тестирования памяти. 

Разгон памяти — это весьма радикальное средство увеличения производительности, но и чрезвычайно требовательное к качеству модулей памяти. Впрочем, некачественные модули могут сбоить даже в штатном режиме безо всякого разгона. Последствия таких ошибок весьма разнообразны: от аварийного завершения приложения до потери и/или искажения обрабатываемых данных.

Судя по всему, приобретение "битой" памяти — отнюдь не редкость и со сбоями памяти народ сталкивается достаточно регулярно. К его немедленному отказу. Чаще всего дефект проявляется лишь при определенном стечении ряда обстоятельств. Тяжеловесное приложение, «гоняющее" память "и в хвост, и в гриву", имеет все шансы за короткое время "подобрать" нужную комбинацию, провоцирующую сбой. 

Популярные диагностические программы, напротив, тестируют весьма ограниченный спектр режимов в весьма щадящих условиях. Соответственно, и вероятность обнаружить ошибку в последнем случае значительно ниже. 

Выход — Разрабатывать собственную тестирующую программу. Во-первых, необходимо учитывать, что вероятность сбоя тесно связана с температурой кристалла. Чем выше температура — тем вероятнее сбой. А температура в свою очередь зависит от интенсивности работы памяти. При линейном чтении ячеек микросхема памяти за счет пакетного режима успевает несколько приостыть, поддерживая внутри себя умеренную температуру. Действительно, при запросе одной ячейки вся DRAM-страница читается целиком, сохраняясь во внутренних буферах, и до тех пор, пока не будет запрошена следующая страница этого же банка, никаких обращений к ядру памяти не происходит! 

Поэтому, прежде чем приступать к реальному тестированию, память необходимо как следует прогреть, читая ее с шагом, равным длине DRAM-банка, это заставит ядро данного банка работать максимально интенсивно, на каждом шаге выполняя процедуру чтения и восстанавливающей записи данных. Не стоит тестировать несколько банков одновременно. Во-первых, это несколько снизит температуру "накала" каждого из них, а, во-вторых, перепад температур внутри кристалла увеличивает вероятность обнаружения сбоя.

Когда модуль памяти нагрелся так, что не удержишься рукой, самое время приступать к настоящим тестам. Заполняем DRAM-страницу контрольной последовательностью чисел (далее по тексту — шаблоном), переключаем страницу, чтобы гарантированно обновить ячейки памяти (в противном случае микросхема может возвратить содержимое своих буферов, не обращаясь к матрице памяти). Вновь переключаем страницу назад и проверяем, что мы записали.  

К шаблону предъявляются весьма жесткие требования. Во-первых, он должен тестировать каждый бит ячейки, причем, на оба значения — единицу и ноль, поскольку "битые" ячейки матрицы могут давать либо "всегда ноль", либо "всегда единица". Во-вторых, крайне желательно, чтобы во восьмерном слове соседние биты имели противоположные значения. Такая комбинация создает наибольший уровень помех и тем самым провоцирует систему на ошибку. В-третьих, шаблон должен обеспечивать выявление ошибок адресации, т. е. ситуации, когда микросхема возвратила содержание ячейки не той строки и/или столбца. Поскольку все эти требования взаимоисключающие, для тестирования потребуется несколько шаблонов. Только не забывайте время от времени выполнять "холостое" чтение для поддержания температуры микросхемы на максимально достижимом уровне, иначе эффективность теста начнет падать. 

Рассмотрим перебор страниц. Последовательный перебор, затем — хаотичные обращения к страницам по случайному шаблону. Однако этого не достаточно, современные контроллеры памяти самостоятельно определяют предпочтительный порядок обработки запросов, проанализировав алгоритм, он может выдать содержание буфера, вместо реального значения .

Для обхода механизма буферизации необходимо проверять ячейки не сразу после записи, а спустя некоторое время, когда внутренние буферы контроллера будут гарантированно перекрыты последующими запросами. Это же позволяет выявить ошибки регенерации, когда из-за каких-то дефектов заряд с ячейки матрицы стекает раньше, чем ее успевают регенерировать.

Алгоритм определения объема памяти

Разработанный алгоритм программы реализует функции определение объема установленной памяти, получение карты распределение оперативной памяти , чтение содержимого микросхемы SPD.

Определение объема оперативной памяти выполняется при помощи прерывания BOIS int 15h ax=E810h[2]. Оно позволяет определить объем установленной памяти  до 4Гб. Прерывание возвращает в регистр AX количество 64 кб. блоков между 1 и 16 мегабайтами установленной памяти, в регистр BX количество 64кб. блоков  между 16мб. и 4гб. установленной памяти, считав значение этих регистров определяем объем установленной оперативной памяти. 

 Получение карты распределение адресного пространства установленной памяти выполняем при помощи прерывания BIOS int 15h AX=E820h. Оно позволяет формировать карту распределения адресного пространства  оперативной памяти. В качестве входных параметров передается указатель на буфер в регистре ES:DI, объем буфера в регистре ECX, EBX, для первого вызова равна “0”, для последующих вызовов в EBX будет адрес следующего блока памяти, которое будет возвращено пред идущем вызовом прерывания. После удачного вызова прерывания в буфер возвращаются значение, характеризующие рассматриваемый участок памяти. [3]   Структура возвращаемых данных приведена в таблице 1.

Таблица 1. Структура возвращаемых данных

Смещение Название Описание
0 BaseAddrLow Low 32 Bits of Base Address
4 BaseAddrHigh High 32 Bits of Base Address
8 LengthLow Low 32 Bits of Length in Bytes
12 LengthHigh High 32 Bits of Length in Bytes
16 Type Address type of  this range

Поле Typе определяет возможные типы памяти, его структура приведена в таблице 2.

Таблица 2. Структура поля Typе.

Значение Описание
1 AddressRangeMemory, available to OS
2 AddressRangeReserved, not available to OS
3 AddressRangeACPI, available to OS
4 AddressRangeNVS,not available to OS

 Вызов данного прерывания выполняется в цикле, пока значение регистра EBX не будет равно “0”.

Чтения SPD

Ни один современный модуль памяти не может обойтись без компонента — микросхемы SPD (Serial Presence Detect). Интерфейс последовательного детектирования, регламентированный на данный момент для всех модулей памяти форм-фактора SIMM/DIMM/RIMM, использует шину управления системой (SMBus — System Management Bus), совместимый со спецификацией Inter-IC (I2C или IIC). Принцип использования шины SMBus в случае SPD сводится к передаче данных от микросхемы EEPROM[10].

Для доступа к SPD необходимо использовать конфигурационные регистры шины SMBus, которые находятся в конфигурационном пространстве PCI.

Конфигурационное адресное пространство PCI  состоит из 256 байт, которые можно адресовать, зная номер шины PCI, номер устройства и номер функции в устройстве. Первые 64 байта из 256 стандартизированы, а остальные регистры могут быть использованы по усмотрению изготовителя устройства.

Доступ к PCI через порты I/O.  Для работы с шиной PCI в PC-AT и совместимых машинах выделено два основных порта:

-0CF8h -W порт адреса Address.

-0CFCh RW порт данных Data.

Оба порта являются 32 битными. Порт адреса представляет собой следующую 32 битную структуру, которая задает шину, устройства, и адрес регистра в конфигурационном пространстве устройства. Структура  порта адреса приведена в таблице 3.

Таблица 3. Порт адреса.  

31 30.....24 23.....16 14....11 10....8 7....2 1 0
C Резерв Шина устройство функция Индекс регистра

 
В этой структуре устройство - это физически присутствующее устройство, где функция - это - флаг доступа к устройству. Младшие два бита в порту адреса всегда 0.По окончании работы с устройством следует сбросить адрес в 0.

Первым шагом в доступе к микросхеме SDP является создание списка PCI устройств, путем последовательного перебора всех возможных адресов PCI и запроса чтения нулевого регистра. Если в ответ на запрос нулевого регистра возвращается 0FFFFh, то устройства не существует. Если устройство существует мы запоминаем его адрес в списке устройств.

Вторым шагом является поиск шины SMBus в полученном списке PCI  устройств. Поиск осуществляется путем опроса каждого адреса из списка PCI устройств и проверки содержимого конфигурационных регистров, с целью поиска признаком SMBus шины[4].

Третий шаг. В случае если шина SMBus найдена, выбираем один из возможных адресов SDP(50h,51h,52h,53h), после чего выполняем побайтное чтение 256 байт в буфер, начиная с текущего адреса.

Следующим этапом является взаимодействие с контроллером SMBus через его диапазон портов ввода-вывода. Базовый адрес SMB_Base. Обнуляем статусные биты в регистре Host Status (SMB_Base+0) для подготовки контроллера к очередной операции. Биты этого регистра используют дисциплину Read/Write Clear, и обнуляются при записи "1" в них. 

Посылаем 8-битный адрес ячейки микросхемы SPD, которую требуется прочитать. Он записывается в регистр Host Command (SMB_Base+3). При выполнении транзакции на шине SMBus, значение этого регистра передается в поле Command.

Передаем 8-битный адрес микросхемы SPD, к которой выполняется обращение. Он записывается в регистр Transmit Slave Address (SMB_Base+4). При выполнении транзакции на шине SMBus, значение этого регистра передается в поле Slave Address.

Запускаем выполнение транзакции, параметры которой были подготовлены . Для этого необходимо записать код операции в регистр Host Control (SMB_Base+2). Для запуска операции передачи байта используется код 01001000b = 48h.

Контроллер SMBus начинает операцию чтения байта из SPD. Программа должна ожидать завершения операции. Опрашиваем состояние бита Host Busy, это бит 0 регистра Host Status (SMB_Base+0). По значению Host Busy=1 определяем момент начала операции, затем ожидаем Host Busy=0, то есть завершения операции. Отсутствие ожидаемого события в течение заданного интервала (около 50 мс) интерпретируется как ошибка – таймаут шины.

 Считываем из регистра Host Data 0 (SMB_Base+5) байт, прочитанный из SPD. Его значение достоверно только при отсутствии ошибок.

 Проверяем отсутствие ошибок. Для этого считываем регистр Host Status (SMB_Base+0) и анализируем статусные биты. После успешного завершения транзакции, состояние битов 4-1 должно быть 0001b. Маскируем указанное битовое поле и проверяем его значение.
Получив 256 байт проверяем  их значение, если все байты равны FF, то SPD по данному адресу недоступна. Если SPD присутствует, то выполняем анализ интересующих нас битов из считаного буфера. Результат работы программы, разработанной магистром Хачатуровым,представлен на рисунке 4.  

Рисунок 4. Фрагмент результата работы программы. Адрес шины SMBus и содержимое SPD.

Выводы

Тестирование программы показало, что она успешно выполняет поставленные задачи: определение объема оперативной памяти, установленной на компьютере, создание карты распределения памяти, чтение микросхемы SPD. Способ доступа к SDP, рассмотренный в данной статье имеет особенности  связанные с реализация доступа к шине SMBus различна на разных чипсетах. Разработанная программа может быть использована при разработке операционных систем “с нуля”, разработке специализированного программного обеспечения для диагностики, поскольку может быть запущено на частично исправной системе и выполнить свои функции, при отладке процесса.

Научная новизна

Научная новизна работы заключается в разработке алгоритма тестирования памяти, который будет основан на методе разогрева, а так же в доказательстве эффективность нового алгоритма, позволяющего обнаружить, в отличие от ранее существующих алгоритмов, неисправности памяти, которые появляются при экстремальных режимах работы памяти. Разрабатываемый алгоритм отличается также тем, что обладает малой ресурсоемкостью.

Литература

 

1. OSDev Wiki [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL : http://ru.osdev.wikia.com/wiki/Карта_распределения_памяти

2. INTERRUPT LIST [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://www.ctyme.com/intr/rb-1739.htm

3. INTERRUPT LIST [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://www.ctyme.com/intr/rb-1741.htm

4. SMBus [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://smbus.org/

5. JEDEC [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://www.jedec.org/

6. М. Гук. Аппаратные средства IBM PC. Энциклопедия. 3-е изд. [Текст]/ М. Гук// “Питер” 2008.-C.1072.

7. INTEL [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://www.intel.com/index.htm?ru_RU_05

8. CITFORUM [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://citforum.ru/book/optimize/ram.shtml

9. Lipworld [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://www.lipworld.by.ru/Lipworld_Text/zelezo/ozu/vvedenie.html

10. Wikipedia [Electronic resource]/ Интернет-ресурс. –Режим доступа: www/URL :  http://en.wikipedia.org/wiki/Serial_presence_detect



ДонНТУ > Портал магистров ДонНТУ || Об авторе | Биография | Библиотека | Ссылки | Отчет о поиске | | Индивидуальный раздел