Distcc гэта праграма, якая размяркоўвае кампіляцыю C, C + +, Objective C і Objective C + + кода паміж некалькімі кампутарамі ў сеткі. Distcc лёгка стварыць, і можа ствараць праграмнае забеспячэнне праектаў у некалькі разоў хутчэй, чым мясцовыя кампіляцыі. Яна распаўсюджваецца пад ліцэнзіяй GNU General Public License.
Distcc не патрабуюць, каб усе машыны падзяліцца файлавай сістэмы, маюць сінхранізаваныя гадзіны, або мець тыя жа бібліятэкі ці файлы загалоўкаў усталяваны. Яны нават могуць мець розныя працэсары і аперацыйныя сістэмы, калі крос-кампілятары ўстаноўлены.
Гэты артыкул пачынаецца з некаторай зыходнай інфармацыі аб кампіляцыі і да размеркаваных кампілятары, затым апісвае дызайн Distcc, прадстаўлены вынікі і некаторыя прыкладання, і некаторыя ўрокі, якія могуць быць карыснымі для іншых малых праектаў вольнага праграмнага забеспячэння.
Яна з'яўляецца агульнай для распрацоўніка праграмнага забеспячэння для доступу да некалькіх кампутараў. Можа быць, яны ёсць ноўтбук, а таксама настольны кампутар, ці, магчыма, яны працуюць у групе, дзе кожны член мае працоўную станцыю. Было б нядрэнна, калі запасныя вылічальнай магутнасці могуць быць выкарыстаны для паскарэння праграмнага забеспячэння версіі.
Distcc прапануе простае рашэнне. Distccd сервер працуе на ўсіх машынах, з нізкім прыярытэтам і крышкі на колькасць працэсаў. Любы кліент можа распаўсюджваць кампіляцыю працоўных месцаў на іншых машынах. Distcc можа быць усталяваны любым карыстальнікам, без неабходнасці доступу корань або агульнасістэмных змен.
Хутчэй зборнікаў дазваляе "заціраць" будуе (каб ачысціць; зрабіць усё), якія будуць працаваць больш часта, што можа злавіць памылак, якія могуць быць схаваныя ад няправільнага залежнасці Makefile. Гэта дазваляе інжынерам атрымаць будуе для праверкі хутчэй. Гэта робіць кожную ноч, ці пагадзіннай праверыць будуе больш рэальным, так што памылкі, якія правяраюцца у можа быць злоўлены і фіксаваных з меншай шкодай. У цэлым ён выдаляе адно абмежаванне на працу патоку распрацоўнікаў і дазваляе ім працаваць так, як яны хочуць.
Здольнасць будаваць хутка асабліва карысная пры пабудове бінарных пакетаў праграмнага забеспячэння з Dpkg або аб/ мін. Гэтыя прылады часта хочуць пабудаваць цэлае дрэва з нуля, з тым каб забяспечыць паўтараныя пабудаваць. Выкарыстаньне distcc і кэш робіць неаднаразовыя пакет будуе хутчэй.
Хуткі размеркаваных будуе таксама карысныя для аперацыйных сістэм размеркаваных у асноўным у выглядзе зыходнага, такія як Gentoo і Linux From Scratch.
Там было некалькі да размеркаванай сістэмы зборкі, у тым ліку pvmmake, Doozer, і dmake. Гэтыя сістэмы звычайна патрабуюць стварэння каталога быць на сеткавай файлавай сістэмы размяркоўваюцца паміж усімі машынамі, якія ўдзельнічаюць у пабудове. Акрамя таго, кожная машына павінна мець тыя ж файлы загалоўкаў і бібліятэкі ўстаноўлены. Калі адзін з файлаў загалоўкаў супярэчлівая, яна можа, у лепшым выпадку, вырабіць заблытанай паведамленні пра памылкі, а ў горшым выпадку, гэта можа выклікаць непрадказальныя збоі пры розных модуляў ўбачыць розныя азначэнні. Усе машыны гадзіны павінны быць сінхранізаваныя шчыльна так, каб пазнакі з'яўляюцца дакладнымі.
Гэта можа быць разумным для прысвечаная стварэнню кластара, але меней практычныя у аднарангавыя сетках, дзе карыстальнікі могуць абнавіць бібліятэкі на сваёй машыне выпадкова, ці там, дзе выкарыстанне NFS не можа быць непажадана.
Іншы падыход заключаецца ў выкарыстанні на ўзроўні ядра кластарызацыя, такія як OpenMosix. Гэта дазваляе любы паралельныя задачы, якія будуць распаўсюджаны, але ўводзіць вельмі цесная сувязь паміж машынамі. Сістэмы, заснаваныя на працэсе міграцыі не можа выконваць таксама з многіх короткоживущих працэсаў, народжаных падчас кампіляцыі.
Гэта варта коратка абмеркаваць, як З-праграмы будуюцца. Як правіла, інструмент для зборкі (такіх, як зрабіць) выклікае кампілятар C для кожнага зыходнага файла для атрымання аб'ектнага файла. У гэтым зборніку, Ёсць некалькі крокаў.
- Крыніцы праходзіць праз КПП препроцессора, які складаецца ў файлы загалоўкаў, ручкі # IFDEF і іншыя дырэктывы, і вырабляе папярэднюю апрацоўку аднаго выходнага файла.
- Уласна кампілятар cc1 чытае папярэдняй апрацоўкі крыніцы і вырабляе зборку прадукцыі.
- Асэмблер, як абвяшчае тэкст зборкі і вырабляе аб'ектны файл.
Адзін цікавае ўласцівасць З працэс зборкі ў тым, што папярэдняя апрацоўка тэксту плюс каманднага радка кампілятара цалкам паказвае выхад. Пры запуску препроцессора лакальна, Distcc пазбягае якой-небудзь патрабаванне, каб мець тое ж загалоўкі на ўсіх машынах.
Перад Distcc, compilercache і кэш праграмы, якія выкарыстоўваюцца гэтым назіраннем памятаць вынікі будынка прыватнасці зыходнага файла. Гэта можа быць карысна, калі дрэвы ачышчаны і адноўлены, альбо калі падобныя дрэвы пабудаваныя ў розных каталогах.
Выкарыстаньне GNU Make-J's варыянт некалькі прац выконваюцца паралельна. Зрабіць выкарыстоўвае яго графік залежнасцяў паміж мэтамі, каб пераканацца, што толькі незалежных работ выконваюцца паралельна - ці, па меншай меры, ён робіць, калі Makefile правільна паказвае залежнасцяў.
Хоць адпраўка файлаў праз сеткі займае адносна шмат часу, гэта займае некалькі цыклаў цэнтральнага працэсара. У Linux і BSD, Distcc выкарыстоўвае Sendfile сістэмны выклік так, што перадача препроцессированный крыніца кліента ажыццяўляецца ў адзін выклік сістэме.
Distcc размяркоўвае працу з кліенцкай машыны на любую колькасць добраахвотнікаў машын. (Так як гэта з'яўляецца свабодным праграмным забеспячэннем, мы аддаем перавагу тэрмін добраахвотнікам на рабоў, якія выкарыстоўваюцца іншымі сістэмамі.)
Distcc складаецца з праграмы кліента і сервера. Кліент аналіз каманду "Выканаць", а для працоўных месцаў, якія могуць быць размеркаваны ён выбірае гаспадара, працуе препроцессор, пасылае запыт па сетцы і дае вынікі. Сервер прымае і апрацоўвае запыты, якія змяшчаюць каманднага радка і зыходны код і рэагуе з кодам аб'екта або паведамленні аб памылках.
Кліент служыць абалонкай кампілятара па марках. Таму што Distcc выклікаецца замест GCC, ён павінен разумець кожны структуры выклікаў каманднага радка. Калі аргументы такія, што зборнік можа працаваць дыстанцыйна, Distcc формаў два новых набору аргументаў, па адным для запуску препроцессора лакальна, і адзін для запуску. кампілятар выдалена. Калі аргументы не разумеюць Distcc, яна займае бяспечнай па змаўчанні запусціўшы каманду на мясцовым узроўні. Функцыі, што чытаць, ні пісаць дадатковыя лакальныя файлы такія спісы зборкі або Profiler табліцы выконваюцца лакальна
Для камандаў, якія павінны быць запушчаныя лакальна, Distcc працуе кампілятар лакальна, пазбягаючы накладных расходаў сеткавых пратаколаў і асобна працуе кампілятар. Раннія версіі Distcc непасрэдна замяніць іх працэсу з выкарыстаннем мясцовых кампілятар Exec, але ў бягучай версіі кампілятара запускаецца як дачэрні працэс так, каб яго прагрэс можна кантраляваць. У некаторых выпадках цяжка, паколькі дакладнае значэнне некаторых опцый, такіх як-MD змянілася паміж версіямі GCC.
Кліент падтрымлівае "Маскарад" рэжым, у якім каталогах, такіх як /usr/lib/distcc напоўнены сімвалічнымі спасылкамі, якія маюць аднолькавую назву, як рэальны кампілятар, але паказваюць на Distcc кліента. Гэты каталог дадаюцца да $ PATH, так што, калі Зрабіць выконвае GCC, гэта сапраўды выклікае Distcc. Distcc спецыяльна апрацоўвае гэты выпадак, каб выпрацаваць правільную рэальнага кампілятар для выкліку, і абараняе ад ненаўмыснага запуску сябе рэкурсіўна. Маскарад рэжым дазваляе Distcc, якія будуць выкарыстоўвацца з большасцю існуючых дрэў крыніц без неабходнасці мяняць Makefile або працэсу зборкі.
Сервер працуе на кожны з добраахвотнікаў машыны, альбо ў якасці аўтаномнага дэмана, праз Inetd ці ўскосна, праз SSHD. Distcc звычайна працуе на TCP-порт 3632.
Distcc выкарыстоўвае просты карыстацкі бінарных сеткавай пратакол для кадавання запытаў і адказаў. Зменнай даўжыні поля папярэднічае слова даўжыні, што дазваляе вельмі проста і эфектыўнай рэалізацыі.
Запыт ўключае ў сябе версію пратаколу, кампілятар каманднага радка, і папярэдняй апрацоўкі крыніцы. Адказ ад сервера ўключае ў сябе пацверджанне версіі, з выхадам кампілятара кода, любыя памылкі або папярэджання ад кампілятара, і аб'ектных файлаў, калі такія маюцца.
Distcc пратакол ўключае ў сябе словы з чатырох літар магіі перад кожным элементам. Гэтыя словы не з'яўляюцца строга неабходнымі, паколькі парадак элементаў заўсёды аднолькавая, але яны робяць гэта лягчэй для сканавання сеткі звалкі, і забяспечваюць абарону ад сеткі або праграмных памылак.
Distcc належыць на TCP або SSH для забеспячэння цэласнасці патоку і не мае кантрольную суму сваіх уласных. Гэта ж узровень абароны, як HTTP ці NFS, і не паступаюць паведамленні аб няўдачы на ??сённяшні дзень.
Distcc выкарыстоўвае базавы алгарытм балансавання нагрузкі выбраць добраахвотнікаў для выканання кожнага канкрэтнага задання. Планаванне кіруецца невялікіх файлаў стану захоўваюцца ў хатнім каталогу кожнага карыстальніка. Акрамя таго, кожны сервер накладвае абмежаванне на колькасць рабочых месцаў, якое будзе прынята ў любы час. Гэта прадухіляе любыя адным сэрвэры перагрузкі, і змяшчае асноўныя каардынацыі ў параўнанні з серверамі выкарыстоўваецца некалькімі кліентамі. Па змаўчанні, абмежаванне на колькасць рабочых месцаў ўсталёўваецца на два больш, чым колькасць працэсараў ў серверы, з тым каб на працягу двух працоўных месцаў, у транзіце праз сетку ў любы час.
Сэрвэр выкарыстоўвае загадзя запушчанай копіі дызайн падобны на Apache: максімальную колькасць кліенцкіх працэсаў Падвоены пры запуску, і ўсе яны чакаць, каб прымаць злучэння ад кліента. Гэта ставіць мяжа паралелізму, і трохі памяншае затрымкі прыняцця новага злучэння.
Кліенты захаваць часовы ведама машын, якія недаступныя або не. Гэтыя заўвагі час пасля шасцідзесяці секунд, так што машыны, якія перазагрузкі або часова недаступная неўзабаве вярнуцца ў кластары. Машыны, якія рэзка перапыніць або закрыць пры выкананні работ можа прывесці да тых прыватнасці зборнікаў на правал, якое фактычна можа быць разгледжаны паўторны запуск Зрабіць. Калі distccd хупава спынена ён завершыць усе працуюць працоўных месцаў і зніжэнне будучых уяўленняў.
Кліент працэсы каардынуюцца Unix блакіроўкі файлаў адбылася ў ~/.distcc. статка моцнае перавага, што яны заўсёды вызваляюцца ад ядра, калі працэс спыняецца, нават калі ён перарываецца з-за сігналу.
Як і ядро ??планавальнік, Distcc не маюць дастатковай інфармацыі аб будучай працы, каб зрабіць ідэальны прыняцце рашэнняў. У прыватнасці, каб не мець зносіны глабальным стане пабудаваць і колькі працоўных месцаў будзе выдадзены ў будучыні. Усе Distcc ведае, колькасць працоўных месцаў працуюць на дадзены момант. Калі ён ведаў аб будучыні нагрузкі, яна можа планаваць выкананне заданняў у сярэдзіне будаваць інакш, чым апошнія некалькі працоўных месцаў. Вакансіі на крытычным шляху стварэння і, у прыватнасці, апошнія працы будаўнічай павінна быць запланавана на мінімальнай затрымкай, а не максімальную прапускную здольнасць, што можа азначаць запускаць іх лякальна, а не дыстанцыйна.
На дадзены момант кліент не падтрымлівае ацэнку хуткасці добраахвотнікаў машын. Ацэнка гэтага сапраўды цяжка, таму што прадукцыйнасць залежыць ад крыніцы, кампутара ў складаны шлях. Розныя файлы такога ж памеру можа заняць вельмі розны час кампіляцыі ў залежнасці ад складанасці кода.
Асноўны недахоп бягучы планавальнік, што даданне павольных машынах, каб пабудаваць ферму можа знізіць агульную прадукцыйнасць. Існуе значная кошт магчымасць чакае праца, якая па такому павольнай машыне, асабліва калі гэта залежнасць для Зрабіце, каб працягнуць.
Distcc мае магчымасць выкарыстоўваць дапаможныя праграмы, такія як SSH, каб адкрыць сувязяў, а не проста адкрыццё сокета TCP.
Калі OpenSSH выкарыстоўваецца для адкрытых злучэнняў, усе дадзеныя моцна зашыфраваны. Добраахвотнікаў машыны не патрэбныя ніякія дадатковыя парты праслухоўвання або працяглых працэсаў. Усе выдаленыя зборнікаў працаваць пад уліковым запісам карыстальніка, які ініцыяваў іх.
Выкарыстаньне OpenSSH ці іншай падлучальных метад злучэння магутны дызайн Unix карціны. Проста некалькі сотняў радкоў у Distcc раскашэліцца сувязі праграм і адкрытых труб дазваляе выкарыстоўваць сусветнага класа шыфравання і ідэнтыфікацыі, які лёгка інтэгруецца ў існуючыя сеткі.
Асноўным перавагай гэтай мадэлі з'яўляецца бяспеку ўздзеяння, што Distcc з'яўляецца вельмі малая. Любое злучэнне, якое дасягае Distcc па вызначэнні упаўнаважаных альбо SSH адкрыцця сокета, ці таму, што адміністратар дазволіла злучэння з гэтага адрасу. Большасць Distcc код можа быць цалкам давяраюць запытаў, якія былі атрыманы.
Калі хто-то хацеў рэалізаваць простай транспарту, які зрабіў запыт-адказ аўтэнтыфікацыі па паролі, але не шыфравання, то яны маглі б падключыць яго праз DISTCC_SSH зменнай без неабходнасці якіх-небудзь змяненняў Distcc сябе.
Distcc можаце выкарыстоўваць LZO кампрэсар хутка сціснуць запытаў і адказаў. Гэты варыянт відавочна усталяваны кліент у спісе вузлоў.
Папярэдняй апрацоўкі крыніцы, як правіла, вельмі балбатлівы з-за доўгіх прабелаў і паўтарыў ідэнтыфікатараў, і сціскае добра. Аб'ектныя файлы таксама сціскаць ўмерана добра.
Сціск павышае прапускную здольнасць, калі сетка з'яўляецца абмяжоўваюць фактарам. Гэта можа быць выпадак, калі сетку ідзе вельмі павольна, такія як 10 Мбіт/ с правадной сетцы або бесправадной сеткі. Сціск можа быць таксама карысна, калі Ёсць шмат аддаленых машын, якія могуць насыціць нават хуткае злучэнне Ethernet.
Мэта Distcc з'яўляецца скарачэнне агульнага выдаткаванага часу для стварэння або абнаўлення поўнае дрэва.
Прадукцыйнасць прадказваюцца прапускную здольнасць сеткі, час для запуску препроцессора і кампілятара, адносных хуткасцяў кліентаў і добраахвотнікаў кампутары, і накладныя выдаткі Distcc кліентам і серверам. Хуткасць кампіляцыі на канкрэтнай машыне залежыць ад аб'ёму вольнай памяці, канкурэнцыі за працэсар, і хуткасць працэсара, аператыўнай памяці і шыны.
У многіх выпадках іншыя аспекты працэсу зборкі стаць абмяжоўваюць фактарам раз кампіляцыя распараллелить. Для невялікіх ўпакоўках, працуе Autoconf сцэнар значна павольней, чым на самай справе кампіляцыі пакетаў. Пераканайцеся таксама можа быць абмяжоўваюць фактарам, паколькі яна мае высокія накладныя выдаткі і не можа планаваць эфектыўна праз крыніца каталогаў. Адзін карыстальнік паведаміў, што Distcc толькі падвоіць хуткасць пабудовы, але пераход на інструмент будаўніцтва SCons ў спалучэнні з Distcc даў пяць разоў паляпшэнне.
Перад любой код быў напісаны для Distcc, аўтар зрабіў кароткае тэхніка-эканамічнае абгрунтаванне, каб убачыць, калі ідэя была практычнай. Гэта ўключала вымярэнне прайшло і процессорного часу для некаторых з асноўных аперацый: працуе препроцессор і кампілятар разам і паасобку, капіявання файлаў па сетцы, а з простай праграмы абгорткі. Кампілятар, які выкарыстоўваецца 90% ці больш працэсарнага часу ў большасці даследаванняў. Гэта паказвае, што асноўная частка кампіляцыі, можна ў прынцыпе працаваць дыстанцыйна, і Distcc можа перамагчы, калі больш чым адна машына была даступная.
Тэхніка-эканамічнае абгрунтаванне, такіх як гэтага з'яўляюцца сардэчна рэкамендавана да пачатку праекта, асабліва той, дзе поспех залежыць ад дасягнення колькасных вынікаў. Ведаючы, што канцэпцыя павінна працаваць, можа быць варта стымулам для напісання добрай рэалізацыі, які дасягае прадказаць вынік. І наадварот, ведаючы, што ідэя непрактычная можа пазбегнуць апускання час ці грошы ў праект, які ніколі не можа перамагчы. (Гэта можа быць усё яшчэ стаіць дакументавання вынікаў у вэб-старонкі ці электроннай пошты, у выпадку, калі сітуацыя зменіцца ў будучыні ці хто-то можа думаць аб паляпшэнні.)
У васемнаццаць месяцаў шырокае выкарыстанне Distcc пабудаваць разнастайныя дрэвы крыніцы, не было ні аднаго паведамілі невытлумачальных няўдач. Справаздача пра памылку абумоўлены, у парадку змяншэння:
- Неадпаведнасць версій кампілятара або зламаныя ўстаноўкі кампілятара.
- Паралелізм памылкі ў Makefile ці іншы працэс зборкі.
- Вядомыя памылкі ў GCC або іншыя праграмы, якія правакуюцца Distcc.
Адзін пастаяннай праблемай адбылося з-за дзівацтва на шляху GCC стварае дапаможную інфармацыю. працоўны каталог кампілятара ўстаўляецца ў адладцы ўдары, каб дапамагчы ў пошуку крыніц для праграмы. Гэта задача для Distcc і кэш, паколькі кампілятар выклікаецца ў іншай каталог з препроцессором. Гэта павінна быць зафіксавана ў маючых адбыцца GCC рэліз уключаючы складанне каталога ў выходных дадзеных препроцессора.
Даклады карыстальнікаў паказваюць, Distcc амаль лінейна маштабуюцца для невялікага ліку працэсараў. Кампіляцыя на трох аднолькавых машын, як правіла, ад 2,5 да 2,8 разоў хутчэй, чым мясцовыя кампіляцыі. Будуе праз шаснаццаць машын былі зарэгістраваныя больш чым у дзесяць разоў хутчэй, чым мясцовых будуе. Гэтыя лічбы ўключаюць накладныя выдаткі Distcc і зрабіць, і час для непараллельных або неразмеркаванага задач.
Амдаля Закон абвяшчае, што магчымае паскарэнне ад распаралельвання задач абмежаваны зваротнай доля задачы, якія павінны быць упарадкаваны. Distcc здольны распараллелить кампіляцыі фазы, але выкананне Makefile, папярэдняй апрацоўкі, звязванне і Distcc кліента ўсе павінны быць мясцовымі. Баланс гэтых задач прыватнасці дрэва зыходных тэкстаў вызначае, колькі гэта будзе выгада ад выкарыстання Distcc.
Эфектыўнасць імкнецца да плато ад дзесяці да дваццаці машын. Гэта ўзгадняецца з вынікамі вымярэнняў препроцессора выкарыстаннем прыкладна 5-10% ад агульнага працэсарнага часу: калі дваццаць препроцессора і Distcc кліентаў працуе, кліент цалкам насычаны і не можа выдаць больш працоўных месцаў.
Адсутнасць доступу да вялікіх тэставай лабараторыі дагэтуль перашкаджае сістэматычнае вывучэнне межаў маштабаванасці.
Несумяшчальнасць паміж рознымі рэлізы GCC аказалася больш сур'ёзнай праблемай, чым чакалася.
Аказваецца, што гэта нават не дастаткова, каб праверыць GCC радкі версіі. Розных дыстрыбутываў Linux, два GCC файлы сцвярджаюць, што тая ж версія можа мець несумяшчальныя інтэрфейсы API, з-за зліцця або дыстрыбутараў backporting розных патчаў. GCC не заўсёды сумяшчальныя паміж рознымі відэльцамі BSD.
У цэлым C + + выклікае больш праблем, чым З, так як ABI з'яўляецца больш складаным і больш няўстойлівым.
Несумяшчальнасць звычайна выяўляюцца альбо як памылкі чытання сістэмных загалоўкаў, якія залежаць ад ССЗ ўнутраных органаў, або як спасылку памылкі. У адсутнасць здавальняючага спосаб праверыць сумяшчальнасць, на дадзены момант мы проста раім людзям, каб праверыць версій кампілятара, калі ўзнікае памылка. Некаторыя аўтаматычнай праверкі могуць быць дададзеныя ў будучых версіях.
Таму што Distcc можаце выкарыстаць працэсары на больш чым адну машыну, яна з'яўляецца агульнай для выкарыстання нашмат вышэй-J узроўні, чым для мясцовых будуе, з дзесяццю ці нават дваццаць працоўных месцаў у палёце адначасова. Гэта часам раскрыць дрымотны памылак паралелізму ў make-файлаў.
Напрыклад, зыходны файл можа залежаць ад аўтаматычна ствараецца загаловак, але, што залежнасць не можа фактычна быць паказана ў Makefile. Для непараллельных пабудаваць, зрабіць можа адбыцца для запуску правілы такім чынам, што загаловак заўсёды ствараецца ў першую чаргу. Калі шматлікія паралельныя задачы выконваюцца, кампіляцыі можа пачацца раней, і затым не таму загаловак яшчэ не гатовая. Як Threading памылак, гэтыя няўдачы можа быць перарывістым і цяжка адсачыць, каб карэнныя прычыны. Зрабіць's - адладкі, у канчатковым рахунку растлумачыць праблемы пасля дастаткова ўвагі.
Некаторыя буйныя пакеты, такія як XFree86 ёсць ўпартыя памылкі Makefile і павінны быць пабудаваны без паралелізму. Паралелізм памылкі былі таксама выяўленыя ў такія інструменты, як Libtool, якія выклікаюцца з make-файлаў. Іншая крыніца дрэва выкарыстана адно імя часовага файла для ўсіх аб'ектных файлаў, так што яны перапісаў адзін аднаго, калі паралельна.
Distcc можа быць карысна нават без паралельна будуе. Гэта даволі звычайнае для распрацоўнікаў, працуе на адносна павольнай машыны: магчыма, на ноўтбук, або убудаваныя сістэмы, ці, магчыма, вялікая машына сервер даступны. Цалкам магчыма, на балазе ў бегу на больш хуткі працэсар, каб быць больш, чым выдаткі працуе Distcc і перадачы пабудаваць па ўсёй сеткі.
Будучы ў стане зрабіць вялікую частку працы складання выдалена робіць магчымым зрабіць развіцця выключна на ўбудавальных платформаў, якія з'яўляюцца дастаткова вялікімі, каб запусціць рэдактар ??і кампаноўніка, такія як Sharp Zaurus.
Distcc падтрымкі таварыскі вылічэнняў, якія дазваляюць зрабіць развіцця на досыць буйных праектаў ад ноўтбука, калі кампіляцыя знятыя на адну або некалькі вялікіх і шумных сервераў у іншым пакоі.
Distcc прызначана для поўнай бяспекі пры выкарыстанні ў адпаведнасці з дакументацыяй.
Аддаленае выкананне работ кампіляцыі ўводзіць даверныя адносіны паміж кліентам і серверам машыны. Кліент цалкам давярае сервер для кампіляцыі кода. Карумпаваных сервер можа ўвесці шкоднасны код у вынікі, або напад кліента ў іншых адносінах. Сервер цалкам давярае упаўнаважаным кліентам. Шкоднасны кліент можа выканаць адвольныя каманды на сэрвэры.
Distccd сервер TCP не запускаць з правамі адміністратара. Калі ад кораня, перш чым прыняць яго злучэнняў аддае свае прывілеі і змены небудзь ці ніхто карыстальнік Distcc, або карыстальніка, які пазначаны - па жаданні карыстальніка.
Distcc кліент можа быць запушчаны ў якасці каранёвага. Кампіляцыя або рабіць іншыя непатрэбнай працы, як корань, як правіла, рэкамендуецца на Unix, але Distcc дазваляе ёй будаваць, таму што некаторыя працэсы патрабуюць гэтага.
У рэжыме перадачы TCP сеткі не шыфруюцца і не падпісаны. Зламыснік з пасіўным доступ да сеткавых трафікам можна ўбачыць зыходны або аб'ектны код. Зламыснік з актыўным доступу можна змяніць зыходны або аб'ектны код, або выканаць адвольны код на серверы.
Сервер TCP можа абмяжоўваць кліентаў альбо праверкі адрасы кліента, або слухаць толькі на пэўных інтэрфейсаў IP. Аднак, у некаторых выпадках зламыснік можа падманваць злучэння ад ілжывы адрас. На ненадзейных сетак SSH з'яўляецца адзіным бяспечным выбарам.
У рэжыме SSH сервер запушчаны кожным карыстальнікам пад сваю ўліковы запіс на серверы. Існуе не доўгажывучых дэман. Злучэнні аўтэнтыфікацыі і шыфравання. Кожны карыстальнік мае права толькі прывілеі, якімі іх нармальнай кошт дазваляе.
Паколькі сервер і кліент абавязкова давяраць адзін аднаму, не было аўдыт бяспекі кода, які запускаецца пасля ўстаноўкі злучэння. Цалкам магчыма, што варожыя сервер можа атрымаць кантроль над кліентам напрамую, а таксама змяненні аб'ектны код.
Некаторыя людзі выказалі здагадку, што сервер павінен выконваць праверку абгрунтаванасці каманды ці зыходны код прадстаўлены ад кліентаў. Верагодна, гэта бескарысна, таму GCC не з'яўляецца бяспечным ў дачыненні да варожых ўваход, і яна можа быць выключаная магчымасць зламысніку атрымаць кантроль над GCC працэс, з дапамогай старанна ўваходнага файла ці каманднага радка. Адзіны бяспечны здагадку, што хто-небудзь можа прадставіць працу можа выканаць адвольныя аперацыі па рахунку выкарыстоўваецца distccd.
У якасці альтэрнатывы было прапанавана, што кліент павінен праверыць сервер з'яўляецца надзейным паўторным запускам кампіляцыі на іншы сервер. Гэты падыход можа быць карысна ў некаторых размеркаваных вылічэнняў праблема прасторы, такія як SETI @ Home, але не практычна для Distcc. Па-першае, шкода ад аднаго аб'екта пад пагрозу файл вельмі высокая, таму кожны файл павінен быць шырока правераны. Па-другое, эфектыўнасць абмежаванні такія, што будаўніцтва кожнага файла два ці больш разоў часта робяць размеркаванне нічога не варта. Па-трэцяе там часам быць ілжывых спрацоўванняў ад нязначных адрозненняў у GCC patchlevel, якія не бачныя пры нармальным выкарыстанні, але што рабіць змены выхаднога файла на ўзроўні байтаў.
Толькі адна праблема бяспекі паўстала на сённяшні дзень, які быў выкарыстаны, што Distcc прадказальнай імя часовага каталога. Мясцовых зламыснік, стварыўшы гэты каталог можа прывесці Distcc на правал, але не больш пашкоджанняў.
Былі распрацаваны сістэмы, якія дазваляюць не-Unix машынах для кааптаваныя ўнесці свой уклад у кампіляцыі.
Адным з такіх з'яўляецца distccKNOPPIX, што дазваляе машыне быць перазагружаны і працаваць у якасці добраахвотнікаў кампілятар, без неабходнасці якой-небудзь ўстаноўкі на свой ??жорсткі дыск. Кампілятар і Distcc сервер загружаюцца праз HTTP, так што яны лёгка могуць быць узгоднены з версіямі на баку кліента.
Distcc пакеты цяпер даступныя для Cygwin, які дазваляе крос-кампілятараў для запуску на сістэмах Microsoft.
Большасць рэлізаў Distcc выявілі памылкі ў любым Distcc або іншага праграмнага забеспячэння, якія не могуць быць прайграныя на кампутары аўтара. Ён мае гонар дапамагаць знайсці сур'ёзную памылку ў Linux 02/05 TCP стэка, будучы першай праграмы ад паводкі сеткі дастаткова хутка, каб справакаваць таймер пахам.
На змаўчанні ўзровень вядзення часопіса, Distcc выпраменьвае толькі папярэджання і памылкі, напрыклад, пры кампіляцыі хост недаступны ці кампіляцыя не выконваецца.
Пры падрабязным ўключана вядзенне часопіса, Distcc дакладаў поспех або няўдачу з самых нетрывіяльных сістэмныя выклікі і ўнутраныя функцыі. Адмова можа ўказваць небудзь праблемы на машыне, або памылка ў Distcc. У першым выпадку, часопісы могуць дапамагчы карыстачу высветліць, дзе праблема. Калі там была памылка ў Distcc, следам дапамагае вызначыць, дзе менавіта адбыўся збой, якія дзеянні прывялі да гэтага моманту, і якія наступствы былі. Многія з гэтых памылак з'яўляюцца сэрцам няправільнага здагадкі аб, напрыклад, як Distcc будзе называцца ці як сістэмны выклік паводзіць сябе на розных платформах. След часта называе, якія здагадкі аказаліся няслушнымі.
Мэта апрацоўкі памылак Distcc ў тым, каб ніякіх праблем выклікаць не больш аднаго адмовы. Гэта павінна быць можна паглядзець на падрабязныя след і разабрацца, што пайшло не так, і выправіць.
Памылкі і паведамленні трасіроўкі з сервера запісваюцца як у лог-файл, а таксама ў струмені памылкі кампілятара перадаецца назад кліенту. Гэта робіць яго больш верагодна, што ў выпадку ўзнікнення праблем на серверы, ён будзе відавочным для аддаленых карыстальнікаў без іх неабходнасці глядзець у лог-файле сервера. Гэтая мадэль з'яўляецца вельмі карысным, хоць і не могуць быць прыдатныя для праграмнага забеспячэння, якое апрацоўвае запыты з ненадзейных карыстальнікаў. Памылкі падчас запуску сервера запісваюцца у выснову памылак, а таксама ў лог-файл, каб зрабіць яго больш відавочным, што адміністратар сервера на самай справе не пачатку.
Там былі некаторыя цікавасць да адаптацыі Distcc для кампіляцыі іншых моў, такіх як Java або C #. Гэтыя мовы маюць зусім розныя паказваемых з зыходных файлаў на выхадзе, і, у прыватнасці, не існуе асобнай фазы папярэдняй апрацоўкі. Кампілятар Java павінны прачытаць файлы класаў у адпаведнасці з указаннямі інструкцыі імпарту, і тыя класы, у сваю чаргу, магчыма, павінны быць адноўлены з крыніцы. Размеркаванай кампілятар для гэтых моў будзе магчыма, але, магчыма, неабходна больш цесна інтэграваны з кампілятарам, чым Distcc з'яўляецца.
Distcc можа быць абагульненая яшчэ больш распаўсюдзіць адвольныя неінтерактівной працоўных месцаў, а не проста кампіляцыі. Добры крок у гэтым напрамку будзе рухацца ўсё выведкі пра параметры каманднага радка ў кліенце, так што сервер ледзь часовых файлаў і пакараны названых каманд. На сённяшні дзень няма пераканаўчых прыкладанняў для такога роду размеркаванне прадставіў. Навукова-тэхнічны карыстальнікаў вылічальнай здаецца, дастаткова добра служыў шляхам аб'яднання і партыі-масавага абслугоўвання праграмнага забеспячэння.
GCC версіі 03/03 ўключае некаторыя паляпшэнні прадукцыйнасці, якія робяць Distcc менш адразу ж карысна.
Адзін з іх папярэдне скампіляваныя загалоўкі, калі ўнутраны стан кампілятар скідаецца на дыск пасля чытання набор агульных файлаў загалоўкаў. Гэта карысна для праграм, якія ўключаюць у сябе вялікі і фіксаваны набор загалоўкаў, дзе разбору загалоўкаў займае вялікую частку кампіляцыі. На дадзены момант Distcc можа падтрымаць гэтую паклаўшы. PCH стану файла на агульнай файлавай сістэме. Лепшым рашэннем можа быць дададзены да Distcc ў будучыні.
GCC таксама нядаўна атрымала інтэграваны варыянт препроцессора, каб пазбегнуць накладных выдаткаў працуе препроцессор як асобную задачу. З Distcc неабходна запусціць препроцессор асобна, ён не можа скарыстацца інтэграванай препроцессора і яго прадукцыйнасць у параўнанні з GCC крыху горш.
Distcc прытрымліваецца " горш, тым лепш "філасофіі, коратка Рычард Габрыэль, як чатыры кропкі:
- Прастата: дызайн павінен быць простым, як у рэалізацыі і інтэрфейсу. Гэта больш важна для ажыццяўлення быць прасцей, чым інтэрфейс. Прастата з'яўляецца найбольш важным фактарам у дызайне.
Distcc не патрабуе зменаў у ядры, сістэма зборкі, або кампілятара. Яна можа быць апісана ў пару старонак, і ўстаноўлены ў лічаныя хвіліны. Існуе няма цэнтральнага каардынуючага працэс або глабальных ведаў дзяржаўнага кластара.
Самым бачным месцы, дзе рэалізацыя менш, чым просты necesssary ў сетцы І.А., якія ўмерана аптымізаваны. Гэта, мабыць, апраўдана, як хуткасць працы сеткі мае важнае значэнне для праграмы, карысна.
Маскіруючыся пад GCC робіць ажыццяўленне больш складаным, таму Distcc павінны вызначыць, што гэта выдавалі, а затым ўнесці адпаведныя змены ў шлях, каб выклікаць рэальны кампілятар. Аднак, пад выглядам робіць ўстаноўку і выкарыстанне Distcc значна лягчэй, і так гэта разумны выбар. Калі б гэта аказалася цяжка знайсці надзейных і досыць просты маскарадинг алгарытм, функцыя, магчыма, былі знятыя.
Distcc напісаны на C, што робіць правільнае прымяненне трохі складаней і складаней, чым гэта было б у мове сцэнарыяў. Гэта апраўдана, паколькі для выканання адэкватна, Distcc абавязкова павінны мець вельмі дробных пачатковыя затраты, якія не так для любога папулярнага мовы з вельмі высокім узроўнем.
- Правільнасць: дызайн павінен быць правільным ва ўсіх назіраных аспектах. Гэта крыху лепш быць прасцей, чым правільна.
Ёсць не вядомыя выпадкі, калі Distcc спараджае няправільныя і невытлумачальныя вынік. Рэбраў выпадках, такіх як зьвестак адладкі ў цяперашні час фіксуецца ў простай форме, шляхам карэкцыі GCC, а не ўскладняць Distcc.
Амаль усе свабодныя дрэвы праграмнае забеспячэнне будзе абапірацца, з тым абмежаваньнем, што дрэвы з паралелізм памылак не можа быць пабудавана паралельна.
Калі Distcc сустрэчы нечаканыя ўмовы, ён спрабуе "спружыны", напрыклад, працуе кампіляцыі лакальна, адыходзячы ад канкрэтнай машыны і пазбегнуць выпадковых рэкурсіўных выклікаў.
- Кансістэнцыя: дызайн не павінен быць занадта супярэчлівыя. Паслядоўнасць можа быць прынесены ў ахвяру для прастаты ў некаторых выпадках, але лепш, каб адмовіцца ад тых частак дызайну, якія займаюцца радзей, чым акалічнасці ўвесці альбо implementational складанасці ці неадпаведнасці.
Амаль увесь код у Distcc з'яўляецца агульным для ўсіх платформаў, і вялікая частка кода будзе дасягнуты якой-небудзь канкрэтнай выканання: Ёсць некалькі адносна спецыяльных выпадкаў.
Ёсць некаторыя прыватныя выпадкі і неадпаведнасцяў ў тым, як дэман запускаецца, у спробе зрабіць яго больш дружалюбным для адміністратараў і як гістарычных выпадковасцяў.
Distcc вельмі адпавядае сучасным свабоднай практыцы Unix ў такія дэталі, як адказ на - дапамагчы, выкарыстоўваючы сістэмы GNU Autoconf для ўстаноўкі і ўстаноўкі ў стандартныя каталогі.
- Паўната: дызайн павінен ахопліваць як многія важныя сітуацыі, наколькі гэта практычна. Усе разумна чакаць выпадках павінны быць пакрытыя. Паўната можа быць прынесены ў ахвяру на карысць любога іншага якасці. На самай справе, паўната павінны ахвяраваць, калі ажыццяўленне прастаце ставіцца пад пагрозу. Паслядоўнасць можа быць прынесены ў ахвяру для дасягнення паўнаты, калі захоўваецца прастата; асабліва бескарыснай з'яўляецца ўзгодненасць інтэрфейсу.
Distcc наўмысна не з'яўляецца сістэмай агульнага прызначэння кластарызацыя. Яны занадта цяжка пісаць, і ніхто не можа быць усталяваны ў лічаныя хвіліны. Distcc вельмі няпоўны ахоп ўсіх задач, людзі могуць пажадаць распаўсюдзіць паміж машынамі, але гэта апрацоўваць вялікія задачы, што важна для значнай аўдыторыі.
У прасторы кампіляцыі C, большасць задач могуць быць размеркаваны. Нават калі некалькі працоўных месцаў падчас зборкі праграмнага забеспячэння не могуць быць распаўсюджаныя, іншыя паралельна можа быць, так што яшчэ ёсць агульнае дабро. дакументацыі Distcc і дыягнастычны выхад зрабіць гэта дастаткова лёгка выявіць праблемныя каманды.
Некаторыя GCC варыянты, якія могуць на практыцы быць размеркаваны выконваюцца лакальна дзеля ажыццяўлення прастаты. Каманды, якія вырабляюць зборку спісы адзін прыклад: няма ніякіх прычын, чаму выхадны зборкі не можа быць пераведзены зваротна кліенту, але гэтая магчымасць выкарыстоўваецца рэдка так складанасці не апраўданае.
Distcc мае простую канструкцыю і атрымлівае вялікую паляпшэнне прадукцыйнасці для праграмнага забеспячэння версіі. Яна надзейная і простая ў ўстаноўцы і кіраванні.
Некалькі максімы аб дэманстрацыі праграмных праектаў былі пацвярджаецца развіцця Distcc's. Да пачатку разьвіцьця, тэхніка-эканамічнае даследаванне прадэманстравала, што канцэпцыя магла працаваць. Дызайн наўмысна просты і сферы сціпла сканцэнтраваны на падмноства важных праблем. Моцныя рэгістрацыі дапамагае атрымаць карысныя вынікі ад размеркаваных супольнасці тэсціравання. Эксплуатацыйныя характарыстыкі, такія як API для сціску і новай сеткі былі выкарыстаны выбарачна у месцах, дзе яны паказалі, каб павялічыць Distcc хуткасці.
Як цела свеце зыходным кодам працягвае расці, Distcc дапаможа атрымаць яго пабудаваны, выпрабаваньня і выпусціў больш хутка і бязбольна.
Popular Links