С О Д Е Р Ж А Н И Е . Зачем нужна эта программа - 1. Описание работы - 2. Принцип выбора шаблонов - 3. Описание ключей - 4. Ограничения - 5. Принцип обмена с SDRAM - 6. Для тех, кто поймет - 7. Аппаратура тестирования и результаты - 8. Что, где, ...??? - 9. 1. Зачем нужна эта программа. Все просто и обыденно. В июне я собрал сбе новый компьютер на Celeron 448 (4x112) и посыпались ошибки. Если кто помнит, лето выдалось жаркое. Мучался долго ( и напряжением и хороший радиатор....), система заработала достаточно надежно .... почти .... В среднем происходил 1 сбой в день. Главный вопрос остался открытым: --- Кто виноват - процессор или память?? Да и ошибки типа '1 сбой в сутки' вылечить КРАЙНЕ трудно ! А я хотел точно знать причину. Конечно, можно поставить 266MHz и проблема уйдет ..... только не за этим UpGrade затевался. Т.о., намучившись окончательно, решил погонять память (на процессоре все разумные действия уже были произведены). А вот тут и началось самое интересное ..... Программ, тестирующих память много ... очень много ... и ... нет!! 1. Мало кто может проверять ВСЮ память. 2. Все они написаны в эпоху XT и работают КРАЙНЕ медленно. Единственное, что как-то подошло - RAMEXAM. Полный тест занимает 10 часов, а при выключенной cache 2 level - 25 ча- сов (что говорит об 'отличной' оптимизации кода). На время выполнения теста памяти вообще не должно оказывать влияния на- личие или отсутствие cache 2 level, да и размер cache 1 level не особенно важен. Теоретически, если отключить cache 1 level, скорость доступа к памяти не должна упасть .... вот только сами команды процессора будут выполняться медленнее. Ну вот и .... Взял в руки лом (sourcer, hiew) и слегка оптимизировал код. Время выпол- нения теста уменьшилась более чем в 10 раз! Это добило окончательно! Пришлось писать свое. Есть и вторая, более серьезная, причина - при работе DRAM (SDRAM) нагревается. Одно время у меня стоял MR BIOS - замечательная штука, я Вам скажу. После него начинаешь понимать, что такое PnP (не путать с W95) и какое Г. AWARD. Про другие клоны BIOS не стоит и упоминать. Находясь в SETUP MR BIOS случайно дотронулся до SIMM. Они были ОЧЕНЬ горячие. Оказывается, эти ребята на фоне еще и память тестировали. Вывод - при прокачке данных память греется и даже очень сильно. А ведь это 'нормальный' режим для 3D action games. И если программа 'медленно' тестирует, то ошибок может не найти. Да и chipset подогреется, не зря-же на нем стоит радиатор ( ASUS P2B ). 2. Описание работы. Проверка памяти состоит из трех фаз: 1. Запись всей памяти фиксированной или переменной последовательностью. 2. 'Быстрое' чтение с помощью MMX комманд. 3. Чтение и проверка. Фаза 1 выполняется 1 раз, а фазы 2 и 3 несколько раз. Фаза 2 работает очень быстро и служит для разогревания chip'ов памяти. Проверка считанной информации на правильность не производится (значительное снижение скорости). Шаблон, которым прописывается RAM, состоит из четырех 8-и байтовых слов: A,B,A,B. Где B = инверсия A. При таком построении шаблона по шине данных по всем битам просходит постоян- ная смена уровня 0/1/0/1 ..., что повышает вероятность обнаружения ошибки и увеличивает нагрев как RAM так и chipset. Шаблон может быть как фиксированный, тогда вся RAM прописывается неизмен- ными числами A,B,A,B; так и переменным. В этом случае шаблон формируется по правилу: A,B,A,B,A+const,B-const,A+const,B-const,A+2const...где const - смещение между последующими записями шаблона. В данной реализации const = -7, при этом достигается компромис между рас- стоянием записей по адресам и уменьшением кол-ва переходов 1/0/1/0 по шине данных. Режим с постоянным шаблоном лучше подходит для нагрева RAM, но с перемен- ными - позволяет определить адресные ошибки. По опыту применения - на более чем 100 тыс. ошибок не было ни одной ошибки по адресу. Вероятность определе- 3. Принцип выбора шаблонов. Если-бы знать реальное расположение битов по модулю памяти, возможно было-бы написать оптимизированный алгоритм формирования шаблонов .... Но, к сожелению, даже на одной плате ASUS P2B в разных слотах биты перемешаны. Т.о., в пограмме применяется псевдо случайный выбор шаблонов.Причем, каждый нечетный шаблон есть инверсия четного (на четном шаблоне в этом бите был переход 1/0, а в нечетном шаблоне 0/1 .....). Практика показала, что у разных шаблонов ВЕСЬМА различная вероятность вызвать ошибку. 4. Описание ключей. -f ( fast ) - используется при пробном запуске. -d ( default ) - 50 циклов при 2х операции чтения. -s ( slow ) - 200 циклов при 5х операций чтения. -l ( long ) - 2000 циклов при 5х операций чтения. -v ( very long ).- 4000 циклов при 25х операций чтения. -1 - 1х операции чтения - для предварительного запуска (не рек-ся). -2 - 2х операции чтения - применять для медленных машин. -5 - 5х операции чтения - баланс между качеством проверки и скоростью переборки разных шаблонов. -0 - 50х операции чтения - ну очень долго и старательно. эмулирует программную область RAM. Для запуска на ночь. Ключи -1...-0 указываются после выбора кол-ва циклов проверки. -p - включение переменных шаблонов. По умолчанию - фикс. шаблоны. -b - пищать при обнаружении ошибки (не стоит). -e - не печатать ошибки на экран/файл - не свсегда нужно знать ГДЕ, важнее бывает - СКОЛЬКО ( пример - изменил настройку в BIOS - как повлияло? ) -m - добавить фазу быстрого чтения с использования MMX комманд. >>ERRORS.TXT - отправить ошибки в файл ... мне кажется, что иногда полезно. -h - помощь. 5. Ограничения. a. Область DOS ( ниже 1Mb ) не тестируется, т.к. если память сбоит, то равномерно по всему об'ему модуля. По 'MMX read' есть ограничения: 1. 'MMX read' греет только первый модуль памяти. 2. Если включена cache 2 level, то 'MMX read' в основном мучает cache. - лучше отлючить ... хотя ... cache то-же полезно проверить. 3. При включенной cache 2 level 'MMX read benchmark' показывает доступ к cache - учтите! Программа предоставляется на условиях AS-IS и не предназначена для коммерческого применения и любой деятельности, служащей получению прибыли. Сюда входит продажа, использование программы более чем на 1 компьютере и(или) 10 проверяемых модулях памяти. А также, не допускается размещение программы в любых местах интернет и носителя (CD-ROM и подобных), кроме моей домашней странички (на данный момент testmem.nm.ru) и сайтах www.freeware.ru, www.konfa.ru при сохранении архива в неизменном виде. Если Вы согласны придерживаться вышеприведенных ограничений, то .... Архив testmem.zip состоит из двух файлов - readme.txt и v01a.zip. Последний, собственно, и является программой TetMem1 Чтобы его распаковать, необходимо набрать в командной строке: pkunzip -s7646tu56e v01a.zip либо, любым другим распаковщиком, совместимым с zip, с паролем 7646tu56e Пароль введен по одной простой причине - readme никто не читает... :) 6. Принцип обмена с SDRAM. (очень примерно) t0 t1 t2 t3 t4 t5 t6 t7 t8 t9 t10 clock ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └ RAS ─┐ ┌────────────────────────────────────────── └─┘ CAS ─────────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌── └─┘ └─┘ └─┘ └─┘ └─┘ ──────────────▒д▒а▒н▒н▒ы▒е▒▒▒и▒з▒▒▒S▒D▒R▒A▒M▒▒▒ │tx Как я понял: RAS to CAS delay - время t2-t0 CAS Latency - время tx-t2 RAS precharge - задержка между циклами На надежность считывания информации наибольшее влияние оказывает RAS to CAS delay и RAS to CAS delay. Остальные параметры влияют крайне незначительно ( уменьшение ошибок не более чем в 2 раза ). 7. Для тех, кто поймет. Процедура записи: Write_All_RAM: mov ds:[edi],eax mov ds:[edi+4],eax mov ds:[edi+8],ebx mov ds:[edi+12],ebx mov ds:[edi+16],edx mov ds:[edi+20],edx mov ds:[edi+24],ebp mov ds:[edi+28],ebp add edi,32 add eax,esi add ebx,esi add edx,esi add ebp,esi cmp edi,ecx jb Write_All_RAM Процедура MMX чтения: MMX_read: movq mm0,qword ptr ds:[di] movq mm1,qword ptr ds:[di+8] movq mm2,qword ptr ds:[di+16] movq mm3,qword ptr ds:[di+24] add edi,32 cmp edi,ecx jb MMX_read Процедура чтения: Compare_RAM: cmp eax,ds:[EDI] jne Bad_1_Word cmp eax,ds:[EDI+4] jne Bad_2_Word cmp ebx,ds:[EDI+8] jne Bad_3_Word cmp ebx,ds:[EDI+12] jne Bad_4_Word cmp edx,ds:[EDI+16] jne Bad_5_Word cmp edx,ds:[EDI+20] jne Bad_6_Word cmp ebp,ds:[EDI+24] jne Bad_7_Word cmp ebp,ds:[EDI+28] jne Bad_8_Word Next_Compare: add edi,32 add eax,esi add ebx,esi add edx,esi add ebp,esi cmp edi,ecx jb Compare_RAM Так что .... никакой явной оптимизации под конкретный процессор не применяется. 8. Аппаратура тестирования и результаты. - ASUS P2B, Celeron 266 ( 448 = 4 * 112 ) - SDRAM - 2 * 32Mb = 64Mb - Fujitsu, chips 81117822E-100FN - Время до появления ошибок (время разогрева) ~3 минут. - benchmark: 202Mb/720Mb/320Mb (см. таблицу) - то-же с CAS Latency = 3 - 192Mb/695Mb/316Mb - сбоев НЕТ! процессор K5-75 P75 P208 K6-200 K6-208 Celeron448 Write 35 62 105 80 87 202 MMX read - - 167/256* 163/227* 167/253* 720 Read 63 47 88 93 94 320 * - cache 2 level = disable/enable * - первое значение более реально, второе - скорость cache 2 level. Такие сильные различия могут означать только одно - socket 7 отправился на кладбище .... (ну а если к нему еще и AGP прикрутить то совсем ┼.) - Если заменить шаблон вида A,B,A,B на A,A,A,A то вероятность обнаружения ошибки уменьшиться более чем в 100 раз (27040/250), что подтверждает правильность правила формирования шаблона. - При нагреве до +38С mainboard (+58С ядра CPU) на стандартном тесте 27070 ошибок по ВСЕЙ памяти. - Операция записи не порождает ошибок, все ошибки по чтению, поэтому значительно эффективнее применять большой коэф-т повтора операции чтения. - У меня ошибки возникали на 26,35,44... шагу. Вывод - надо запускать тест не меньше чем на 200 циклов. - Время выполнения теста: 'default' ~ 36 сек, 'slow' ~ 4 мин, 'long' - 40 мин , 'very long' - 6 час. Добавление фазы MMX чтения увеличивает время процентов на 25-30. - Вероятность возникновения ошибки с фиксированным шаблоном на 10% выше, чем с переменным. 9. Что, где, ...??? Если есть проблемы с железом - обязательно посетите конференцию www.konfa.ru - там Вам помогут. :) А если мысли какие, пишите мне, обсудим..... Но прежде, чем писать мне(serj_m@hotmail.com) - почитайте FAQ на моей страничке. Честное слово, мне хочется помочь, но время ..... :( Настоятельно рекомендую посетить мою домашнюю страничку testmem.nm.ru Serj.