Скорость работы одноплатного компьютера определяется не только процессором и оперативной памятью

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



Скорость работы одноплатного компьютера определяется не только процессором и оперативной памятью. В реальных сценариях — от загрузки системы до работы баз данных и Docker-контейнеров — всё упирается в накопитель. У классических Raspberry Pi это обычно microSD-карта: просто, но не всегда предсказуемо. В Repka Pi 4 роль основного накопителя выполняет eMMC: он может быть распаян на плате или использоваться в виде отдельного модуля. Это специализированное решение, которое лучше подходит как системный диск. Однако стандарты eMMC разные, и внутри одного стандарта есть разные режимы работы. Именно настройке этих режимов и была посвящена наша работа: мы столкнулись с тем, что eMMC-модули на AllWinner H6 не раскрывали свой потенциал.

Проблема оказалась системной: стандартного драйвера ядра было недостаточно, а сам контроллер eMMC в процессорах AllWinner H6 и H616/H618 имеет особенности, из-за которых без доработки ядра нельзя задействовать более скоростные режимы. Фактически все одноплатники на этих SoC имели ограничение. Мы перенесли и адаптировали BSP-драйвер, добавили поддержку режима HS200, реализовали tuning и проверили это на реальных модулях. Начиная с определённой версии Repka OS для Repka Pi 4 все эти изменения вошли в систему. Позже добавили fallback-режим для случаев, когда конкретный eMMC-модуль не проходит tuning на максимальной частоте, хотя по характеристикам он её поддерживает.

Результат превзошёл ожидания. На модулях, прошедших tuning на HS200, скорость чтения выросла примерно в 5,2 раза. На модуле, где сработал fallback, — в 3,6 раза. Запись ускорилась в зависимости от накопителя от 2,4 до 4,4 раза. И это без замены платы или накопителя — достаточно обновить Repka OS. Но чтобы понять, почему так произошло и почему это вообще важно, стоит разобраться, что такое eMMC на самом деле.

Многие воспринимают eMMC как просто «флешку в виде микросхемы». На деле это полноценный накопитель со своим контроллером, кэшем, алгоритмами распределения нагрузки и внутренним параллелизмом. Операционная система не работает с NAND-памятью напрямую: Linux видит eMMC как обычное блочное устройство с логическими адресами, а все детали — стирание блоков, плохие блоки, коррекция ошибок, износ — скрыты внутри контроллера. Поэтому два модуля одинакового объёма могут вести себя совершенно по-разному: влияет не только сама память, но и прошивка контроллера, внутренний кэш и поддерживаемые режимы интерфейса.

Внутри eMMC NAND-память организована иерархически: страницы (минимальная единица чтения/записи), блоки (группы страниц, стираемые целиком), плоскости и кристаллы. Данные нельзя просто перезаписать поверх старых — при малой записи контроллер читает старые данные, готовит новые, пишет в другое место, а старую область помечает как неактуальную. Затем происходит сборка мусора. Тип NAND тоже важен: SLC, MLC, TLC. Чем больше бит в ячейке, тем дешевле накопитель, но тем сложнее чтение, запись и коррекция ошибок. Поэтому современные eMMC часто используют SLC-кэш: часть TLC-памяти временно работает в одноуровневом режиме, ускоряя запись. Когда кэш заканчивается, скорость проседает. Короткий тест этого не покажет, а длительная запись — запросто.

Контроллер — мозг eMMC. Он принимает команды от SoC, управляет NAND, ведёт таблицы сопоставления логических адресов с физическими, выполняет выравнивание износа и фоновые операции. FTL (Flash Translation Layer) — это слой, который превращает неудобную NAND в привычное блочное устройство. Логические блоки могут физически находиться где угодно, и контроллер постоянно обновляет карту соответствия. Именно поэтому к контроллеру и его прошивке предъявляются высокие требования: при последовательном чтении слабый контроллер может выглядеть нормально, но при установке пакетов или работе баз данных разница становится заметной.

Теперь о практической части. Мы взяли три реальных eMMC-модуля: FORESEE FEMDNN256G-A3V01 256 ГБ, Samsung KLMCG2UCTB-B041 64 ГБ и Samsung KLMCG8GEND-B031 64 ГБ. На первых двух удалось включить HS200 и получить прирост чтения в 5,2 раза. Третий модуль не проходил tuning на максимальной частоте, поэтому сработал fallback-режим — и всё равно чтение выросло в 3,6 раза. Запись на всех трёх ускорилась от 2,4 до 4,4 раза. Для системного накопителя это колоссальная разница: система загружается быстрее, пакеты устанавливаются шустрее, визуально меняется отзывчивость всего одноплатника.

Главное, что мы хотим донести: проблема была не в железе, а в программной поддержке контроллера. AllWinner H6 и его производные имеют все шансы работать с eMMC на порядок быстрее, если правильно настроить драйвер и прошивку. Сейчас это уже сделано для Repka Pi 4 и Repka OS. Если у вас есть такой одноплатник, просто обновите операционную систему до актуальной версии и посмотрите на цифры. Если у вас другой SBC на AllWinner H6/H616/H618 — стоит проверить, включён ли у него HS200, и, возможно, это повод для собственного эксперимента.

Мы уверены, что умение разбираться в таких деталях и есть опережающее мышление: не менять плату ради скорости, а выжимать максимум из того, что уже есть. А пробовали ли вы ускорить eMMC на своих платах? Какие результаты получили? Делитесь опытом в комментариях — вместе соберём полезную базу знаний.


Телеграм: t.me/ainewsline

Источник: vk.com

Комментарии: