February 21, 2024

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

  1. На чем сейчас считают
  2. Рекомендации по конфигурации
  3. Итерация первая
  4. Плюсы и минусы
  5. Софт
  6. Тест-драйв
  7. Брутим хеши
  8. Развлекуха напоследок

Од­нажды мне понадо­бил­ся компь­ютер для кван­тово‑химичес­ких рас­четов, и я пос­тавил перед собой цель самос­тоятель­но соб­рать машину, которая впи­салась бы в бюд­жет 100–150 тысяч руб­лей. Одна­ко этот компь­ютер неп­лохо под­ходит и для дру­гих задач, поэто­му ради экспе­римен­та поп­робу­ем поб­рутить на нем хеши.

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

НА ЧЕМ СЕЙЧАС СЧИТАЮТ

Спе­циаль­но для науч­ных вычис­лений соз­даны супер­компь­юте­ры, нап­ример супер­компь­ютер Кур­чатов­ско­го инсти­тута или «Ломоно­сов-2» в МГУ. Под рас­четы обыч­но выделя­ют одну ноду, и это в целом весь­ма недур­ной вари­ант. Но тут есть и свои нюан­сы, ска­жем при­вяз­ка к опре­делен­ному соф­ту и некото­рые адми­нис­тра­тив­ные момен­ты. С дру­гой сто­роны, и плюс солид­ный — не надо нас­тра­ивать сре­ду.

Мно­гие исполь­зуют свои вычис­литель­ные мощ­ности, и тут мож­но встре­тить целый зоопарк раз­нооб­разных устрой­ств. Обыч­но это что‑то напоми­нающее ноду супер­компь­юте­ра, то есть одно- или двух­про­цес­сорная сис­тема с кам­нями типа E5 2680v3/v4 и памятью от 64 Гбайт. Иног­да попада­ется старье типа Xeon X5650, но это уже пережи­ток прош­лого. Впро­чем, уче­ные дос­таточ­но кон­серва­тив­ны, поэто­му обо­рудо­вание час­то слу­жит десят­ки лет. Прав­да, с компь­юте­рами этот фокус обыч­но не про­ходит.

В «бытовом» сег­менте нес­коль­ко лет назад очень кру­то смот­релся AMD Ryzen Threadripper 3970x и стар­шие модели в связ­ке с 256 Гбайт DDR4 3200. Впро­чем, этот про­цес­сор и сей­час выг­лядит неп­лохо, как говорит­ся — дорого‑богато. Так­же опре­делен­ной популяр­ностью поль­зуют­ся AMD Ryzen 9 5950X, Intel i9-12900k и млад­шие модели, в обо­их слу­чаях компь­ютер осна­щают 64 Гбайт опе­ратив­ки. Но у бытовых решений есть одна неп­рият­ная проб­лема: подоб­ные про­цес­соры не рас­счи­таны на высокую наг­рузку 24/7. Нап­ример, я слы­шал нес­коль­ко печаль­ных исто­рий о смер­ти от перег­рева неудач­но соб­ранно­го дес­кто­па на Threadripper. Комп помер на вто­рые сут­ки, при­чина — сла­бая сис­тема охлажде­ния.

Вто­рая проб­лема бытовых про­цев — малый объ­ем под­держи­ваемой памяти, тут раз­ве что Threadripper поз­воля­ет раз­гулять­ся, осо­бен­но стар­шие модели, а для про­чих потолок обыч­но сос­тавля­ет 64 Гбайт. В прин­ципе, такого объ­ема хва­тает прак­тичес­ки на все задачи, но в уме при­ходит­ся дер­жать, что методы типа DLPNO-CCSD(T) или STEOM-DLPNO-CCSD могут ока­зать­ся такому аппа­рату не по зубам.

РЕКОМЕНДАЦИИ ПО КОНФИГУРАЦИИ

В сети не очень мно­го рекомен­даций, как соб­рать компь­ютер для науч­ных рас­четов, тем не менее они есть. Нап­ример, такую инс­трук­цию мож­но най­ти на фо­руме ORCA (недос­тупен с рос­сий­ских IP), и рекомен­дации эти доволь­но прос­тые: все­го, и поболь­ше. В пер­вую оче­редь, конеч­но, опе­ратив­ной памяти, общепри­нятым миниму­мом счи­тают 64 Гбайт. Мож­но исполь­зовать и 32, и даже 16, но тог­да при­дет­ся очень тща­тель­но под­бирать методы и задачи, так как при любом неудач­ном сте­чении обсто­ятель­ств все будет падать из‑за нех­ватки опе­ратив­ки.

Впро­чем, полу­эмпи­рике и прос­тым DFT-методам с неболь­шим базисом дол­жно хва­тить скром­ных объ­емов RAM, но это ско­рее учеб­ные задачи. Вооб­ще, памяти дол­жно быть 256 Гбайт, а еще луч­ше 512, в таком слу­чае тебе будут дос­тупны прак­тичес­ки все широко исполь­зуемые методы.

Что же каса­ется про­цес­сора, то луч­ше мень­ше ядер с высокой так­товой час­тотой, чем наобо­рот. Тем не менее кван­тово‑химичес­кий софт — это не игры, и он, разуме­ется, заточен под мно­го потоков, поэто­му при­веден­ную выше рекомен­дацию сле­дует понимать как «16 быс­трых ядер луч­ше 22 мед­ленных».

Так­же очень желате­лен быс­трый SSD на 512 Гбайт и более. Вер­нее, так: для DFT 512 Гбайт хва­тит с запасом, а вот для методов post HF край­не желатель­но иметь боль­ше 1 Тбайт (на моей памяти боль­ше 5 Тбайт пока не отъ­еда­ло). На худой конец сой­дет и RAID 0 на HDD, что, конеч­но, про­садит ско­рость, но работать будет. Очень хороший свод рекомен­даций по сбор­ке такого компь­юте­ра пуб­лику­ет иссле­дова­тель из Пекин­ско­го уни­вер­ситета под ником Sobereva.

При­чем эти рекомен­дации при­водят­ся за пос­ледние нес­коль­ко лет и раз­биты по годам: любопыт­но смот­реть, как рас­тут аппе­титы. В целом автор очень рату­ет за исполь­зование б/у сер­верных ком­понен­тов, дабы не раз­базари­вать казен­ные день­ги на переп­лату вен­дорам. Текущая рекомен­дуемая им кон­фигура­ция — это dual AMD EPYC 7R32 на 96 ядер. Исполь­зуя такую машину, автор про­вел иссле­дова­ние, нас­коль­ко хорошо парал­лелит­ся ORCA. Офи­циаль­ный ману­ал говорит, что до вось­ми ядер все парал­лелит­ся без нарека­ний, а с шес­тнад­цатью уже воз­можны проб­лемы, но в ману­але это упо­мина­ется толь­ко всколь­зь.

Так вот, сог­ласно тес­там Sobereva, при уве­личе­нии количес­тва ядер до 24 рост быс­тро­дей­ствия поч­ти линей­ный, от 24 до 48 он откло­няет­ся от линей­ного. На отрезке от 48 до 84 ядер рост еще прос­лежива­ется, а ког­да их ста­новит­ся боль­ше 84, при­рос­та уже не наб­люда­ется. Понят­но, что эти чис­ла зависят от исполня­емой задачи, но на низ­ком уров­не все кван­тово‑химичес­кие методы так или ина­че сво­дят­ся к перем­ножению мат­риц, нахож­дению собс­твен­ных век­торов и зна­чений, так что эти резуль­таты полез­но дер­жать в уме. Кро­ме того, дру­гих тес­тов подоб­ного раз­маха я не встре­чал.

ИТЕРАЦИЯ ПЕРВАЯ

В сво­ей сбор­ке я решил сде­лать упор на объ­ем памяти. На дво­ре сто­ял январь 2022 года, кри­зис чипов был еще в раз­гаре, поэто­му вари­антов у меня оста­валось нем­ного. Если хочешь боль­шой объ­ем DDR4, то дорога тебе на «Али» за б/у сер­верной памятью, а к ней нужен проц — тоже сер­верный б/у Xeon. Цены тог­да были, пря­мо ска­жем, нев­кусные, и на память ушла изрядная часть бюд­жета (8 × 32 Гбайт 2400 DDR4 ECC REG обош­лось тог­да в сум­му поряд­ка 60 тысяч руб­лей).

По­дер­жанные сер­верные матери тог­да в мой бюд­жет не про­лез­ли, и я решил оста­новить­ся на китай­ских. О китай­ских матерях в целом ходит дур­ная мол­ва. В час­тнос­ти, одно из типич­ных боль­ных мест этих девай­сов — цепи питания CPU, то есть VRM, поэто­му я попытал­ся най­ти что‑то понадеж­нее, нас­коль­ко это воз­можно. Выбор пал на Huananzhi X99-F8: эта материн­ская пла­та име­ет активное охлажде­ние VRM, восемь сло­тов памяти и, само собой, под­держи­вает четырех­каналь­ный режим.

Те­перь о про­цес­соре. Пос­коль­ку пред­полага­лось, что машина будет дол­гое вре­мя работать в режиме 24/7 при прак­тичес­ки пол­ной наг­рузке, ни о каком раз­гоне и речи не шло, поэто­му смот­реть в сто­рону Xeon 26xxv3 смыс­ла осо­бого не было, и я выб­рал Xeon E5 2683v4. Это 16-ядер­ный про­цес­сор с час­тотой 2600 МГц при пол­ной наг­рузке. Скром­нень­ко, зато недоро­го: в 2022 году он сто­ил око­ло пяти тысяч, а сей­час и вов­се мень­ше двух. Впос­ледс­твии, ког­да цены нем­ного сни­зились, я заменил камень дру­гим — E5 2696v4, где уже 22 ядра и 2800 МГц при пол­ной наг­рузке. При­рост про­изво­дитель­нос­ти, пря­мо ска­жем, замет­ный, и это потолок для выб­ранной мною плат­формы, но он и сегод­ня смот­рится доволь­но дос­той­но.

Для охлажде­ния все­го это­го дела я исполь­зовал китай­скую «баш­ню» с шестью труб­ками и тре­мя вен­тилято­рами.

Баш­ня

Впро­чем, такая сис­тема охлажде­ния ока­залась даже избы­точ­ной, и тем­перату­ра под наг­рузкой не пре­выша­ла 51 гра­дус. Так что мож­но не парить­ся и ста­вить какой‑нибудь ноунейм, одна­ко он дол­жен уметь отво­дить при­мер­но 150 Вт. Кор­пус я исполь­зовал Zalman S2, в него были уста­нов­лены шесть вен­тилято­ров, три на вдув на фрон­таль­ной панели и три на выдув, один сза­ди и два свер­ху. Вер­хние кулеры дос­таточ­но удач­но рас­положе­ны над зоной VRM. В целом этот кор­пус доволь­но дешевый, и боковая стен­ка плас­тиковая, ну да нам на него не любовать­ся.

Объ­ем памяти поз­же был уве­личен до 512 Гбайт, но уже в силу сте­чения обсто­ятель­ств. Любопыт­но: китай­ские пла­ты дер­жат план­ки по 64 Гбайт, а в сети я упо­мина­ния об этом не нашел, прав­да, воз­можно, потому, что никому в здра­вом уме не при­дет в голову напихать в китай­скую сбор­ку пол­терабай­та опе­ратив­ки. Да и задач, где нуж­ны такие объ­емы памяти, кро­ме кван­тово‑химичес­ких рас­четов, я так с ходу и не при­думаю.

Ма­терин­ская пла­та, проц, память, VRM

С дис­ками выш­ла целая чехар­да. В пер­вом вари­анте я исполь­зовал под сис­тему NVME SSD объ­емом 256 Гбайт и HDD на 3 Тбайт для хра­нения резуль­татов вычис­лений. Но ока­залось, что для исполь­зования DLPNO-CCSD(T) и осо­бен­но STEOM-DLPNO-CCSD это­го сов­сем недос­таточ­но: мало и 512 Гбайт, и 1 Тбайт. А если исполь­зовать HDD, то ско­рость записи/чте­ния ста­новит­ся узким мес­том, осо­бен­но с уве­личе­нием количес­тва потоков. Доходит до смеш­ного, ког­да задача быс­трее реша­ется в восемь потоков, чем в шес­тнад­цать.

Ста­ло ясно, что нужен быс­трый SSD на 1, а луч­ше на 2 или 3 Тбайт, но цены на твер­дотель­ные накопи­тели боль­ше терабай­та тог­да были, пря­мо ска­жем, негуман­ные. Поэто­му, почесав в затыл­ке, я решил, что мне поможет RAID 0. Так объ­ем дис­ка мож­но наращи­вать пос­тепен­но, ско­рость будет рас­ти и износ дис­ков ста­нет умень­шать­ся — в общем, одни плю­сы. Что же до надеж­ности, то тут это не столь важ­но: на этих дис­ках не пред­полага­лось хра­нить резуль­таты вычис­лений. В реали­зации этой идеи мне очень при­годил­ся адап­тер PCIe-4NVME — удоб­но, ком­пак­тно, и сло­ты PCIe эко­номит.

Адап­тер PCIe-4NVME

На­до иметь в виду, что если его прос­то вот­кнуть в слот x16, то будет работать толь­ко пер­вое гнез­до M2. Что­бы зарабо­тали осталь­ные, в БИОСе нуж­но нас­тро­ить бифур­кацию сло­та X16, то есть перек­лючить режим работы с X16 на X4 X4 X4 X4, тог­да все зарабо­тает как надо. Не все материн­ские пла­ты име­ют такую фун­кцию. К счастью, Huananzhi X99-F8 это уме­ет. В качес­тве дис­ков я выб­рал недоро­гие WD Blue SN550 объ­емом 1 Тбайт, тем более в обзо­рах ука­зыва­лось, что они не склон­ны катас­тро­фичес­ки про­сажи­вать ско­рость пос­ле запол­нения кеша.

WD Blue SN550 1 Тбайт

Та­ким обра­зом я со вре­менем нарас­тил мас­сив до 3 Тбайт, и это­го, если не наг­леть, хва­тает прак­тичес­ки для всех задач. Впро­чем, если не замахи­вать­ся на методы post HF, а огра­ничить­ся DFT, то и 1 Тбайт хва­тит за гла­за. Для соз­дания прог­рам­мно­го RAID 0 я исполь­зовал mdadm, тут в общем нет никаких осо­бен­ностей, и ману­алов в сети дос­таточ­но. Работа­ет такое решение хорошо, одна­ко есть вари­ант и получ­ше: на али­ке мож­но най­ти отно­ситель­но недоро­го U2 SSD WD Black SN640 аж на 7,5 Тбайт — уль­тиматив­ное решение.

Учи­тывая, что исполь­зуемый мною софт, а имен­но ORCA, на дан­ный момент не уме­ет работать с GPU, стро­гой необ­ходимос­ти в виде­окар­те у меня не воз­никло. Одна­ко на эта­пе нас­трой­ки и уста­нов­ки соф­та без нее не обой­тись. В свою машину я пос­тавил GTX 1080, она мне в свое вре­мя дос­талась по очень прив­лекатель­ной цене. У китай­ских плат есть один нюанс в работе с виде­окар­тами, свя­зан­ный с нас­трой­ками CSM: в нашей кон­фигура­ции она дол­жна быть вык­лючена.

UEFI CSM Support setting

Ню­анс тут в том, какие зна­чения уста­нов­лены в БИОСе по умол­чанию. Так, если в пун­кте video будет сто­ять Legacy, то на GTX 1080 изоб­ражения ты не уви­дишь, толь­ко чер­ный экран. Как следс­твие, в БИОС ты не зай­дешь и нас­трой­ки не поменя­ешь. Но проб­лема реша­емая: берем какую‑нибудь древ­нюю видяху (про­верял на GTX 640 и EAH4650), вты­каем, заходим в БИОС, меня­ем нас­трой­ки, вык­люча­ем, ста­вим назад GTX 1080. Если нуж­но исполь­зовать ста­рую виде­окар­ту, а в нас­трой­ках video сто­ит UEFI, то алго­ритм дей­ствий обратный. Подоз­реваю, что эта осо­бен­ность мно­гим людям попор­тила нер­вы.

В качес­тве бло­ка питания я исполь­зовал Cooler Master Elite V4 600 Вт, одна­ко я бы рекомен­довал иметь боль­ший запас по мощ­ности, так как при пол­ной наг­рузке машина очень чувс­тви­тель­на к про­сад­кам в сети. Бес­перебой­ник не спа­сает: комп ухо­дит в перезаг­рузку. Более мощ­ный блок питания поз­воля­ет машине не вылетать, пока сра­баты­вает бес­перебой­ник.

ПЛЮСЫ И МИНУСЫ

К плю­сам моей сбор­ки мож­но отнести цену: ста­рые Xeon сто­ят, пря­мо ска­жем, недоро­го, осо­бен­но если не гнать­ся за топом в линей­ке E5 2696v4 и E5 2699v4. Любопыт­но, что по фак­ту это иден­тичные про­цы с той лишь раз­ницей, что E5 2696v4 пос­тавлял­ся стро­го в сос­таве сер­веров, поэто­му отно­ситель­но мало­известен. Кро­ме того, не все пла­ты его под­держи­вают, имей это в виду. У E5 2699v4 с под­дер­жкой вро­де бы дела обсто­ят получ­ше, но и цена у него в пол­тора‑два раза выше. А в осталь­ном они иден­тичны.

Очень неп­лохой вари­ант — E5 2690v4, ядер у него помень­ше (14), но и час­тота повыше: 3200 МГц при пол­ной наг­рузке. Сто­ит он око­ло двух тысяч. Еще к плю­сам мож­но отнести то, что у меня материн­ка по фак­ту дес­ктоп­ная, форм‑фак­тора ATX, вле­зает она прак­тичес­ки в любой кор­пус, да и заморо­чек с ней мень­ше, чем с сер­верны­ми.

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

Моя работа­ет без нарека­ний, из замечен­ных стран­ностей толь­ко иног­да не стар­тует, зависая на ини­циали­зации, что лечит­ся перезаг­рузкой. Прав­да, такое слу­чалось лишь пару раз. Так­же к минусам однознач­но сто­ит отнести баги с UEFI. Сам я багов не видел, но пишут, что в Huananzhi X99-F8 не работа­ет кор­рекция оши­бок памяти. Отсутс­твие WOL тоже очень огор­чает. И глав­ный минус здесь, пожалуй, то, что со вре­менем обно­вить эту машину не вый­дет, пос­коль­ку текущая кон­фигура­ция уже мак­сималь­ная.

СОФТ

В качес­тве опе­раци­онной сис­темы, разуме­ется, я исполь­зовал мой любимый Arch Linux. Он уста­нав­лива­ется лег­ко и без пля­сок с буб­ном. Так как моя машина пла­ниро­валась ско­рее как рабочая стан­ция, а не вычис­литель­ный сер­вер, то свер­ху я накатил «иксы» и Openbox по заветам ArchWiki. Раз­ве что нас­тоятель­но рекомен­дую исполь­зовать в fstab UUID-иден­тифика­торы дис­ков, потому как этих самых дис­ков в машине мно­го и при ини­циали­зации наз­начение им имен про­исхо­дит с эле­мен­тами ран­дома. В резуль­тате уста­нов­ка и уда­ление новых дис­ков и PCIE-устрой­ств тоже может поменять име­на. А UUID, в отли­чие от имен, уни­каль­ны и не меня­ются, что изба­вит нас от неп­рият­ных сюр­при­зов.

То же самое каса­ется и EFISTUB. В про­тив­ном слу­чае может так получить­ся, что машина будет гру­зить­ся через раз. Я, ког­да стол­кнул­ся с таким поведе­нием, был нес­коль­ко оза­дачен. Любопыт­но, что ути­лита efibootmgr при­нима­ет имя заг­рузоч­ного раз­дела, а в UEFI пишет уже UUID. Поэто­му, нас­тра­ивая заг­рузку, вызыва­ем efibootmgr таким обра­зом:

#efibootmgr -c -d /dev/nvme0n1 -p 1 -l \vmlinuz-linux -L "Arch Linux" -u "initrd=/initramfs-linux.img root=UUID=part_uuid"

Толь­ко име­на дис­ков не забудь поменять. Есть еще одна занят­ная шту­ка: некото­рые материн­ские пла­ты не хотят гру­зить­ся с записи под номером 0000. X99-F8 к таким не отно­сит­ся, но в уме это дер­жать сто­ит.

Ну и напос­ледок я уста­новил ORCA с офи­циаль­ного сай­та, для дос­тупа к которо­му с недав­них пор тре­бует­ся прок­си или VPN (Tor не под­ходит), и Open MPI.

ТЕСТ-ДРАЙВ

В качес­тве тес­та про­изво­дитель­нос­ти я решил исполь­зовать что‑то приб­лижен­ное к прак­тичес­ким задачам. На форуме chemport.ru наш­лась инте­рес­ная тема, пос­вящен­ная срав­нению про­изво­дитель­нос­ти рас­четных машин, для которо­го исполь­зует­ся тес­товый input-файл для ORCA сле­дующе­го содер­жания:

! UKS b3lyp def2-tzvp tightscf defgrid3 nocosx nori %pal nprocs N end %method AngularGrid 7 IntAcc 5.670 GridPruning OldPruning BFCut 1e-11 WeightCut 1e-14 end * xyz 0 1 7 5.263365000 -0.809094000 0.301207000 6 6.573875000 -0.272788000 0.577214000 6 7.676247000 -1.298471000 0.365855000 6 9.040975000 -0.709409000 0.673148000 7 10.148432000 -1.562897000 0.289452000 6 10.248995000 -2.816903000 1.002416000 6 11.415931000 -0.834654000 0.299215000 6 11.219991000 -3.722976000 0.274540000 6 12.616201000 -1.728404000 0.596641000 7 12.479498000 -3.040776000 0.008370000 6 13.574798000 -3.784343000 -0.374628000 6 13.407266000 -5.070792000 -0.923040000 6 14.889954000 -3.303523000 -0.241151000 6 14.497437000 -5.811691000 -1.337626000 6 15.954215000 -4.072569000 -0.671221000 6 15.794150000 -5.329993000 -1.225769000 7 4.835772000 -0.973795000 -0.996077000 6 4.395529000 -1.271139000 1.257513000 6 3.654749000 -1.533350000 -0.876188000 7 3.327586000 -1.736522000 0.465013000 6 2.715758000 -1.933372000 -1.852204000 6 1.545454000 -2.496808000 -1.443497000 6 2.154252000 -2.302219000 0.878375000 6 1.256931000 -2.685894000 -0.059367000 8 4.488440000 -1.288606000 2.474129000 17 17.581746000 -3.423758000 -0.479631000 1 2.033998000 -2.399764000 1.945985000 1 0.324817000 -3.133479000 0.248767000 1 0.816928000 -2.808697000 -2.178230000 1 2.953860000 -1.780764000 -2.894034000 1 6.554111000 0.068581000 1.610272000 1 6.717863000 0.592377000 -0.068151000 1 7.466435000 -2.155921000 1.004541000 1 7.658018000 -1.645300000 -0.666511000 1 9.150192000 0.220009000 0.109847000 1 9.093457000 -0.427101000 1.740796000 1 11.542924000 -0.345204000 -0.668225000 1 11.416418000 -0.043022000 1.063859000 1 13.490643000 -1.237666000 0.182744000 1 12.779915000 -1.795333000 1.679456000 1 11.393404000 -4.624746000 0.871541000 1 10.758268000 -4.030853000 -0.666412000 1 10.539040000 -2.692732000 2.059832000 1 9.281760000 -3.312189000 1.005791000 1 15.101308000 -2.351050000 0.214305000 1 16.645962000 -5.907387000 -1.549807000 1 14.333360000 -6.792112000 -1.764807000 1 12.419211000 -5.483721000 -1.049190000 *

В фай­ле необ­ходимо задать количес­тво исполь­зуемых ядер nproc N, а сам этот файл запус­кает рас­чет точеч­ной энер­гии молеку­лы, при­веден­ной на рисун­ке.

Тес­товая молеку­ла

Ре­зуль­таты тес­тов раз­личных машин пред­став­лены ниже. Конеч­но, они не сов­сем кор­рек­тны, пос­коль­ку вер­сии ПО на раз­ном железе отли­чались, тем не менее эти резуль­таты поз­воля­ют при­кинуть, нас­коль­ко получив­ший­ся у меня компь­ютер хорош. Пос­леднее зна­чение в каж­дой стро­ке — вре­мя выпол­нения вычис­ления в фор­мате чч:мм:сс, чем мень­ше, тем луч­ше.

i3-8100 4x3.60GHz 00:39:58 Ryzen 5500U 6x2.1GHz 00:31:24 i7-8700 6x3.2 GHz /8Gb DDR4 2666MHz /SATA HDD 0:30:18 dual Xeon X5650, 12x2.7GHz /144Gb DDR3 /ATA HDD 00:29:45 Xeon E5-2658v3 12x2.6GHz /32Gb DDR4 2133MHz /SATA HDD 00:23:15 i5-10600K, 6x4.5GHz /16Gb DDR4 /SDD 00:22:43 AMD Ryzen 7 3700X 8x3.6GHz 00:19:07 dual Intel Xeon E5-2680v2 10x3.6 GHz /64Gb DDR3 1066MHz /HDD 00:17:17 i9-10920x 12x3.5GHz /128Gb DDR4/M.2 SSD 00:14:40 dual Intel Xeon E5-2697v2 12x2.7GHz /256Gb DDR3 1600MHz /SATA HDD 0:12:57 AMD Ryzen 9 5900X/32Gb/HDD 00:12:23 --- Xeon 2696v4 22x2.8GHz /512Gb DDR4 2400MHz /RAID0 M2 SSD 00:10:53 --- dual Xeon E5-2658V3 12x2.6 GHz /32Gb DDR4 2133MHz /HDD 00:10:19 AMD Ryzen 9 5950X 16x3.4GHz /64Gb DDR4 /M.2 SSD 00:07:33 Ryzen Threadripper 3970x, 32x3.7GHz /256Gb DDR4 3200MHz /SSD 0:05:32

В этом ряду соб­ранная мною машина смот­рится дос­таточ­но неп­лохо, сущес­твен­но усту­пая толь­ко AMD Ryzen 9 5950X и Ryzen Threadripper 3970x, что неуди­витель­но: там один проц сто­ит, как вся моя сбор­ка. В прин­ципе, из машины мож­но выжать еще нем­ного быс­тро­дей­ствия, если отклю­чить пат­чи уяз­вимос­тей про­цес­сора, сни­жающие про­изво­дитель­ность. Так, добав­ление mitigations=off в парамет­ры ядра отклю­чает эти пат­чи. Пос­ле это­го тест завер­шает­ся за 00:10:23, что дает выиг­рыш в 30 с, или око­ло 5%.

Сто­ит ли оно того, воп­рос дис­кусси­онный. Ну, если машина работа­ет в локал­ке и, кро­ме рас­четов, на ней ничего не запус­кают, то, навер­ное, сто­ит. Любопыт­ный факт: при про­веде­нии рас­четов с таким количес­твом памяти SSD прак­тичес­ки не дает выиг­рыша отно­ситель­но HDD за счет хорошо работа­ющей сис­темы кеширо­вания фай­лов. То есть фак­тичес­ки чте­ние и запись идет из опе­ратив­ки. Исклю­чение сос­тавля­ют толь­ко тяжелые методы post HF типа STEOM-DLPNO-CCSD, которые име­ют тен­денцию съедать всю память и еще прих­ватить нес­коль­ко терабайт на дис­ке под вре­мен­ные фай­лы. Тут SSD сущес­твен­но вырыва­ется впе­ред.

Чи­татель может задать­ся воп­росом: не избы­точ­но ли 512 Гбайт опе­ратив­ной памяти? Отве­чу, что это мож­но счи­тать хорошим запасом. Я наб­людал на этой машине исполь­зование более 450 Гбайт памяти и, кро­ме того, видел даже вылеты по при­чине нех­ватки опе­ратив­ки. В пла­не ста­биль­нос­ти работы у сис­темы тоже все хорошо: так, нес­коль­ко раз на ней выпол­нялись вычис­ления, занимав­шие око­ло недели, и это при поч­ти пол­ной наг­рузке.

БРУТИМ ХЕШИ

То, что машина уме­ет счи­тать кван­ты, мы уже выяс­нили, теперь мож­но поп­робовать что‑то более понят­ное и ося­заемое, нап­ример брут­форс. Поэто­му, воору­жив­шись ком­плек­том hcxdumptool, hcxtools и hashcat, про­ведем неболь­шой экспе­римент.

Пред­ста­вим себе, что мы хотим оце­нить безопас­ность пароля бес­про­вод­ной точ­ки дос­тупа. Алго­ритм дей­ствия такой: слу­шаем тра­фик с помощью hcxdumptool, получен­ные дам­пы рукопо­жатий кон­верти­руем с помощью hcxpcapngtool в фор­мат hash.hc22000, пос­ле чего пыта­емся cбру­тить пароль с помощью hashcat. Для сбо­ра рукопо­жатий очень удоб­но исполь­зовать отдель­ный ноут­бук, это поз­волит не замора­чивать­ся с перек­лючени­ем режимов работы Wi-Fi.

Итак, берем наш ноут, отно­сим его в хорошее мес­то, где дос­тупны все наши тес­товые точ­ки дос­тупа, и запус­каем hcxdumptool.

sudo systemctl stop wpa_supplicant-nl80211@wlp1s0.service sudo systemctl stop dhcpcd@wlp1s0.service sudo hcxdumptool -i wlp1s0 -o dump.pcapng --active_beacon --enable_status=15

Тут мы вык­люча­ем сетевые служ­бы wpa_supplicant и dhcpcd, пос­коль­ку нам нужен пол­ный кон­троль над сетевой кар­той. Здесь wlp1s0 — имя моей сетевой кар­ты, как ее зовут на тво­ей машине, ты можешь узнать с помощью коман­ды
ip link show.

Мы получи­ли дамп, теперь кон­верти­руем его в нуж­ный фор­мат.

hcxpcapngtool -o hash0.hc22000 -E wordlist dump.pcapng

Пе­рено­сим получен­ный дамп на наш «супер­компь­ютер» и запус­каем hashcat. Мы будем исполь­зовать сра­зу и GPU, и CPU, для работы в обо­их режимах надо покол­довать с драй­верами — этот про­цесс под­робно опи­сан в ману­алах.

Ког­да‑то я про­читал очень инте­рес­ную мысль: не быва­ет стой­ких паролей, быва­ют пло­хие сло­вари. Эта сен­тенция пол­ностью харак­теризу­ет положе­ние дел. С хорошим сло­варем ни у одной сети нет шан­сов, но где его взять? Лет десять назад сре­ди паролей час­то попада­лись «циф­ровые вось­миз­наки», и этой машине они впол­не по пле­чу. Их и будем переби­рать. Итак, под­берем циф­ровой вось­миз­начный пароль, бла­го тес­товые точ­ки дос­тупа мы нас­тра­ива­ли сами и точ­но зна­ем, что там исполь­зует­ся имен­но такой.

hashcat -D 1,2 -m 22000 -a 3 hash0.hc22000 "?d?d?d?d?d?d?d?d" |tee hashcatlog_bruteforce_cpu+gpu.txt

В нашем дам­пе было восемь записей. В про­цес­се бру­та мы видим сле­дующую информа­цию.

Session..........: hashcat Status...........: Running Hash.Mode........: 22000 (WPA-PBKDF2-PMKID+EAPOL) Hash.Target......: hash1.hc22000 Time.Started.....: Sat Nov xx 19:34:11 20xx (1 min, 23 secs) Time.Estimated...: Sat Nov xx 19:53:47 20xx (18 mins, 13 secs) Kernel.Feature...: Pure Kernel Guess.Mask.......: ?d?d?d?d?d?d?d?d [8] Guess.Queue......: 1/1 (100.00%) Speed.#1.........: 457.5 kH/s (11.00ms) @ Accel:8 Loops:256 Thr:512 Vec:1 Speed.#3.........: 52739 H/s (3.34ms) @ Accel:32 Loops:512 Thr:1 Vec:8 Speed.#*.........: 510.2 kH/s Recovered........: 2/8 (25.00%) Digests (total), 0/8 (0.00%) Digests (new), 1/7 (14.29%) Salts Progress.........: 49590784/700000000 (7.08%) Rejected.........: 0/49590784 (0.00%) Restore.Point....: 631168/10000000 (6.31%) Restore.Sub.#1...: Salt:5 Amplifier:3-4 Iteration:1280-1536 Restore.Sub.#3...: Salt:5 Amplifier:8-9 Iteration:0-512 Candidate.Engine.: Device Generator Candidates.#1....: 34184288 → 35468755 Candidates.#3....: 76995269 → 75973388 Hardware.Mon.#1..: Temp: 75c Fan: 62% Util: 99% Core:1835MHz Mem:4513MHz Bus:16 Hardware.Mon.#3..: Temp: 61c Util: 90%

Во‑пер­вых, железо чувс­тву­ет себя неп­лохо: 61 гра­дус на CPU и 75 на GPU. И это при том, что машина не опти­мизи­рова­лась под работу видяхи на пол­ной наг­рузке. Во‑вто­рых, мы видим, как GTX 1080 на этой задаче рвет Xeon со страш­ной силой: 450 kH про­тив 50 kH. А в‑треть­их, бру­ту под­дались две из вось­ми записей, и такое положе­ние дел сох­ранилось до кон­ца перебо­ра.

Из это­го мож­но сде­лать вывод, что для бру­та паролей бес­про­вод­ных сетей эта машина не сба­лан­сирова­на: нуж­но боль­ше видях, а вот проц и память чудовищ­но избы­точ­ны. Десяток точек Wi-Fi с вось­миз­начным паролем в один заход лома­ются видяхой за 25 тысяч при­мер­но за десять минут. Поэто­му, если ты исполь­зуешь вось­миз­начные циф­ровые пароли, у меня для тебя пло­хие новос­ти.

Ре­зюме: машину мож­но исполь­зовать для прос­тых задач по перебо­ру паролей, но если ори­енти­ровать­ся имен­но на них, то кон­фигура­цию сто­ит перес­мотреть. Так, умень­шив объ­ем памяти и вста­вив вто­рую виде­окар­ту, ты под­нимешь про­изво­дитель­ность в два раза и при этом еще и сэконо­мишь.

РАЗВЛЕКУХА НАПОСЛЕДОК

А что нас­чет игру­шек? Конеч­но, наз­вать этот аппа­рат игро­вым язык не повер­нется, в здра­вом уме для игр такое ник­то собирать не будет. Мож­но соб­рать игро­вой комп за цену одной толь­ко опе­ратив­ки. Впро­чем, в сети пол­но матери­алов по поводу игро­вых ПК на «зионах», и все схо­дят­ся на том, что эти про­цес­соры для игр под­ходят пло­хо в основном из‑за низ­кой про­изво­дитель­нос­ти на одно ядро. Так что играть на Xeon разум­но толь­ко из сооб­ражений лютой эко­номии, чем в нашем слу­чае и не пах­нет. Тем не менее какая‑никакая виде­окар­та у нас есть, и в свое вре­мя она была ого‑го, так что мож­но поп­робовать.

Windows 10 LTSC ста­вит­ся на этот компь­ютер совер­шенно штат­ным обра­зом, кор­рек­тно опре­деля­ет про­цес­сор и видит всю опе­ратив­ную память. Игрушки тоже уста­нав­лива­ются без проб­лем. Все тес­ты про­води­лись в раз­решении Full HD, FPS я не изме­рял.

Wolfenstein: New Order, Wolfenstein: New Colossus, Old Blood и Young Blood на высоких нас­трой­ках бега­ют очень бод­ро, фри­зов не вид­но. Cве­жий Doom тоже работа­ет на ура. В пред­релиз­ную Atomic Heart игра­ется нор­маль­но, но на откры­тых локаци­ях FPS мес­тами про­седа­ет до 15–20, прав­да, тут, воз­можно, дело в багах самой игры, на то она и пред­релиз­ная вер­сия.

Cyberpunk 2077 идет ком­фор­тно, фри­зов не замече­но. Что еще мож­но поп­робовать, ког­да у тебя 512 Гбайт опе­рати­вы? Конеч­но, соз­дать RAM-диск и попытать­ся запус­тить игрушки с него. Ска­зано — сде­лано: име­ем вир­туаль­ный диск на 256 Гбайт и еще столь­ко же опе­ратив­ки в запасе. Тес­ты я про­водил на Wolfenstein new colossus и Cyberpunk 2077. Все‑таки хорошо зву­чит «запус­тить кибер­панк из опе­ратив­ки», есть в этом что‑то безум­ное. В общем, все успешно заг­ружа­ется, а вот ско­ростью я был разоча­рован: игра запус­кает­ся, конеч­но, быс­трее, но не нас­толь­ко, что­бы ска­зать «Вау!». Изме­нений в самом игро­вом про­цес­се я вооб­ще не заметил. Короче, оно того не сто­ит. Вывод я сде­лал прос­той: счи­тает соб­ранный мною компь­ютер неп­лохо, а вот для игр и брут­форса под­ходит неидеаль­но, хотя если очень хочет­ся, то его мож­но исполь­зовать и таким обра­зом.