Как мы измеряем потребление твердотельных PCIe-накопителей с разъемом M.2

15
Оглавление
Быстрая навигация по разделам статьи

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

Практика

Замер потребления в случае твердотельных PCIe-накопителей осложнен тем, что у них нет выделенного разъема питания — оно подается через несколько крохотных контактов в само́м разъеме M.2.

В подобных случаях обычно выручают разного рода адаптеры или переходники, в которых линии питания проще выделить и вывести на измеритель тока и напряжения. В данном случае мы воспользовались платой-переходником с двух разъемов M.2 на разъем PCIe x4. На этой плате три дорожки питания 3,3 В от разъема PCIe объединяются в одну широкую дорожку, в разрыв которой уже можно вставить токоизмерительный шунт. Разъемы M.2 на плате разные: один с ключом типа B (только для накопителей с интерфейсом SATA) и один с ключом типа M (только для накопителей с интерфейсом PCIe). Для измерений мы используем второй разъем.

Непосредственно для измерения тока и напряжения мы применяем микросхему INA226 компании Texas Instruments, с которой есть положительный опыт работы. Эта микросхема измеряет напряжение на шине питания в диапазоне от 0 до 36 В и напряжение на токоизмерительном шунте в диапазоне от –81,9175 мВ до 81,92 мВ. Второе позволяет применять шунты с низким сопротивлением, что снижает падение напряжения на нем до такой величины, которая в большинстве случаев никак не отражается на функционировании устройств, потребление которых измеряется. За исключением довольно мелкого размера, в остальном микросхема удобна в работе. Результаты измерений INA226 по запросу передает по шине I2C.

Связь измерителя с ПК изначально предполагалась по USB, что потребовало внедрения в схему еще одного компонента — шлюза между интерфейсами I2C и USB. В качестве такового мы решили использовать специализированную микросхему MCP2221 компании Microchip. Для функционирования эта микросхема требует минимального количества внешних компонентов и выпускается в удобных для ручной пайки корпусах PDIP и SOIC. Сама микросхема, сопутствующее ПО и набор для разработчика (SDK) хорошо документированы, что ускоряет и облегчает разработку устройств на ее основе.

Измерительный модуль мы решили сделать максимально универсальным и допускающим расширение функциональности, чтобы была возможность использовать почти все функции MCP2221, что, конечно же, было ошибкой и только увеличило размеры устройства измерения. Разработка этого модуля велась с помощью комплекса KiCad EDA (версии (5.1.9)-1). Принципиальная схема модуля:

В качестве шунта мы применили резистор с сопротивлением 0,025 Ом, что ограничивает максимальный измеряемый ток на уровне порядка 3,2 А. Беглая оценка позволила предположить, что в такой диапазон укладывается потребление всех SSD с разъемом M.2 (хотя в принципе в этом разъеме всего 9 контактов на питание, каждый из которых должен выдерживать до 0,5 А, что дает максимальный ток в 4,5 А, но, с другой стороны, спецификации карт PCIe ограничивают максимальный ток по шине 3 В на уровне 3 А, а мы используем такую карту в качестве адаптера). Разъем USB мы решили не устанавливать и припаяли USB-хвост непосредственно к плате модуля. Вид готового модуля со стороны размещения компонентов:

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

На фронтальной стороне платы мы перерезали дорожку питания 3,3 В и к ее краям припаяли плоские проводники, которые перекинули на другую сторону и припаяли к плате модуля на входе и выходе шунта. Эти проводники не препятствуют установке накопителей.

Напряжение питания измеряется на выходе шунта, то есть уже с учетом падения напряжения на шунте.

Работа с модулем возложена на простую консольную программу, обеспечивающую сбор данных. Конфигурация задается с помощью текстового файла, имя которого передается первым параметром командной строки. В этом файле 9 строк, по числу на каждую (за одним возможным исключением). Эти числа определяют режим работы модуля и самой программы. Пример данных такого файла с пояснениями приведен в таблице ниже (в самом файле никаких пояснений нет).

Пример данных Пояснение
0000001639 серийный номер MCP2221, к которому нужно подключаться, или NoSN
100 период опроса INA226 в мс
9.887E-05 коэффициент для расчета тока
0.00125 коэффициент для расчета напряжения
04D8 Vendor ID MCP2221 (шестнадцатеричное число)
00DD Product ID MCP2221 (шестнадцатеричное число)
0040 I2C-адрес INA226 (шестнадцатеричное число)
004F первый (старший) байт конфигурации INA226 (шестнадцатеричное число)
0027 второй (младший) байт конфигурации INA226 (шестнадцатеричное число)

Предусмотрен опциональный контроль по серийному номеру MCP2221, что актуально, если в системе будет подключено два или более устройства с MCP2221. Чтобы снизить погрешность из-за отсутствия синхронизации между готовностью данных и их передачей, период опроса INA226 должен быть в несколько раз меньше периода, с которым INA226 выполняет измерение тока и напряжения. Сама микросхема INA226 измеряет напряжение на шунте и на линии питания с высокой точностью, но погрешность шунта присутствует. Мы даже не знаем, какого класса точности использован шунт, так как он был выпаян из какой-то платы защиты аккумулятора от ноутбука. В итоге нужный коэффициент для расчета тока был определен с помощью калибровки при использовании высокоточного мультиметра. Для точного значения 0,025 Ом коэффициент для расчета равен 1E-04, у нас получилось 9,887E-05, то есть отличие всего в 1%. В принципе, для наших целей можно использовать и первое значение, но проверить сопротивление резистора нужно было в любом случае. На всякий случай мы проверили и точность измерения напряжения. Она оказалась достаточно высокой, чтобы оставить расчетный коэффициент (0,00125). Vendor ID и Product ID нужны для идентификации USB-устройства, их значения мы оставили заводскими. I2C-адрес INA226 задается соединением адресных выводов INA226, и в нашем случае этот адрес задан как 0x40 без возможности изменения.

Байты конфигурации задают режим работы INA226. Для любознательных приведем выдержку из спецификаций на INA226:

Режим работы мы выбрали следующий:

  • непрерывное измерение напряжения на шунте и на линии питания
  • время преобразования 1,1 мс для обоих напряжений
  • усреднение по 1024 выборкам

Таким образом усреднение происходит за примерно 1 с при частоте опроса INA226 по I2C 10 раз в секунду.

Опрос INA226 начинается сразу после запуска консольной программы SSDPower.exe, а останавливается после ввода с консоли символа «S» или «s». Пример командной строки:

SSDPower.exe conf.txt data

где conf.txt — конфигурационный файл, а data — имя (без расширения) трех файлов:

data.log — для записи исходных данных в отсчетах АЦП (ток \t напряжение)
data.dat — для записи обработанных данных (время (с) \t ток (А) \t напряжение (В))
data.txt — для записи результатов

Во время опроса записываются только исходные данные в отсчетах АЦП. После окончания записи эти данные с использованием коэффициентов пересчитываются в реальные значения тока и напряжения (записываются в файл data.dat), а также производится простая статистическая обработка, ее результат записывается в файл data.txt. Пример содержимого этого файла:

Number of points: 937
Interval: 93.6 s
Average current: 0.387568 A
Maximum current: 0.597076 A
Average voltage: 3.31477 V
Energy: 120.198 W*s

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

Для автоматизации процесса можно использовать скрипты AutoIt. Пример такого скрипта:

#include
; Matches any substring in the title.
Opt("WinTitleMatchMode", 2)
; Run SSDPower.exe
Local $iPID = ShellExecute ("SSDPower.exe", " conf.txt data", "", "", @SW_MINIMIZE)
ShellExecuteWait ("test.bat")
WinActivate ("SSDPower.exe")
WinWaitActive("SSDPower.exe")
Send ("s")

В этом скрипте test.bat — пакетный файл, который запускает какой-либо процесс, использующий SSD. Например, копирование большого файла:

copy "test.mkv" i:\

В результате по окончании копирования опрос остановится и будет получено значение энергии, затраченной на этот процесс.

Пример работы

Для пробного тестирования мы взяли SSD Seagate BarraCuda Q5 емкостью 500 ГБ. Нагрузку на этот накопитель мы создавали с помощью синтетического теста CrystalDiskMark 6. Настройки видны на снимке с экрана:

Пауза между тестами установлена в 1 с. Период опроса мы установили на 100 мс (то есть 10 раз в секунду), а усреднение задали по 1024 и по 128 выборкам. Второй вариант позволил выявить наличие или отсутствие кратковременных пиков или провалов в потреблении. Запуск и остановку опроса в данном случае выполняли вручную. В обоих случаях за время выполнение всех восьми тестов потребление составило порядка 120 Вт·с. Приведем зависимости тока от времени:

В случае усреднения по 128 выборкам отчетливо видна пауза в одну секунду между тестами, но принципиальных отличий от варианта с усреднением по 1024 выборкам нет, максимальные значения тока в тестах примерно такие же.

Далее мы провели тест с автоматическим запуском копирования большого файла (чуть больше 4 ГБ) на SSD. На этот процесс было затрачено 45 с и 26 Вт·с. Зависимость тока от времени:

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

Выводы

На основе измерителя напряжений INA226 и шлюза I2C—USB MCP2221 был разработан аппаратно-программный комплекс, позволяющий определять энергопотребление твердотельных PCIe-накопителей с разъемом M.2. Потребленная электроэнергия измеряется с усреднением в интервале порядка одной секунды, поэтому данный метод может быть применен для процессов длительностью от нескольких секунд. Предварительные тесты с более коротким интервалом усреднения показали, что оценку энергопотребления SSD лучше проводить с помощью синтетических тестов, которые создают нагрузку равномерно во времени.

Материалы к данной статье и исходные тексты ПО опубликованы на GitHub

Алексей Кудрявцев
15 комментариев
Комментировать
4 Гб, 45 секунд — ~90 Мб/с. Такая скорость явно не для загрузки SSD, который большую часть времени будет просто ждать заполнения своего буфера, что, скорее всего, и видно на представленном графике энергопотребления.
>копирование с помощью системной команды не может равномерно во времени нагрузить SSD
Если источник находится на быстром SSD или RAM-диске, то нормально так должно нагружаться. Но начиная с Windows Vista есть именно системная команда и для загрузки, и для тестирования дисковой подсистемы: «winsat disk -drive i:». Можно измерять скорости последовательного и/или случайного доступа при записи/чтении, настраивать размер и количество блоков данных. При этом убирается слабое звено в виде промежуточного диска, являющегося источником или целью копирования.
2
Ответить
«SSD, который большую часть времени будет просто ждать заполнения своего буфера»
Жаль только вот, что никакого «своего буфера» у него не бывает ;)
2
Ответить
Если вы про отсутствие собственного DRAM-кеша на борту используемой в статье барракуды, то он никуда не делся, просто переехал в системную оперативку (как и в других «безбуферных» SSD-дисках). Плюс ОС обладает собственными буферами ввода/вывода, что позволяет не дёргать контроллер ради чтения/записи пары байт.
И к слову, интересно было бы посмотреть на энергопотребление при линейной записи за пределами SLC-кеша, когда на вышеупомянутой барракуде скорость катастрофически падает с заявленных 900 до 50 Мб/с. Что «дороже», быстрая запись в кеш или медленная в основную QLC-память?
2
Ответить
Даже на SSD с DRAM для кэширования записи пользовательских данных она не используется
Системный кэш, разумеется, используется для всех накопителей (когда включен) — только вот данные там держатся очень ограниченное время, так что пару байт таки записать придется
Но понятно, что простое копирование измерять не интересно. Это просто иллюстрация — так-то немного для других вещей все затевалось
2
Ответить
Вам про Фому написали, а Вы про Ерёму отвечаете. Да пускай даже под «кешем» будем понимать псевдо-SLC-кеш, в который кстати накопитель четверть свободного объёма, то есть грубо 120ГБ со скоростью 1ГБ/с писать может. Это не отменяет того факта, что в тесте на запись 4ГБ запись шла 45сек, со скоростью 90МБ/с вместо, скажем, 5 секунд с 800МБ/с (во что бы сразу поверил). Там что, мелкоблочку писали? Или последовательно с HDD? Пока нет вменяемого описания теста и что именно было сделано — грош цена таким замерам.
2
Ответить
«Там что, мелкоблочку писали? Или последовательно с HDD?»
Там мог быть банально забит SLC-кэш, который Q5 самостоятельно расчищает очень неохотно (мягко говоря). В любом случае, как уже сказал никакого принципиального значения это не имеет, поскольку просто иллюстрация
«Пока нет вменяемого описания теста и что именно было сделано — грош цена таким замерам»
Ну ваше мнение по этому поводу в любом случае не дороже :)
2
Ответить
Да, ты прав, просто иллюстрация, но не до всех это дошло. Конкретные тесты, на которых будут замеры, ты сам выберешь и нам об этом расскажешь :)
2
Ответить
Мы делили апельсин занимались ерундой… какая религия вам не позволила вывести 4 контакта для мультиметра? Или нужен был детальный анализ с графиками? Ну осциллограф воткните тогда уж.
2
Ответить
Ну вывели бы… и зачем?
2
Ответить
DE
«напряжение на токоизмерительном шунте в диапазоне от –81,9175 мВ до 81,92 мВ»
в тексте это выглядит не как минус но тире.
хоть и понятно, что -+ чтобы якобы переменный мерить, но разжёвано плохо каким местом вольтаж (на шунте) = замеру тока (пусть даже 146% про закон Ома хотя бы слышали)
«0,025 Ом» при столь малом значении шунта, интересно сколько «высокоточный мультиметр» намерил на «плоских проводниках»?
фактов нет, но «пролетарское чутьё» нашёптывает, что сопоставимое, с учётом пайки.(хоть точке замера это и не важно)
2
Ответить
«Высокоточным мультиметром» измеряли, разумеется, ток, а не сопротивление.
2
Ответить
А теперь осталось развести готовый pci-e переходник с интегрированным измерителем и будет вообще огонь.
Молодцы ;)
2
Ответить
Мы такой сделали. Для замеров потребления видеокарт планировали использовать, но пока не используем :)
2
Ответить
Посмотреть бы теперь таблицу с потреблением актуальных SSD M2…
2
Ответить
Ph
Токоизмерительнй шунт(резистор) нужно впаять в разрыв дорожки питания на плате. Тема интересная, хотелось бы увидеть результаты измерений популярных SSD разной ёмкости. Например Samsung 970 EVO PLUS. На всех ёмкостях указан одинаковый ток потребления. Так ли это, на самом деле? Вот у Intel в серии 660p указан разный ток, более ёмкие накопители — потребляют больше. Такая информация была бы полезна при выборе накопителя для замены в ноутбук…
2
Ответить
Согласен с правилами
Комментировать