воскресенье, 10 февраля 2013 г.

Малиновый звон. На пути к гигагерцу.

От жару и камень треснет.

Русская пословица.

Как и любая железка, Raspberry Pi имеет свойство нагреваться. Особо горячие места — это сам процессор, Ethernet/USB-контроллер и стабилизатор напряжения питания.


С другой стороны, в малинку заложен большой ресурс тактовой частоты: производитель сохраняет гарантию при разгоне до 1ГГц, имея по умолчанию 700 МГц. Грех не воспользоваться такими возможностями. Однако, при таком нагреве это чревато неприятными последствиями, поэтому нужно что-то делать с накалом битовых "страстей".
Вообще говоря, изначально разгон в Raspberry Pi не поддерживался вообще. То есть,теоретически ничего не мешало это сделать, однако решившийся сразу же лишался гарантии. В настоящее время оверклокинг и овервольтинг доступны всем, без нарушения гарантии: разработчики предусмотрели пять режимов разгона "из коробки", которые можно выбрать, вызвав конфигуратор (в данном посте рассматриваем Raspbian): $ sudo raspi-config .
Всего доступно пять таких режимов, максимальный из которых разгоняет ARM-процессор до 1 ГГц. В этом режиме процессор показывает производительность целочисленных вычислений на 52% выше, чем в стандартном режиме (700 МГц), операции с плавающей точкой в тесте nbench выполняются на 64% быстрее, а тесты памяти показывают прибавку 55%. Нормальной температурой при таком режиме считается любая, до 85°С. Если этот порог будет преодолен, то частота автоматически начнёт сбрасываться на меньшую. Итак, режим 1 ГГц и был моей конечной целью.

Подготовка платы

Для пассивного охлаждения я использовал мини-радиаторы для чипов Zalman.


Они очень круто подошли по размеру к CPU и Ethernet-контроллеру, для стабилизатора напряжения же оказались великоваты, но разрезать их я не стал. Используя термоклей, радиаторы были посажены на соответствующие "горячие" чипы и высыхали 24 часа. Получилось даже симпатично:



Разгон и контроль температуры CPU

После того, как плата была подготовлена, я приступил к пошаговому разгону. Весь разгон заключается в вызове raspi-config, выборе соответствующего пресета работы, перезагрузке и контролю температуры в трёх состояниях:
  • консольный режим без старта иксов;
  • десктопный режим с запущенными иксами;
  • десктопный режим с работой и использованием программ.
После снятия показаний температуры CPU во всех режимах, я отключал Raspberry и оставлял его под активным охлаждением вентилятора в течение пяти минут. После чего снова запускал в новом режиме оверклокинга. Таким образом, система стартовала вновь охлаждённой и мне не приходилось параллельно с тактовой частотой процессора контролировать и подбирать частоту ОЗУ, вольтаж и другие параметры — всё было любезно прописано в режимах, которые предоставили разработчики.
В самом плохом случае, при выборе нового режима, система может вообще не стартануть — это значит, что выбранная частота недосягаема. Такое, к сожалению, случается часто и зависит только от конкретной платы. Но поскольку я основательно подготовился, то надеялся, что это меня обойдёт стороной.
В качестве приложения, которое будет нам греть процессор я выбрал игру на Python "Squirrel eat Squirrel". Забавная такая штука. Согласно монитора, она и процессору даёт достаточно работы.



Итак, набираем $ sudo raspi-config, пункт overclock и видим следующее:


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

$ vcgencmd get_config arm_freq

Результат выглядит примерно так: arm_freq=700.
Либо можно выкинуть в консоль информацию из файла, используя:

$ cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq

Если интересно, можно вывести всю целочисленную информацию из конфига, включая частоту ОЗУ, лимит температуры и другое:

$ vcgencmd get_config int

Результат будет примерно такой:

arm_freq=800
core_freq=250
sdram_freq=500
boot_delay=1
temp_limit=85


Контроль температуры можно осуществлять, вызывая команду (возвращает в градусах Цельсия):

vcgencmd measure_temp

Информация о температуре берётся из файла, содержимое которого можно вывести в консоль непосредственно:

$ cat /sys/class/thermal/thermal_zone0/temp

Результат выводится в миллиградусах Цельсия (да, такое тоже есть).

Результаты

Итак, моя прокачанная плата покорила все высоты, включая 1 ГГц. Результаты замеров температуры (показаны средние арифметические из 15 замеров в каждом режиме) привожу ниже.

1. 700 MHZ

Консоль Иксы Иксы + приложения
37,2°С 39,0°С 42,0°С

2. 800 MHZ

Консоль Иксы Иксы + приложения
38,1°С 40,0°С 44,5°С

3. 900 MHZ

Консоль Иксы Иксы + приложения
39,5°С 41,7°С 45,6°С

4. 950 MHZ

Консоль Иксы Иксы + приложения
41,2°С 42,8°С 45,6°С

5. 1000 MHZ

Консоль Иксы Иксы + приложения
41,7°С 43,9°С 53°С


Результаты оверклокинга с применением только пассивного охлаждения уже впечатляют — температура CPU заметно снижается и до опасного лимита остаётся большой запас. Конечно, эксперимент неидеален: во-первых, питоновская игра — это сомнительная нагрузка на процессор, куда более убедительным был бы запуск веб-сервера (какого-нибудь nginx или даже Apache) с полным боекомплектом в виде MySQL и PHP и мониторинг их длительной непрерывной работы. Но их установка связана была с техническими трудностями в плане интернета (именно в моём месте проживания).
Во-вторых, правильнее было бы всё-таки проводить бенчмарк с помощью какого-нибудь nbench, однако помешала этому опять же проблема номер один.
В-третьих, я проводил замеры на открытой плате, не учитывая корпус, а ведь его наличие усложнит воздухообмен и практически наверняка повысит нагрев CPU. Но и тут я найду оправдание: корпуса у меня попросту нет (точнее, он ещё не готов). Поэтому, эксперимент носит чисто любительский характер, но, тем не менее, вселяет оптимизм по поводу дальнейшего использования Raspberry Pi.

4 комментария:

  1. приветствую!
    моя raspberry трудиться без иксов в оригинальном корпусе, прозрачном.
    померил сейчас удаленно по ssh, получил 48.2 C
    придеться дрелью дырок насверлить :)

    ОтветитьУдалить
    Ответы
    1. Оригинальный — это вот такой? )
      http://www.chipdip.ru/library/a3056.jpg

      Удалить
  2. Сойдет ли этот радиатор со старой видеокарты? Естественно разрезав его.
    http://cs305408.vk.me/v305408146/6af0/4dBVuuIMLBY.jpg

    ОтветитьУдалить