как узнать пропускную способность памяти
Пропускная способность памяти
Пропускная способность — характеристика памяти, от которой зависит производительность и от которая выражает как произведение частоты системной шины на объем данных, передаваемых за такт. Однако, частота работы модуля памяти и теоретическая пропускная способность не единственные параметрами, которые отвечают за производительность системы. Не менее важную роль играет и тайминги памяти.
Пропускная способность (Пиковый показатель скорости передачи данных) – это комплексный показатель возможности RAM, в нем учитывается частота передачи данных, разрядность шины и количество каналов памяти. Частота указывает потенциал шины памяти за такт – при большей частоте, можно передать больше данных.
Пиковый показатель вычисляется по формуле:
Пропускная способность (B) = Частота передачи (f) x разрядность шины (c) x количество каналов памяти(k)
Если рассматривать на примере DDR400 (400 МГц) с двухканальным контроллером памяти пиковый показатель скорости передачи данных равен:
(400 МГц x 64 бит x 2)/ 8 бит = 6400 Мбайт/с
На 8 мы поделили, чтобы перевести Мбит/с в Мбайт/с (в 1 байте 8 бит).
Популярные модели оперативной памяти
Пропускная способность
Для быстрой работы компьютера пропускная способность шины оперативной памяти должна совпадать с пропускной способности шины процессора. К примеру, для процессора Intel core 2 duo E6850 с системной шиной 1333 MHz и пропускной способностью 10600 Mb/s, нужно купить две оперативные памяти с пропускной способностью 5300 Mb/s каждая (PC2-5300), в сумме они будут иметь пропускную способность системной шины (FSB) равную 10600 Mb/s.
При высоких скоростях обработки данных присутствует один минус — высокое выделения тепла. Для этого производители уменьшили напряжение питания памяти DDR3 до 1.5 В.
Двухканальный режим
Для увеличения скорости обмена данных и увеличения пропускной способности современные чипсеты поддерживают двухканальную архитектуру памяти.
Если установить два, абсолютно идентичных, модули памяти, тогда будет использован двухканальный режим. Лучше всего использовать Kit – набор из двух и более модулей памяти, которые уже были проверены при работе с друг другом. Эти модули памяти одного производителя, с одинаковым объемом и одинаковой частотой.
При использовании двух идентичных модуля памяти DDR3 в двухканальном режиме позволяет повысить пропускную способность до 17.0 Гбайт/с. Если использовать оперативную память с 1333 Мгц, то пропускная способность повысится до 21.2 Гбайт/с.
Как проверить оперативную память после покупки
Содержание
Содержание
Новая техника ломается чаще старой и это не парадокс. Не зря говорят — если сразу не сгорело, будет работать сто лет. В сложной технике поломки редко сопровождаются дымом и искрами, из-за чего неисправности будет сложно найти. Оперативная память в компьютере как раз из таких. Эта нахалка будет сыпать ошибками в нагрузке, перезагружать систему или подглючивать в браузере, но никогда не выдаст себя фейверком. Поэтому есть железные правила, которые помогут понять, почему память работает плохо и как это исправить.
Положить систему на лопатки могут старые комплектующие, сыплющиеся диски или перегретые видеокарты. Но даже техника из магазина попадается с недостатками. Улучшение техпроцесса и качества материалов снижает количество отбраковки, и то, что раньше считалось браком, теперь называется «неудачными» образцами и работает на пониженных частотах.
Тем не менее, иногда и полностью нерабочие экземпляры умудряются пройти контроль качества и попасть в руки покупателю. Это не проблема: производитель заменит неработающее устройство по гарантии. Но испорченные видеофайлы семейного праздника, проигранный бой в сетевом шутере и кракозябры в дипломной работе сервисный центр не обменяет. Поэтому проверять оперативную память — занятие не постыдное.
Менять или настраивать
Будут ошибки в работе или нет — зависит не только от качества ОЗУ, но и от совместимости. Производители сильно упростили сборку и настройку ПК, поэтому вряд ли материнская плата будет конфликтовать с памятью. Тем не менее, каждая модель тестируется на совместимость с большинством модулей памяти. Например, вот часть 100% поддерживаемых комплектов памяти для Asus Maximus XII Hero:
Однако список совместимости не панацея. Современные платы переваривают всевозможные комплекты памяти. Главное, соблюдать эти пункты:
Поддержка частот самой памятью зависит от модели. Например, на официальном сайте Crucial можно проверить поддержку для каждой планки Ballistix:
Сильно тереть вредно
Народный метод, предлагающий протереть контакты ОЗУ ластиком, — заблуждение и самообман. Вот почему:
Чистить контакты нужно, только если они в таком состоянии, как на фото выше. Если они и так в порядке, ничего протирать не нужно. На новых комплектах из магазина — и подавно. Рядом с контактами на текстолите находятся конденсаторы, которые легко сбить неаккуратными движениями. После такого память даже не придется проверять на ошибки.
Тем не менее, сторонники протирки отмечают, что она частенько решает некоторые проблемы. И дело не в чистоте контактов:
«Чтобы протереть контакты, надо достать планки из разъемов. После протирки вставляем их обратно. В это время в компьютере происходит волшебство: при первом включении новое оборудование вызывает инициализацию, чтобы материнская плата узнала уникальные данные о работе планок памяти. Для ускорения последующих загрузок компьютера они записываются в постоянную память и используются при каждом включении. Так происходит с каждым подключенным к ПК устройством. Следовательно, вытаскивая планки на «протирку», мы обновляем информацию об ОЗУ. Другими словами, материнка заново «тренирует» память. Некоторые программные сбои исчезают как по волшебству».
Тестируем на ошибки
Стресс-тесты
Проверка памяти на ошибки — затяжное удовольствие. Поэтому перед поиском лучше удостовериться, что проблема в ОЗУ, а не других компонентах. Для этого используют стресс-тесты, которые умеют нагружать железо точечно.
Наиболее популярная программа для тестов — AIDA64:
Аида тестирует процессор, кэш-память процессора, оперативную память, диски и видеокарты. Кремниевая техника привередлива к температурным условиям. Поэтому, чтобы определить, какой элемент в сборке дает сбой, проводится тестирование на рабочей температуре. Тем более, что память подвержена дестабилизации из-за завышенной температуры чипов.
Для прогрева и комплексного тестирования системы на стабильность можно включить OCCT:
Хотя тест написан для проверки стабильности процессора в разгоне, для наших нужд он тоже подойдет. Для создания нагрузки программа использует большой объем оперативной памяти, поэтому если проблемы с ОЗУ есть, в этом стресс-тесте они, скорее всего, проявятся.
Самый надежный и подробный тест стабильности системы — это Prime95:
В автоматическом режиме программа проверяет систему комплексно, нагружая задачами разного объема. Поэтому для точечного тестирования есть шпаргалка. Свой объем задачи для разных узлов:
Поиск ошибок
Закончив с поиском неисправного компонента и разобравшись, что в некорректной работе компьютера замешана связка процессор + оперативная память, переходим к поиску ошибок. Для этого существует несколько программ, которыми пользуются и обычные пользователи, и специалисты в сервисных центрах.
MemTest86 — древнейший инструмент для проверки памяти, работает с загрузочной флешки через DOS.
Утилита появилась в 90-х годах, и до сих пор поддерживается разработчиками. Идеальный и единственный вариант для тех, у кого нет операционной системы или она не загружается.
Установка на флешку:
TestMem5 — утилита пришла из мира оверклокинга и пока держится в топе проверялок памяти.
Силами и умами энтузиастов удалось создать такие конфигурационные файлы, что даже бесконечная проверка с помощью MemTest86 не сравнится с часовым прогоном этой утилиты.
Настройка программы:
RAM Test Karhu — популярный среди зарубежных оверклокеров тест памяти.
Эта программа быстрее всех тестирует память на ошибки. Показатель стабильности памяти — если Coverage перевалил за 200% с нулем в Error Count. Качество подтверждается лицензией, но истоимость программы составляет почти 10 евро.
Есть также десятки других утилит: Это HCI MemTest, MemTest64, AIDA Memory Test и другие. Но качество их работы не гарантируется.
Ошибка одна — планок две
В современных сборках память комплектуется минимум двумя планками для включения двухканального режима. Поэтому для поиска конкретной планки, которая дает ошибки, придется тестировать каждую поочередно в первом слоте материнской платы. Если ошибок нет — убираем. Затем вставляем другую планку и тестируем ее аналогичным образом.
Как узнать частоту оперативной памяти
– Быстрее, еще быстрее, ну ускорься, пожалуйста, хоть немного, а то меня сейчас…
– Не могу, дорогой Геймер, ведь я достигла своей предельной тактовой частоты.
Примерно так мог бы выглядеть диалог не слишком быстрой оперативной памяти и Геймера, у которого на счету каждая доля секунды.
Тактовая частота оперативной памяти (ОЗУ, RAM) – второй по значимости параметр после объема. Чем она выше, тем быстрее происходит обмен данными между процессором и ОЗУ, тем шустрее работает компьютер. Оперативка с низкими тактами может стать «бутылочным горлом» в ресурсоемких играх и программах. И если вы не хотите каждый раз упрашивать капризную железку немного прибавить скорость, при покупке всегда обращайте внимание на эту характеристику. Сегодня поговорим, как узнать частоту оперативной памяти по описанию в каталогах магазинов, а также той, что установлена на вашем ПК.
Как понять, что за «зверя» предлагает магазин
Кто-то подумает, что речь в этом примере идет о четырех разных планках. На самом деле так можно описать один и тот же модуль RAM с эффективной частотой 1600 МГц! И все эти числа косвенно или прямо указывают на нее.
Чтобы больше не путаться, разберемся, что они означают:
На скриншоте ниже показано описание скоростных характеристик оперативки из каталогов трех компьютерных магазинов. Как видно, все продавцы обозначают их по-своему.
Разные модули ОЗУ в рамках одного поколения – DDR, DDR2, DDR3 или DDR4, имеют разные частотные характеристики. Так, самая распространенная на 2017 год RAM DDR3 выпускается с частотностью 800, 1066, 1333, 1600, 1866, 2133 и 2400 МГц. Иногда ее так и обозначают: DDR3-1333, DDR3-1866 и т. д. И это удобно.
Собственную эффективную частоту имеет не только оперативка, но и устройство, которое ею управляет – контроллер памяти. В современных компьютерных системах, начиная с поколения Sandy Bridge, он входит в состав процессора. В более старых – в состав компонентов северного моста материнской платы.
Практически все ОЗУ могут работать на более низких тактах, чем указано в характеристиках. Модули оперативки с разной частотностью при условии сходства остальных параметров совместимы между собой, но способны функционировать только в одноканальном режиме.
Если на компьютере установлено несколько планок ОЗУ с разными частотными характеристиками, подсистема памяти будет вести обмен данными со скоростью самого медленного звена (исключение – устройства с поддержкой технологии XMP ). Так, если частота контроллера составляет 1333 МГц, одной из планок – 1066 МГц, а другой – 1600 МГц, передача будет идти на скорости 1066 МГц.
Как узнать частоту оперативки на компьютере
Однако в CPU-Z есть еще один раздел – «Memory», а в нем – параметр «DRAM Frequency», равный 665,1 MHz. Это, как вы, наверное, догадались, фактические данные, то есть частотный режим, в котором в действительности функционирует ОЗУ. Если мы умножим 665,1 на 2, то получим 1330,2 MHz – значение, близкое к 1333 – частоте, на которой работает контроллер памяти этого ноутбука.
Помимо CPU-Z, аналогичные данные показывает и другие приложения, служащие для распознавания и мониторинга железа ПК. Ниже приведены скриншоты бесплатной утилиты HWiNFO32/64 :
И платной, но горячо любимой российскими пользователями AIDA64 :
Где и что смотреть, думаю, понятно.
Наконец, последний способ узнать частоту оперативной памяти – это чтение этикетки, приклеенной к самой планке.
Если вы прочитали статью сначала, вам не составит труда найти в этих строчках нужные сведения. В примере, показанном выше, интересующий показатель составляет 1600 MHz и скрывается в слове “PC3L-12800s”.
Измеряем на коленке пропускную способность памяти
Несколько недель назад в разговоре за обедом коллега пожаловался на какой-то медленный процесс. Он подсчитал количество сгенерированных байт, количество циклов обработки, и в конечном счёте, объём оперативной памяти. Коллега заявил, что современный GPU с пропускной способностью памяти более 500 ГБ/с съел бы его задачу и не подавился.
Мне показалось, что это интересный подход. Лично я раньше не оценивал задачи производительности с такой стороны. Да, я знаю о разнице в производительности процессора и памяти.
Я знаю, как писать код, который активно использует кэш. Знаю примерые цифры задержки. Но этого недостаточно, чтобы сходу оценить пропускную способность памяти.
Вот мысленный эксперимент. Представьте, что в памяти непрерывный массив из миллиарда 32-разрядных целых чисел. Это 4 гигабайта. Сколько времени займёт перебор этого массива и суммирование значений? Сколько байт в секунду может CPU считать из оперативной памяти? Непрерывных данных? Произвольного доступа? Насколько хорошо можно распараллелить этот процесс?
Вы скажете, что это бесполезные вопросы. Реальные программы слишком сложны, чтобы имел смысл такой наивный ориентир. Так и есть! Реальный ответ — «зависит от ситуации».
Тем не менее, я думаю, что этот вопрос стоит изучить. Я не пытаюсь найти ответ. Но думаю, что мы можем определить некоторые верхние и нижние границы, некоторые интересные точки в середине и что-то узнать в процессе.
Цифры, которые должен знать каждый программист
Если вы читаете блоги по программированию, то наверняка сталкивались с «цифрами, которые должен знать каждый программист». Они выглядят примерно так:
Отличный список. Он всплывает на HackerNews как минимум раз в год. Каждый программист должен знать эти цифры.
Но эти цифры о другом. Задержка и пропускная способность не одно и то же.
Задержка в 2020 году
Тот список составлен в 2012 году, а эта статья 2020 года, времена изменились. Вот цифры для Intel i7 со StackOverflow.
Интересно! Что изменилось?
Вот некоторые цифры из wikichip по пропускной способности и размеру кэша моего процессора.
Наивный бенчмаркинг
Проведём несколько тестов. Для замера пропускной способности я написал простенькую программу на C++. Очень приблизительно она выглядит так.
Некоторые детали опущены. Но вы поняли идею. Создать большой, непрерывный массив элементов. Разделить массив на отдельные фрагменты. Обработать каждый фрагмент в отдельном потоке. Накопить результаты.
Проведём тесты с тремя типами данных:
int — основное 32-разрядное целое число
matri4x4 — содержит int[16] ; помещается в 64-байтовую строку кэша
matrix4x4_simd — использует встроенные средства __m256i
Большой блок
Довольно неплохой результат. int32 может последовательно считывать в одном потоке 11 ГБ/с. Он масштабируется линейно, пока не достигнет 38 ГБ/с. Тесты matrix4x4 и matrix4x4_simd быстрее, но упираются в тот же потолок.
Существует чёткий и очевидный потолок, сколько данных мы можем считывать из оперативной памяти в секунду. На моей системе это примерно 40 ГБ/с. Это соответствует современным спецификациям, перечисленным выше.
Судя по трём нижним графикам, случайный доступ медленный. Очень, очень медленный. Производительность однопоточного int32 составляет ничтожные 0,46 ГБ/с. Это в 24 раза медленнее, чем последовательное суммирование на скорости 11,03 ГБ/с! Тест matrix4x4 показывает лучший результат, потому что выполняется на полных кэш-линиях. Но он по-прежнему в четыре-семь раз медленнее, чем последовательный доступ, и достигает пика на уровне всего 8 ГБ/с.
Малый блок: последовательное чтение
В моей системе размер кэша L1/L2/L3 для каждого потока составляет 32 КБ, 256 КБ и 2 МБ. Что произойдёт, если взять 32-килобайтный блок элементов и перебрать его 125 000 раз? Это 4 ГБ памяти, но мы всегда будем попадать в кэш.
Потрясающе! Однопоточная производительность аналогична чтению большого блока, около 12 ГБ/с. За исключением того, что на этот раз многопоточность пробивает потолок 40 ГБ/с. В этом есть смысл. Данные остаются в кэше, так что узкое место оперативной памяти не проявляется. Для данных, которые не поместились в кэш L3, действует тот же потолок около 38 ГБ/с.
Тест matrix4x4 показывает аналогичные результаты схеме, но ещё быстрее; 31 ГБ/с в однопоточном режиме, 171 ГБ/с в многопоточном.
Очевидно, что это поверхностный синтетический тест. Большинство приложений не выполняют одну и ту же операцию с одними и теми же данными миллион раз подряд. Тест не показывает производительность в реальном мире.
Но урок понятен. Внутри кэша данные обрабатываются быстро. С очень высоким потолком при использовании SIMD: более 100 ГБ/с в однопоточном режиме, более 1000 ГБ/с в многопоточном. Запись данных в кэш происходит медленно и с жёстким лимитом около 40 ГБ/с.
Малый блок: случайное чтение
Давайте сделаем то же самое, но теперь с произвольным доступом. Это моя любимая часть статьи.
Чтение случайных значений из RAM происходит медленно, всего 0,46 ГБ/с. Чтение случайных значений из кэша L1 очень быстрое: 13 ГБ/с. Это быстрее, чем скорость чтения последовательных данных int32 из RAM (11 ГБ/с).
Произвольный доступ matrix4x4_simd безумно быстр.
Выводы по произвольному доступу
Это нужно переварить. Произвольный доступ к кэшу сопоставим по скорости с последовательным доступом к RAM. Падение от L1 16 КБ до L2 256 КБ всего в два раза или меньше.
Думаю, что это повлечёт глубокие последствия.
Связанные списки считаются вредными
Последовательное суммирование значений за указателем выполняется со скоростью менее 1 ГБ/с. Скорость произвольного доступа с двойным пропуском кэша составляет всего 0,1 ГБ/с.
Погоня за указателем замедляет выполнение кода в 10-20 раз. Не позволяйте своим друзьям использовать связанные списки. Пожалуйста, подумайте о кэше.
Оценка бюджета для фреймов
Для разработчиков игр привычно устанавливать предел (бюджет) нагрузки на CPU и объём памяти. Но я никогда не видел бюджет пропускной способности.
У современных игр FPS продолжает расти. Сейчас он на уровне 60 FPS. VR работает на частоте 90 Гц. У меня игровой монитор на 144 Гц. Это потрясающе, так что 60 FPS кажется дерьмом. Я ни за что не вернусь к старому монитору. У киберспортсменов и стримеров Twitch мониторы 240 Гц. В этом году Asus представила на выставке CES монстра на 360 Гц.
У моего процессора верхний предел около 40 ГБ/с. Это кажется большой цифрой! Однако при частоте 240 Гц получается всего лишь 167 МБ на кадр. Реалистичное приложение может генерировать трафик 5 ГБ/с на частоте 144 Гц, а это всего 69 МБ на кадр.
Вот таблица с несколькими цифрами.
Мне кажется, полезно оценить проблемы с такой стороны. Это позволяет понять, что некоторые идеи неосуществимы. Достигнуть 240 Гц непросто. Это не случится само собой.
Числа, которые должен знать каждый программист (2020)
Прошлый список устарел. Сейчас его необходимо обновить и привести в соответствие к 2020 году.
Вот несколько цифр для моего домашнего компьютера. Это смесь AIDA64, Sandra и моих бенчмарков. Цифры не дают полной картины и являются лишь отправной точкой.
Хорошо бы создать небольшой, простой опенсорсный бенчмарк. Какой-нибудь файл C, который можно запустить на настольных компьютерах, серверах, мобильных устройствах, консолях и т. д. Но я не тот человек, который напишет такой инструмент.
Отказ от ответственности
Измерить пропускную способность памяти сложно. Очень сложно. В моём коде наверняка есть ошибки. Много неучтённых факторов. Если у вас есть некое критическое замечание для моей методики, вероятно, вы правы.
В конечном счёте, я думаю, что это нормально. Это статья не о точной производительности моего десктопа. Речь о постановке проблем с определённой точки зрения. И о том, как научиться выполнять некоторые приблизительные математические расчёты.
Вывод
Коллега поделился со мной интересным мнением о пропускной способности памяти GPU и производительности приложений. Это подтолкнуло меня к исследованию производительности памяти на современных компьютерах.
Для примерных расчётов вот некоторые цифры для современного десктопа:
Тем не менее, самое важное — это новый способ думать о проблемах. Представление проблемы в виде байтов в секунду или байтов на кадр — ещё одна линза, через которую нужно смотреть. Это полезный инструмент на всякий случай.
Исходный код
Дальнейшие исследования
Эта статья только слегка затронула тему. Вероятно, я не буду углубляться в неё. Но если это сделал, то мог бы охватить некоторые из следующих аспектов:
Спецификации системы
Тесты проводились на моём домашнем ПК. Только стоковые настройки, никакого разгона.