Журнал LinuxFormat - перейти на главную

LXF137:Что за штука

Материал из Linuxformat
Перейти к: навигация, поиск

Что за штука… SystemD?

Ско­ро ваш лю­би­мый ди­ст­ри­бу­тив Linux бу­дет за­гру­жать­ся го­раз­до бы­ст­рее, бла­го­да­ря трем раз­ра­бот­чи­кам-доб­ро­воль­цам. Пусть Боб Мосс все объ­яснит...
  • Раз­ве моя систе­ма гру­зит­ся недоста­точ­но бы­ст­ро?
Ну, во-пер­вых, это весь­ма субъ­ек­тив­ный во­прос! А во-вто­рых, для за­пуска фо­но­вых служб и за­груз­ки систе­мы боль­шин­ство со­вре­мен­ных ди­ст­ри­бу­ти­вов при­ме­ня­ет уста­рев­ший sysvinit или Upstart от Canonical. По­следний ак­тив­но по­шел в ход в боль­шин­стве круп­ных Linux’ов в по­следние год-два, и это при­ве­ло к зна­чи­тель­но­му уско­рению за­груз­ки.
  • А что это за sysvinit, о ко­то­ром вы упо­мя­ну­ли?
Это про­цесс, ро­ди­тель­ский для лю­бо­го про­цес­са, ра­бо­таю­ще­го в систе­ме Linux. Ес­ли точнее, яд­ро за­пуска­ет sysvinit (обыч­но это /sbin/init) для то­го, что­бы ак­ти­ви­ро­вать «под­про­грам­мы», из ко­то­рых за­тем ком­по­ну­ют­ся фо­но­вые служ­бы. Sysvinit вы­зы­ва­ет все ком­понен­ты систе­мы и под­чи­нён­ные служ­бы в оп­ре­де­лён­ном по­ряд­ке, по­это­му яв­ля­ет­ся важней­шей ча­стью ОС.
  • Если sysvinit — важней­шая часть, по­че­му вы об­зы­вае­те её уста­рев­шей?
Sysvinit бы­л соз­дан за­дол­го до по­яв­ления со­вре­мен­ных ОС, а в нынешних усло­ви­ях стал из­лишне гро­мозд­ким и неэф­фек­тив­ным. Про­цес­сы за­гру­жа­ют­ся один по­сле дру­го­го и стро­го по­оди­ноч­ке – то есть по­тен­ци­ал ап­па­рат­но­го обес­пе­чения ис­поль­зу­ет­ся сла­бо (ес­ли не го­во­рить об ар­ха­ич­ных од­но­ядер­ных про­цес­со­рах). Или возь­мём ши­ро­кое ис­поль­зо­вание скрип­тов обо­лоч­ки. В об­щем-то кри­ми­на­ла в этом нет, но ведь для ка­ж­до­го скрип­та sysvinit за­гру­жа­ет все мо­ду­ли обо­лоч­ки, за­пуска­ет служ­бу, вы­пол­ня­ет коман­ды, оста­нав­ли­ва­ет служ­бу и вы­гру­жа­ет мо­ду­ли. Нетруд­но до­га­дать­ся, что все эти дей­ствия из­ряд­но тор­мо­зят про­цесс, и те ди­ст­ри­бу­ти­вы, ко­то­рые до сих пор ис­поль­зу­ют от­ста­лую тех­но­ло­гию, по ско­ро­сти за­груз­ки (по крайней ме­ре, в рас­че­те на один сер­вис) не идут ни в ка­кое сравнение с бо­лее про­дви­ну­ты­ми со­брать­я­ми.
  • По­ла­гаю, Upstart и есть та тех­но­ло­гия, ко­то­рая идет на сме­ну?
Вы схва­ты­вае­те на ле­ту! Upstart соз­дал Скотт Джеймс Рем­нант [Scott James Remnant] в сво­бод­ное вре­мя, ста­ра­ясь уско­рить за­груз­ку Linux. По­сле то­го, как ра­бо­ту Скот­та вклю­чи­ли в основ­ной про­ект Ubuntu (а в Canonical осоз­на­ли, что ав­тор – не  кто иной, как их со­трудник), ав­тор­ское пра­во пе­ре­шло к ком­пании. В со­об­ще­стве хо­ди­ли слу­хи о том, что ав­то­ру весь­ма на­стоя­тель­но ре­ко­мен­до­ва­ли так по­сту­пить – од­на­ко, неза­ви­си­мо от слу­хов и по­ли­ти­че­ских ин­триг, тех­но­ло­гия ока­за­лась весь­ма по­лез­ной и, воз­мож­но, пря­мо сей­час ра­бо­та­ет в ва­шей систе­ме.
  • Хо­ти­те ска­зать, в мо­ей систе­ме ору­ду­ет Upstart, а я и знать не знаю об этом?
Ес­ли вы поль­зуе­тесь одним из основ­ных со­вре­мен­ных ди­ст­ри­бу­ти­вов – ско­рее все­го, всё так и есть, и Upstart из­вле­ка­ет на­мно­го боль­ше поль­зы из ва­шей ма­ши­ны, чем sysvinit. Ме­то­ди­ку Upstart мож­но услов­но на­звать «пра­ви­ла­ми дей­ствий». Эти пра­ви­ла предпи­сы­ва­ют, на­при­мер, сле­дую­щее: служ­ба, за­пускае­мая по неко­му со­бы­тию, не мо­жет ра­бо­тать, ес­ли не за­пу­ще­ны служ­бы X и Y, и не долж­на ра­бо­тать од­но­вре­мен­но со служ­бой Z (так как они кон­флик­ту­ют); а по­сле за­пуска дан­ной служ­бы долж­ны быть за­пу­ще­ны мо­ду­ли A, B и C. Ка­ж­дое пра­ви­ло дей­ствия свя­зы­ва­ет­ся с оп­ре­де­лён­ным со­бы­ти­ем, ко­то­рое мо­жет быть чем угод­но, от за­пуска про­грамм­но­го па­ке­та до под­клю­чения USB-на­ко­пи­те­ля. Upstart ра­бо­та­ет в ди­на­ми­ке и обес­пе­чи­ва­ет за­пуск всех служб, необ­хо­ди­мых для об­ра­бот­ки лю­бо­го со­бы­тия, со­глас­но предпи­сан­ным пра­ви­лам дей­ствия.
  • Тогда за­чем при­ду­мы­вать ещё ка­кой-то SystemD?
Не всё иде­аль­но и в тех­но­ло­гии Upstart. Во-пер­вых, про­грам­мист дол­жен оп­ре­де­лить пра­ви­ла дей­ствия для всех мыслимых со­бы­тий, ведь сце­на­ри­ев си­туа­ции мо­жет быть ве­ли­кое мно­же­ство. Нуж­но ука­зать ка­ж­дый мо­дуль и ка­ж­дую служ­бу, ко­то­рые сле­ду­ет за­гру­зить до, по­сле и во вре­мя вы­полнения ка­ж­до­го пра­ви­ла, а так­же опи­сать воз­мож­ные кон­флик­ты. Кро­ме то­го, по­сколь­ку при ра­бо­таю­щем Upstart нель­зя уз­нать, что имен­но бы­ло тем са­мым со­бы­ти­ем, при серь­ез­ных сбо­ях очень труд­но до­быть по­лез­ные ди­аг­но­сти­че­ские све­дения. До­бавь­те сю­да попрежнему ин­тен­сив­ное ис­поль­зо­вание обо­лоч­ки для со­вмести­мо­сти с sysvinit', осо­бое от­но­шение к про­цес­сам D-Bus – и вы пой­мё­те, что при­чин за­менить Upstart чем-нибудь бо­лее эф­фек­тив­ным очень да­же хва­та­ет.
  • Кто раз­ра­ба­ты­ва­ет SystemD?
Над SystemD ра­бо­та­ют: Лен­нарт Пот­те­ринг [Lennart Poettering] (со­трудник Red Hat, от­ве­ча­ет за раз­ра­бот­ку PulseAudio); Кай Си­верс [Kay Sievers] (из Novell) и Дха­вал Гиани [Dhaval Giani] (ранее ра­бо­тал в IBM). Как и с Upstart, про­грам­ми­сты пи­шут SystemD в сво­бод­ное от основ­ной ра­бо­ты вре­мя: ника­кая ком­пания спе­ци­аль­но этим не занима­ет­ся. Идею уже по­при­вет­ство­ва­ли ко­ри­феи сво­бод­но­го ПО: мно­гие из них нега­тив­но от­но­сят­ся к во­про­сам ав­тор­ско­го пра­ва на Upstart. На­звание SystemD об­ра­зо­ва­но по об­щим пра­ви­лам име­но­вания ра­бо­таю­щих де­мо­нов (на­при­мер, clamd) и недву­смыс­лен­но сви­де­тель­ству­ет о то­таль­ном влиянии на систе­му.
  • Ка­ко­вы же глав­ные досто­ин­ства SystemD?
Во-пер­вых, раз­ра­бот­чи­ки на­ме­ре­ны све­сти к миниму­му ис­поль­зо­вание обо­лоч­ки, а сце­на­рии sysvinit ис­пол­нять па­рал­лель­но, для по­вы­шения бы­ст­ро­дей­ствия. Во-вто­рых, в SystemD не ис­поль­зу­ют­ся пра­ви­ла и со­бы­тия для ру­ко­во­дства вы­полнением про­цес­сов, служб и мо­ду­лей. Вме­сто это­го раз­лич­ные объ­ек­ты – на­при­мер, служ­бы, со­ке­ты, уст­рой­ства, точ­ки мон­ти­ро­вания, це­ли и сним­ки систе­мы – оп­ре­де­ля­ют­ся как «мо­ду­ли» (units), ко­то­рые мож­но за­пускать, оста­нав­ли­вать, пе­ре­за­гру­жать и пе­ре­за­пускать так же, как лю­бой про­цесс. Про­грам­ми­стам станет удобнее, по­сколь­ку SystemD сам соз­да­ёт и про­слу­ши­ва­ет со­ке­ты: те­перь ра­бо­ты по оп­ре­де­лению длин­но­го пе­реч­ня усло­вий и дей­ствий для ка­ж­до­го со­бы­тия станет мень­ше. Управ­ление при­ви­ле­гия­ми так­же осу­ще­ств­ля­ет SystemD: для это­го при­ме­ня­ют­ся те же «кон­троль­ные груп­пы», что и в яд­ре Linux. На­конец, про­грам­ми­стам боль­ше не нуж­но за­бо­тить­ся о ‘sid’, вы­зо­вах PID-фай­лов и разветвлении про­цес­сов. Ко­ро­че го­во­ря, SystemD бе­рёт на се­бя из­ряд­ную до­лю за­бот про­грам­ми­ста и цен­тра­ли­зу­ет управ­ление «мо­ду­ля­ми», ра­ди по­вы­шения эф­фек­тив­но­сти за­груз­ки.
  • Эй, а за­чем здесь кон­троль­ные груп­пы?
В яд­ре Linux эти груп­пы оп­ре­де­ля­ют доступ про­цес­сов к ре­сур­сам (фай­лам, ОЗУ и пр.) систе­мы. SystemD при­ме­ня­ет их для пре­достав­ления соз­да­вае­мым «мо­ду­лям» досту­па в пре­де­лах пол­но­мо­чий оп­ре­де­лён­ной груп­пы, вый­ти за ко­то­рые они мо­гут толь­ко по осо­бо­му доз­во­лению про­грам­ми­ста, ес­ли он по­вы­сит пол­но­мо­чия до root. Всё это уби­ра­ет мно­го лишней ра­бо­ты, сбе­ре­гая вре­мя про­грам­ми­стов для ко­ди­ро­вания.
  • А по­че­му раз­ветв­ление про­цес­сов — это пло­хо?
Ес­ли ро­ди­тель­ский про­цесс соз­да­ст дру­гой про­цесс, тот ста­нет «на­следником» про­цес­са-соз­да­те­ля. Это спо­соб­но при­вести к возник­но­вению мас­сы кло­нов в систе­ме, и ес­ли ро­ди­тель­ско­му про­цес­су при­свое­ны по­вы­шен­ные пол­но­мо­чия, все его по­том­ки при­об­ре­тут те же при­ви­ле­гии, что непрак­тич­но и небезо­пас­но.
  • По­че­му па­рал­лель­ная ра­бо­та скрип­тов sysvinit по­вы­ша­ет бы­ст­ро­дей­ствие?
Как я уже упо­ми­нал, sysvinit не слиш­ком эф­фек­ти­вен, а в его скрип­тах мо­жет со­ дер­жать­ся ин­фор­ма­ция, ненуж­ная и да­же вред­ная для ра­бо­ты SystemD. Скрип­ты об­ра­ба­ты­ва­ют­ся поч­ти так же, как про­цес­сы D-Bus, и это име­ет смысл, ес­ли при­помнить, что D-Bus за­пуска­ет про­цес­сы па­рал­лель­но, а не по­сле­до­ва­тель­но (в от­ли­чие от sysvinit). Вот и SystemD об­ра­ба­ты­ва­ет про­цес­сы па­рал­лель­но, в русле D-Bus, тогда как sysvinit – по од­но­му, в за­дан­ном по­ряд­ке. Есте­ствен­но, под­ход SystemD го­раз­до эф­фек­тивнее ис­поль­зу­ет мощь со­вре­мен­ных ма­шин.
  • Когда же SystemD при­дёт и на мою систе­му?
Во вре­мя напи­сания ста­тьи но­вая тех­но­ло­гия но­си­ла ста­тус экс­пе­ри­мен­таль­ной, бу­ду­чи в ин­тен­сив­ной раз­ра­бот­ке, но в но­вых вер­си­ях неко­то­рых ди­ст­ри­бу­ти­вов, на­при­мер Fedora 14, уже планиру­ет­ся за­менить Upstart на SystemD для уско­рения за­груз­ки и об­ще­го по­вы­шения бы­ст­ро­дей­ствия.
  • Неу­же­ли так ско­ро?! А где мож­но уз­нать об этом под­робнее?
Луч­ше все­го на­чать от­сю­да: http://0pointer.de/blog/projects/systemd.html. Это ис­ход­ный пост в бло­ге ве­ду­ще­го раз­ра­бот­чи­ка: здесь под­роб­но разъ­яс­ня­ют­ся осно­вы SystemD; а ком­мен­та­рии то­же достой­ны про­чтения. Мож­но по­пы­тать­ся при­менить но­вин­ку и на су­ще­ствую­щей систе­ме: ру­ко­во­дство для OpenSUSE 11.3 вы­ло­же­но на http://bit.ly/aDGtZL.
Персональные инструменты
купить
подписаться
Яндекс.Метрика