Собираем компьютер эмбеддера
Компьютер, с которого я пишу эту статью, я купил в 2008 году, 8 лет назад. Фактически, на нем написан и этот сайт и bsvi.ru, и сделано очень-очень много всего. Меня он абсолютно устраивал — никаких тормозов, все было отлично! Но, однажды, Solidworks сказал мне: «дружище, у тебя мало памяти!». Ну что-ж, пришло время апгрейдится!
На самом деле, если вы, как и я, большую часть жизни проводите за компьютером, то иметь хороший компьютер — совсем не плохая идея! К тому-же, компьютер — главный инструмент эмбеддера. Вот сколько времени вы пользуетесь осциллографом, а сколько компьютером? Поэтому, я не стал увеличивать файл подкачки, а просто решил собрать новый эмбэд-компьютер. Для того, чтобы апгрейд был бюджетненьким, мы не просто вкинем самые топовые комплектующие, а подойдем с умом и поищем все с хорошим отношением цена/производительность. Кроме того, все компоненты я буду покупать БУ, но с гарантией от магазинов. Получается вполне себе бюджетный апгрейд.
Процессор разогнан до 3ГГц, а память до 800МГц. Все это отлично работало везде кроме синтеза для FPGA и тяжелых проектов в Solidworks. Вот так это добро выглядело:
Сейчас ситуация улучшается и многие программы уже неплохо работают в несколько потоков. К примеру, IAR и GCC умеют компилировать несколько файлов одновременно:
На самом деле, оценить — однопоточная программа или многопоточная — сложно. Сложно потому, что Windows постоянно «перебрасывает» задачу между ядрами. Насколько я понял, это сделано не специально, а, просто, использует первое попавшееся свободное ядро. Вот, к примеру, результат выполнения такой программы:
Но, в среднем, лучше иметь наибольшую производительность на ядро — от этого выиграют любые задачи — и однопоточные и многопоточные, поэтому выбор процессора довольно прост — смотрим сравнение процессоров в однопоточном режиме и видим, что выбора у нас особо и нет — с большим отрывом побеждает Core i7-4790k.
Уже три поколения процессоров не могут с ним потягаться в плане однопоточных задач. Я подозреваю, что конкурентов ему не появится еще несколько лет, поэтому, можно смело брать.
Естественно, эти параметры зависят друг от друга, и, память с большей частотой может быть медленнее чем память с низкой частотой из-за латентности. Есть таблички (тут и тут), по которым можно судить о производительности памяти, но как это влияет на производительность всей системы?
Как оказалось, память очень слабо влияет на производительность. Мне особенно понравилось вот это сравнение. Из него видно, что оптимальная память 1866 CL9, но так как 1866 CL10 для меня оказалась намного дешевле, и разница в производительности менее 1%, ее и возьмем.
Память называется kingston hyperx fury. Ну вот серьезно, кто придумывает эти названия для памяти? Сплошные fury, vengeance, и прочие ballistix'ы. Но выглядит хорошо. да.
Я решил брать сразу максимальным объем, поддерживаемый процессором, 32Гб. Почему? Потому, что мне попалось предложение купить все комплектом — потом найти такую-же память сложно. Во-вторых, можно использовать встроенную графику процессора, и, в-третьих, то, что Windows показывает что память не используется, это не значит что она действительно не используется. Обычно, весь свободный объем памяти используется под дисковый и сетевой кэшы и иметь больше памяти никогда не повредит.
Мне попалось очень хорошее предложение — ASRock extreme4. У нее всего много и сделана она, вроде бы, качественно.
У нее есть аж 14 usb портов, 12 фазное питание, toslink и куча sata, намного больше чем я смогу использовать. Берем.
Так как у нас куча тяжелого софта, то под систему, нам нужно брать 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мб, которые использует встроенная видеокарта не жалко.
Стало понятно, что штатный кулер не справляется, поэтому я решил поставить тот кулер, что у меня был раньше. Но была проблема — прошлый процессор был на LGA775, а новый — на LGA1150. Естественно, посадочные мета под куллер между ними не совместимы, притом, до смешного. У одного расстояние между отверстиями 71.3мм, а у второго — 75мм, и, поверьте. никакйо инженерной необходимости делать так небыло — там просто пустое место. Маркетинг. что сказать. Ну, да ладно, ничего что не решит дремель, напильник и 10 минут времени.
Как оказалось, прошлый куллер тоже не может отвести тепло. При этом, температура процессора не зависила от оборотов вентилятора. Стало понятно, что маленькой прощади новых процессоров просто не достаточно чтобы прогреть ребра радиатора. Осталось искать единственное правильное решение — куллер с термотрубками.
Чудесным стечением обстоятельств, такой кулер валялся без дела у Sharix . Правда, тоже, под 775 сокет, но не суть. Кулер называется Noctua NH-C14, и, когдя я его увидел, я чуть не офигел. Это нехилая такая махина, скажу я вам.
Часик с напильником, и кулер стал на новый сокет. Фух. Кулер под полной нагрузкой держит порядка 70 градусов на ядрах, что меня вполне устраивает.
Вот так это все выглядит в сборе:
Чтобы были какие-то цифры для сравнения, я взял два проекта над которыми я работаю и записал цифры. Естественно, это не полноценное тестирование, и так было понятно что все станет лучше, но хоть, прикинем, на сколько.
Вообщем, прирост мы получили, и, по современным меркам, не маленький. Программы теперь не ругаются на недостаток памяти, все работает значительно быстрее. Остался, правда, самый тупящий элемент в этой системе — я, но тут мало что можно сделать. Работать стало действительно приятнее, но, откровенно-говоря, разница не гигантская.
На самом деле, если вы, как и я, большую часть жизни проводите за компьютером, то иметь хороший компьютер — совсем не плохая идея! К тому-же, компьютер — главный инструмент эмбеддера. Вот сколько времени вы пользуетесь осциллографом, а сколько компьютером? Поэтому, я не стал увеличивать файл подкачки, а просто решил собрать новый эмбэд-компьютер. Для того, чтобы апгрейд был бюджетненьким, мы не просто вкинем самые топовые комплектующие, а подойдем с умом и поищем все с хорошим отношением цена/производительность. Кроме того, все компоненты я буду покупать БУ, но с гарантией от магазинов. Получается вполне себе бюджетный апгрейд.
А что было?
Если вам интересно, что у меня было до этого, то вот:Процессор разогнан до 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 градусов на ядрах, что меня вполне устраивает.
Сборка и результаты
Думаю, как прикрутить компоненты компьютера друг к другу, вы и сами догадаетесь. Но вот, пара замечаний, которые я не знал до этого:- На материнских платах есть 8-контактный разъем для питания процессора. В него можно воткнуть 4х контактный разъем и все будет работать.
- Обратная сторона корпуса, оказывается, предназначена для того, чтобы там спрятать лишние провода. Я не знал об этом, но, когда смотрел обзоры железа, увидел что там так делают.
Вот так это все выглядит в сборе:
Чтобы были какие-то цифры для сравнения, я взял два проекта над которыми я работаю и записал цифры. Естественно, это не полноценное тестирование, и так было понятно что все станет лучше, но хоть, прикинем, на сколько.
Тест | Было | Стало | Улучшение |
---|---|---|---|
ISE | 64с | 36с | 177% |
IAR | 32.8с | 10.4 | 315% |
Вообщем, прирост мы получили, и, по современным меркам, не маленький. Программы теперь не ругаются на недостаток памяти, все работает значительно быстрее. Остался, правда, самый тупящий элемент в этой системе — я, но тут мало что можно сделать. Работать стало действительно приятнее, но, откровенно-говоря, разница не гигантская.
23 комментария
Раньше б/у никогда не брал, но с нынешним курсом у меня других вариантов не останется.
Другое дело, что эта производительности нужна очень редко, и, хорошим ноутбуком можно вполне обойтись.
Нагрузка на туалет тоже не большая, но пропусканая способность (диаметр трубы) большая чтобы нормально справляться с пиками нагрузки 8)
2. Очень часто зависает драйвер, и нужно перезагружать PC, что не всегда возможно...
3. C Апаратним ком-портом таких проблем нет.
2. Часто это сколько? Неделя это много или мало для Вашей системы?
Есть плата, на ней MCU c вторым MCU который реализует програматор и USB-COM преобразователь. Для загрузки прошивки в MCU c новой версии IDE нужно обновить прошивку второго MCU. После прошивки виндовс назначает новый COM, так как думает что подключено новое устройство.
система работает в консольном режиме, настройки задаються в ini файле.
иногда раз в две недели. Система работает с обменом по COM порту, если зависнет COM нужно делать перезагрузку.
«USB-COM — плохое решение.» — мой коментарий просто что апаратный COM лучше чем преобразователь USB-COM, а мне поставили "-"
Нет смысла брать память в 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 раза выше.
Можешь примерно описать проект, которому не хватает 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-х контактах существенный перегруз.
>Обратная сторона корпуса, оказывается, предназначена для того, чтобы там спрятать лишние провода. Я не знал об этом, но, когда смотрел обзоры железа, увидел что там так делают.
Это у тебя корпусок хороший ;) Не всем так везет.