Собираем компьютер эмбеддера

Blog by bsvi
Компьютер, с которого я пишу эту статью, я купил в 2008 году, 8 лет назад. Фактически, на нем написан и этот сайт и bsvi.ru, и сделано очень-очень много всего. Меня он абсолютно устраивал — никаких тормозов, все было отлично! Но, однажды, Solidworks сказал мне: «дружище, у тебя мало памяти!». Ну что-ж, пришло время апгрейдится!



На самом деле, если вы, как и я, большую часть жизни проводите за компьютером, то иметь хороший компьютер — совсем не плохая идея! К тому-же, компьютер — главный инструмент эмбеддера. Вот сколько времени вы пользуетесь осциллографом, а сколько компьютером? Поэтому, я не стал увеличивать файл подкачки, а просто решил собрать новый эмбэд-компьютер. Для того, чтобы апгрейд был бюджетненьким, мы не просто вкинем самые топовые комплектующие, а подойдем с умом и поищем все с хорошим отношением цена/производительность. Кроме того, все компоненты я буду покупать БУ, но с гарантией от магазинов. Получается вполне себе бюджетный апгрейд.

А что было?
Если вам интересно, что у меня было до этого, то вот:


Процессор разогнан до 3ГГц, а память до 800МГц. Все это отлично работало везде кроме синтеза для FPGA и тяжелых проектов в Solidworks. Вот так это добро выглядело:



Выбор процессора
Раньше я замечал, что эмбеддерские программы довольно плохо распараллелены, и, для нас намного лучше иметь мало быстрых ядер, чем много медленных. Вот, к примеру, небольшой отрывок работы в altium designer:



Сейчас ситуация улучшается и многие программы уже неплохо работают в несколько потоков. К примеру, IAR и GCC умеют компилировать несколько файлов одновременно:


На самом деле, оценить — однопоточная программа или многопоточная — сложно. Сложно потому, что Windows постоянно «перебрасывает» задачу между ядрами. Насколько я понял, это сделано не специально, а, просто, использует первое попавшееся свободное ядро. Вот, к примеру, результат выполнения такой программы:

while True:
	pass




Но, в среднем, лучше иметь наибольшую производительность на ядро — от этого выиграют любые задачи — и однопоточные и многопоточные, поэтому выбор процессора довольно прост — смотрим сравнение процессоров в однопоточном режиме и видим, что выбора у нас особо и нет — с большим отрывом побеждает Core i7-4790k.



Уже три поколения процессоров не могут с ним потягаться в плане однопоточных задач. Я подозреваю, что конкурентов ему не появится еще несколько лет, поэтому, можно смело брать.

Память
У всей памяти, фактически, есть 3 параметра — емкость, частота и латентность. С емкостью и частотой, вроде, понятно, а латентность — это количество тактов, которое проходит от установки адреса процессором до появления данных на ножках памяти.

Естественно, эти параметры зависят друг от друга, и, память с большей частотой может быть медленнее чем память с низкой частотой из-за латентности. Есть таблички (тут и тут), по которым можно судить о производительности памяти, но как это влияет на производительность всей системы?

Как оказалось, память очень слабо влияет на производительность. Мне особенно понравилось вот это сравнение. Из него видно, что оптимальная память 1866 CL9, но так как 1866 CL10 для меня оказалась намного дешевле, и разница в производительности менее 1%, ее и возьмем.


Память называется kingston hyperx fury. Ну вот серьезно, кто придумывает эти названия для памяти? Сплошные fury, vengeance, и прочие ballistix'ы. Но выглядит хорошо. да.

Я решил брать сразу максимальным объем, поддерживаемый процессором, 32Гб. Почему? Потому, что мне попалось предложение купить все комплектом — потом найти такую-же память сложно. Во-вторых, можно использовать встроенную графику процессора, и, в-третьих, то, что Windows показывает что память не используется, это не значит что она действительно не используется. Обычно, весь свободный объем памяти используется под дисковый и сетевой кэшы и иметь больше памяти никогда не повредит.

Материнка
Критерии к материнке очень просты — она должна поддерживать все железо, влезать в мой корпус, иметь как можно больше USB портов. Сейчас я постоянно использую 7 usb портов, плюс 3 подключаю периодически. Чтобы это все дело работало, у меня стоит две карты расширения USB. Новая материнка должно поддерживать это все нативно.

Мне попалось очень хорошее предложение — ASRock extreme4. У нее всего много и сделана она, вроде бы, качественно.

У нее есть аж 14 usb портов, 12 фазное питание, toslink и куча sata, намного больше чем я смогу использовать. Берем.



Диски
Диски — больная тема для меня — их постоянно не хватает, и у меня их скопилось довольно много. Я не особо понимаю людей, которые до сих пор работают с обычных HDD. SSD дает такое ускорение компьютеру, что не пользоваться этим просто глупо.

Так как у нас куча тяжелого софта, то под систему, нам нужно брать SSD минимум на 250gb. У меня раньше был 120gb диск и его мне не хватило в самый ответственный момент, поэтому пришлось в экстренном порядке покупать 250Гб винчестер, а старый был определен под вторую систему.

Если вам интересно, то вот что у меня сейчас стоит:

SSD Samsung evo 850 250gb — для системы (Windows)
SSD Crucial M4 120Gb — для второй системы (Linux)
SSD Sandisk ultra ii 480Gb — для проектов (поломался, я послал его в ремонт и почта его успешно потеряла, похоже, с концами)
HDD WD blue 500gb — для фильмов, музыки, итп

Так-же, для бэкапов, у меня есть NAS — Dlink dns 320 на 250Гб, но этого вполне хватает. Кстати, этот сервер бэкапится туда-же.
Это все меня сейчас устраивает, так и оставим.

Видеокарта
Казалось бы, зачем в эмбеддерском компьютере видеокарта? По одной простой причине — чтобы не занимать полосу памяти. Ведь видеоядро процессора использует системную память для отрисовки всего, что вы видите на экране — так я думал, пока не собрал компьютер.

По тестам компиляции проектов, разницы между моей дискретной видеокартой (geforce 210) и встроенной в процессор (intel 4600) я не заметил, тоесть полосы памяти хватает с запасом. Более того, мне показалось, что встроенная карта работает быстрее. И, действительно, по тестам, она в 3 раза быстрее чем моя отдельная. Памяти у меня теперь с избытком, поэтому те 256мб, которые использует встроенная видеокарта не жалко.

Охлаждение
И вот тут возникли проблемы. В простое процессор выделяет 10Вт и с ними справлялся даже штатный куллер. Но в нагрузочном тесте, мощность подымается почти до 100Вт и почти моментально процессор уходил в троттилнг (для тестов использовалась AIDA, вверху температуры ядер, внизу красным — троттилнг).



Стало понятно, что штатный кулер не справляется, поэтому я решил поставить тот кулер, что у меня был раньше. Но была проблема — прошлый процессор был на LGA775, а новый — на LGA1150. Естественно, посадочные мета под куллер между ними не совместимы, притом, до смешного. У одного расстояние между отверстиями 71.3мм, а у второго — 75мм, и, поверьте. никакйо инженерной необходимости делать так небыло — там просто пустое место. Маркетинг. что сказать. Ну, да ладно, ничего что не решит дремель, напильник и 10 минут времени.

Как оказалось, прошлый куллер тоже не может отвести тепло. При этом, температура процессора не зависила от оборотов вентилятора. Стало понятно, что маленькой прощади новых процессоров просто не достаточно чтобы прогреть ребра радиатора. Осталось искать единственное правильное решение — куллер с термотрубками.

Чудесным стечением обстоятельств, такой кулер валялся без дела у Sharix . Правда, тоже, под 775 сокет, но не суть. Кулер называется Noctua NH-C14, и, когдя я его увидел, я чуть не офигел. Это нехилая такая махина, скажу я вам.



Часик с напильником, и кулер стал на новый сокет. Фух. Кулер под полной нагрузкой держит порядка 70 градусов на ядрах, что меня вполне устраивает.

Сборка и результаты
Думаю, как прикрутить компоненты компьютера друг к другу, вы и сами догадаетесь. Но вот, пара замечаний, которые я не знал до этого:
  1. На материнских платах есть 8-контактный разъем для питания процессора. В него можно воткнуть 4х контактный разъем и все будет работать.
  2. Обратная сторона корпуса, оказывается, предназначена для того, чтобы там спрятать лишние провода. Я не знал об этом, но, когда смотрел обзоры железа, увидел что там так делают.



Вот так это все выглядит в сборе:




Чтобы были какие-то цифры для сравнения, я взял два проекта над которыми я работаю и записал цифры. Естественно, это не полноценное тестирование, и так было понятно что все станет лучше, но хоть, прикинем, на сколько.

ТестБылоСталоУлучшение
ISE64с36с177%
IAR32.8с10.4315%

Вообщем, прирост мы получили, и, по современным меркам, не маленький. Программы теперь не ругаются на недостаток памяти, все работает значительно быстрее. Остался, правда, самый тупящий элемент в этой системе — я, но тут мало что можно сделать. Работать стало действительно приятнее, но, откровенно-говоря, разница не гигантская.

23 комментария

avatar
Плохо, что не сказал во сколько встал апгрейд. И в каких магазинах лучше покупать б/у комплектующие?
Раньше б/у никогда не брал, но с нынешним курсом у меня других вариантов не останется.
avatar
Обошлось все в 500$, но что-то вернется обратно когда продам старое железо. Покупал все на olx.
avatar
жаль что ноутбук с такими параметрами будет в 3 — 4 раза дороже
avatar
Боюсь. такого нотубука просто нет — слишком много тепла нужно рассеять, чтобы получиться такую производительность. Проц — 100вт, а, в сумме, думаю, до 200вт доходит. Лучшие ноутбучные процессоры сливают, вот сравнение.

Другое дело, что эта производительности нужна очень редко, и, хорошим ноутбуком можно вполне обойтись.
avatar
Хотя, вот поискал и нашел пару ноутбуков с этими процессорами. Оказывается, они существуют, вот, к примеру, но стоит он $3500.
avatar
Ну с производительностью тут как в том анекдоте про сисадмина…
Нагрузка на туалет тоже не большая, но пропусканая способность (диаметр трубы) большая чтобы нормально справляться с пиками нагрузки 8)
avatar
Вижу в материнке нет COM порта, какой эмбеддер без COM порта :) USB-COM — плохое решение.
avatar
Есть в материнке ком порт :) Просто я его не вывел. На самом деле, уже не помню когда настоящим ком портом пользовался.
avatar
вместо COM порта используешь JTAG?
avatar
Зависит от задачи :)
avatar
Чем же оно плохое?
avatar
1. Система создает виртуальный ком-порт например с номером 3. ВВ конфигурации моего проекта указываю работать с 3 ком портом, все работает, но при подключении нового USB устройства порт с 3 станет например 4, без внесения изменений в конфигурацию системы, не будет работать. Даже если в настройках виндовса пренудительно вернуть на 3 компорт, через некоторие врямя опять поменяеться...
2. Очень часто зависает драйвер, и нужно перезагружать PC, что не всегда возможно...

3. C Апаратним ком-портом таких проблем нет.
avatar
Ну, это так-себе причина чтоб ругать порт. Скорее, пограммистов, которые сделали выбор порта неудобным. Но есть и реальные доводы в пользу настоящего порта. К примеру, в протоколах типа модбаса нужно жесткое реальное время для изменерия межпакетных таймаутов. И вот тут миллисекунда задержки, добавленная USB очень даже мешает. Хотя, на практике. все работает и так.
avatar
Настройки ком-порта в файле *.ini Система работает 24/7 автономно, решение виндовс изменить номер порта приносит проблемы, нужно вносить изменения в файл конфигурации. Как запретить перенумерацию портов виндовсом к сожалению не нашел. В других случаях с USB-COM можно работать, не критично.
avatar
Ну, тоже проблема не большая. Можно, к примеру, написать скриптик который по vid/pid искал бы нужный порт и прописывал его в ini файлик.
avatar
1. С новым устройством будет новый номер порта. У старого останется тот же номер, если его воткнуть в старый USB-порт. Не очень понятно что у кого меняется. Да и маленькую менюшку в проекте с настройкой номера порта можно добавить для удобства, не такая уж это и сложная задача.

2. Часто это сколько? Неделя это много или мало для Вашей системы?
avatar
С новым устройством будет новый номер порта. У старого останется тот же номер, если его воткнуть в старый USB-порт. Не очень понятно что у кого меняется.

Есть плата, на ней MCU c вторым MCU который реализует програматор и USB-COM преобразователь. Для загрузки прошивки в MCU c новой версии IDE нужно обновить прошивку второго MCU. После прошивки виндовс назначает новый COM, так как думает что подключено новое устройство.

Да и маленькую менюшку в проекте с настройкой номера порта можно добавить для удобства, не такая уж это и сложная задача.
система работает в консольном режиме, настройки задаються в ini файле.

2. Часто это сколько? Неделя это много или мало для Вашей системы?

иногда раз в две недели. Система работает с обменом по COM порту, если зависнет COM нужно делать перезагрузку.
avatar
С подобным колдунством сталкивались для FTDI. FTDI дает утилитку, которой можно включить «игнорирование серийного номера». Если включить игнорирование, то можно совать в один и тот же USB порт разные FTDI и номер порта будет назначаться один и тот же. Возможно такое игнорирование можно как-то включить и для CDC/ACM. Но, тут как в анекдоте «есть один нюанс». Нужно чтобы USB порт был 2.0 (на PC, который используем для тестирования приборов просто выключили поддержку USB3 в биосе) Может эта информация чем-то поможет?
avatar
Спасибо, не знал за утилиту и настройку в биосе. у нас уже єсть скрипт для генерации xml соответствия номера порта и S/N. У нас USB-COM не от FTDI, а другого производителя.

«USB-COM — плохое решение.» — мой коментарий просто что апаратный COM лучше чем преобразователь USB-COM, а мне поставили "-"
avatar
А блок питания не пришлось менять? Потянет?
avatar
Не пришлось, он 450вт и хорошего качества, потянет.
avatar
Отличный компьютер. Современные процессоры имеют достаточно кэша, что бы перекрыть производительность памяти.
Нет смысла брать память в 2400 ГГц, можно поставить 1333 МГц. Смысл есть только в случае использования интегрированного графического ядра (AMD Axx и Intel со встроенной графикой — полезно перед покупкой смотреть максимальную частоту шины памяти)
Был неприятно удивлен то, что Альтиум 10й работает как однопоточное приложение. Не знаю как с новыми, на новый денег не дают.

Тестируя видеокарты, я обнаружил, что NVidia хуже прорисовывает детали в SolidWorks в режиме realView, чем AMD.
Я сравнивал 4 видеокарты GTX750Ti, Quadro K700 и встроенную в A10-5750m, а также R7 240. Красные хорошо прорисовывали детали, а вот нвидиа отказывалась дорисовывать детали. Хваленная Quadro K700 была по уровню R7 240. Я так и не понял в чем ее преимущество, поскольку грелась она при обычном ролике на ютубе под 80 градусов. По тестам далеко позади R7 (разница в 2-3 раза), а цена в 3 раза выше.
avatar
>Но, однажды, Solidworks сказал мне: «дружище, у тебя мало памяти!»
Можешь примерно описать проект, которому не хватает 8 гигов? У меня на этом же объеме бывает до трех виртуалок крутится и еще места поработать остается.

>Сложно потому, что Windows постоянно «перебрасывает» задачу между ядрами. Насколько я понял, это сделано не специально, а, просто, использует первое попавшееся свободное ядро.
Угу, с каждым новым тиком шедулера ищется свободное ядро, если на том ядре, на котором исполнялась задача работает более приоритетная задача, твоя либо уходит на другое ядро (на котором крутится менее приоритетная задача, в т.е. idle процесс), либо фризится до следующего тика, если свободного ядра нет. В POSIX системах можно зафиксировать задачу на каком-то конкретном ядре, а в некоторых — и вовсе запретить другим задачам выполняться на нем (по сути предоставив полный доступ к одному ядру). В windows вероятно тоже так можно.

Интересно ты Haswell проаргументировал конечно :) Я бы таки взял Skylake — У него намного лучше с математикой больших массивов данных, что для Altium и Solidworks имхо как раз хорошо (в Skylake намного лучше работают L2 и L3 кэши). Хотя haswell тоже хороший процессор.(У меня на основных машинах Ivy Bridge и Broadwell).

>Мне попалось очень хорошее предложение — ASRock extreme4
Коль у тебя вечная проблема с хардами — поставь SSD формата M.2, благо мать поддерживает. Натурально обалдеешь от скорости работы PCI-E накопителя :)
SSD-шки это тема, у меня во всех машинах SSD стоят.
Но NAS на 250 гигов — несерьезно :) NAS должен измеряться терабайтами :)

>Более того, мне показалось, что встроенная карта работает быстрее. И, действительно, по тестам, она в 3 раза быстрее чем моя отдельная
Кончилось то время когда графика от Intel была плохой :) Сейчас на Ivy Bridge можно спокойно в Mortal Combat X рубиться. на Skylake-графике для большинства задач о дискретной видеокарте можно и не вспоминать.

К тому же у твоего процессора 20 графических ядер против 16 в 210м, плюс ширина памяти 128 бит против 64, плюс сама память работает быстрее. Про 210-ю вспомнишь разве что когда тебе CUDA понадобится.

>На материнских платах есть 8-контактный разъем для питания процессора. В него можно воткнуть 4х контактный разъем и все будет работать.
Вредный совет :) У тебя процессор не Extreme, на 135Вт на 4-х контактах существенный перегруз.

>Обратная сторона корпуса, оказывается, предназначена для того, чтобы там спрятать лишние провода. Я не знал об этом, но, когда смотрел обзоры железа, увидел что там так делают.
Это у тебя корпусок хороший ;) Не всем так везет.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.