Апгрэйды ПК / Новыя распрацоўкі
Тэхналогіі 21-га стагоддзя імкліва рухаюцца наперад. Адна з такіх тэхналогій - SSD, закліканая змяніць (а на практыцы дапоўніць) састарэлую дыскавую тэхналогію HDD.
Асноўныя вартасці SSD перад HDD ўжо знаёмыя ўсім, гэта - хуткасць доступу, хуткасць доступу да адвольных блокам, паменшаныя габарыты, паменшанае энергаспажыванне і як следства нагрэў.
Нягледзячы на перавагі SSD перад традыцыйнымі дыскамі, гэтай тэхналогіі вельмі шмат гадоў. Я б нават сказаў больш чым жорсткім дыскам, аднак у сілу дарагоўлі, тады (у канцы 70-хх - 80-е) яны каштавалі не ў паўтара-два разы больш звычайных дыскаў, а раз у дваццаць. Пры гэтым вельмі хутка зношваліся і займалі ці ледзь не столькі ж, колькі і матчына плата.
На дадзены момант SSD - гэта фактычна флешка з інтэрфейсам ... а вось мы і плаўна падышлі да галоўнай тэмы. Калі коратка, то інтэрфейс носьбіта інфармацыі - гэта шына са сваімі стандартамі, плюсамі і мінусамі, са сваім наборам каманд, пры дапамозе якой девайс падключаецца да кампутара (цэнтральнаму працэсару, або паўднёваму мосце - не мае значэння). Гэты інтэрфейс - узровень паміж прыладай і аперацыйнай сістэмай, з якім аднолькава паспяхова працуе і прылада і аперацыйная сістэма. Не варта блытаць інтэрфейс з формаў-фактарам раздыма, паколькі інтэрфейс - праграмная штука, а раз'ём - апаратная, і скажам так, вам нішто не перашкодзіць зрабіць кабель злучэння вашага жорсткага дыска з LAN-кабеля з раздымамі RJ-45, праўда сеткавым ад гэтага ваш дыск не стане. Такім чынам, раз'ём (або формаў-фактар, хоць не зусім карэктна) - гэта ўсяго толькі рэалізацыя падлучэння прылады. Інтэрфейс, ён жа пратакол - набор праграмных стандартаў для працы АС з прыладай, падлучаным праз гэты раздым.
Дастаткова стары інтэрфейс для працы з носьбітамі інфармацыі - ATA. У сапраўдны момант ванільнага версія гэтага інтэрфейсу-пратаколу безнадзейна састарэла, і выцесненая больш новымі стандартамі тым жа самым ATA, аброслым мыліцамі, якія дазваляюць адрасаваць больш прасторы, дадаюць чаргу каманд і іншыя новаўвядзенні, актуальныя для сучаснага свету.
Адным з такіх інтэрфейсаў з'яўляецца SATA, а дакладней AHCI. У гэтым выпадку найменні наогул заблытаныя. Першапачаткова SATA - быў паўнавартасным стандартам, затым з яго зрабілі агульная назва для сістэмы носьбітаў інфармацыі, які падключаецца пры дапамозе шасці правадоў, паслядоўным падключэннем (г.зн. адна прылада на порт) і наборам AHCI-каманд, якія ў сваю чаргу падтрымліваюць стандарт NCQ - чаргу, калі па нашым.
Каб прыладзе быць SATA, яму не абавязкова мець SATA-раздым, яно можа быць выканана ў фармаце eSATA, у фармаце mSATA (больш нагадвае MiniPCI), нават у фармаце паўнавартаснага PCI і падлучацца праз гэтую шыну. Проста яно будзе эмуляваць, і сістэма не будзе яго бачыць як PCI, а будзе бачыць як SATA і працаваць з ім як з SATA.
На дадзены момант максімальная хуткасць чытання праз SATA - 600 МБС, і гэта прадыктавана ў першую чаргу электрычнымі абмежаваннямі, не так лёгка перадаць праз 4 драты на высокіх хуткасцях. І 600 МБС - цалкам сабе выдатная хуткасць, улічваючы што хуткасць аддачы інфармацыі з бліна жорсткага дыска - фізічна парадку 90 МБС, а хуткасць чытання флэшкі наогул 60 МБС, тэарэтычная, максімальная. Увогуле 600 МБС цалкам хапала з галавой для цвёрдых дыскаў. Пакуль не з'явіліся SSD. Набор мікрасхем памяці аддае інфармацыю на вельмі высокіх хуткасцях, акрамя ўсяго яму не ўласціва вялікі час пошуку, і ня ўласцівасці прастоі пры запісе. Прагрэсу спатрэбіўся ўсяго толькі год, каб наблізіцца ўшчыльную да абмежавання порта, і яшчэ год, каб у некалькі разоў перагнаць яго.
Каб нівеліраваць гэтыя прастоі, быў прыдуманы новы інтэрфейс - NVM Express. Кампаніі якія яго распрацоўвалі, прадумалі ўсё да дробязяў. Памяншэнне затрымак, стандартызацыя усіх мыліц, кіраванне доступам, паралельны доступ (шмат'ядравыя CPU ўхваляюць), механізм чэргаў, апрацоўка перапыненняў, спрашчэнне кіраўнікоў каманд, і шмат чаго іншага. Атрыманая солянка цалкам здольная здзівіць тых, хто нарадзіўся ў 20-м стагоддзі людзей: сярэдняя хуткасць чытання - 2.5 Гбс. Ўзрушаюча.
Аднак вельмі хутка выявіўся той жа самы недахоп што і ў выпадку мікрасхем памяці з SATA-інтэрфейсам, і ў тым месцы, дзе яго зусім ня чакалі - у архітэктуры праграмнага забеспячэння.
Уявіце сабе двух людзей, адзін слухае, другі ўслых чытае кнігу. Колькасць часу, за якое слухач паспее спазнаць гэтую кнігу, першапачаткова залежыць ад хуткасці чытача, i гэтае звычайнае становішча рэчаў. А цяпер уявіце, што чытае кнігу, паскарае чытанне. Кніга будзе пачутая хутчэй. Калі хто чытае яшчэ паспрабуе - то ўвод гэтай кнігі ў вушы слухача адбудзецца яшчэ хутчэй. Але калі хуткасць павялічыць ЯШЧЭ, то струмень слоў стане няскладным, і слухач яго папросту не зразумее. Атрымліваецца, што на самой справе колькасць часу на ўвод кнігі ў вушы слухача, залежыць не толькі ад хуткасці які чытае, а яшчэ і ад магчымасці слухача адрозніваць словы. Падобная сітуацыя адбылася і з Linux. Які чытае кнігу (сутнасць носьбіт інфармацыі) стаў перадаваць інфармацыю занадта хутка, слухач (сістэма ўводу-вываду) перастала за ім паспяваць, у выніку ўся сістэма працуе на максімальных магчымасцях слухача, пры ўмее хутка чытача. Нічога страшнага ў гэтым няма, такая сістэма будзе працаваць у тры разы хутчэй, чым сістэмы двухгадовай даўнасці. Дрэнна тое, што фізічна яна можа працаваць хутчэй у пяць разоў. І будзе.
Такім чынам, тэма артыкула - паскарэнне Linux на SSD NVM Express - Samsung N950 Pro
Уступныя дадзеныя:
Матчына плата MiniITX MSI B150I Gaming Pro
Працэсар Intel Pentium G4400 Skylake
АЗП 8Gb DDR4 2133MHz
SSD M.2 NVME Samsung 950Pro, хуткасць чытання - 2500 Мб / c, хуткасць запісу - 1500 Мб / c
Аперацыйная сістэма Debian 8.4 (на самай справе не мае значэння)
Жудасныя тормазы пры загрузцы, і пры працы. З устаноўленым DE Cinnamon, гэтая канфігурацыя адкрывае Firefox за 2-3 секунды, што ня ёсьць гут. Павінна імгненна.
Разгледзім паслядоўна працэс загрузкі ад пачатку і да гатоўнасці працы:
Спярша загружаецца BIOS. Або UEFI - гэта ня важна. Гэтая прашыўка ініцыялізуе прылады і шукае загрузнік на адным з носьбітаў інфармацыі. Гэты загрузнік - MBR або файл UEFI, у сваю чаргу загружае паўнавартасны лоадер, у нашым выпадку гэта GRUB. Лоадер чытае свой канфігурацыйны файл, /boot/grub/grub.cfg і загружае субмодули, шрыфты і выконвае скрыпты, выводзячы спіс магчымых АС і іх меню.
Калі мы націскаем ўвод на тым ці іншым меню (з Лінуксам, зразумела), наш GRUB падгружае дадатковыя модулі неабходныя для доступу да падзелу дыска, некаторыя графічныя модулі. Потым ён загружае ў памяць ядро з радком параметраў, і так званы ramdisk, initrd - сціснуты набор модуляў і бібліятэк, неабходны для пачатковага старту. Пасля загрузкі рамдиска, ядро перадае кіраванне файлу / init, які знаходзіцца на тым раздзеле, які быў паказаны параметрам root = ў радку параметраў ядра. Сістэма ініцыялізацыі, яна ж init - набор скрыптоў рознай ступені сапсаванасці ў розны час, па сутнасці з'яўляюцца автозагрузчиками сэрвісаў, прылад, і гэтак далей. Апошнім з гэтых скрыптоў з'яўляецца менеджэр дысплеяў, альбо менеджэр кансоляў. Далейшая загрузка залежыць ад налад пэўнай АС, яны бываюць рознымі, але часцей за ўсё два варыянты - альбо выдаецца запрашэнне ў выпадку мэнэджара кансоляў, альбо выдаецца графічнае запрашэнне ў выпадку з дысплейных мэнэджарам. Але не заўсёды. Абодва спосабу могуць мець автологин (г.зн. будзе залагініцца пад карыстальнікам без запрашэння). Затым грузіцца інтэрпрэтатар (як правіла гэта bash) у выпадку з кансольнай загрузкай, альбо кіраўнік вокнаў (працоўны стол) у выпадку з графічнай загрузкай. Гэтыя праграмы з'яўляюцца практычна канчатковымі, за выключэннем іх уласных автозагрузок, якія могуць утрымліваць у сабе падключаюцца смачнасці накшталт докбара, панэляў, расфарбовак, і іншага смецця. Але гэта ўжо ўсё роўна.
Як бачым, этапаў загрузкі шмат. На самай справе іх яшчэ больш, паколькі многія драйверы прыладаў могуць быць убудаваны ў ядро, але многія ляжаць у выглядзе асобных модуляў і падгружаюцца па меры неабходнасці.
Такім чынам, першае што мы павінны зразумець, як і ў выпадку з HDD, лепш адзін вялікі файл, чым шмат дробных. "Лепш" тут можа вар'іравацца ў шырокіх межах: десятимегабайтный файл загрузіцца хутчэй, чым дзесяці стокилобайтных (у суме даюць ўсяго толькі мегабайт). Як гэтага дасягнуць - мы даведаемся пазней.
Другое - прынцып KISS не заўсёды добра, і адсутнасць прынцыпу KISS не заўсёды добра таксама. Нагадаю, гэты прынцып абвяшчае рабіць адну рэч адным прыладай, не вынаходзячы камбайны. У нашым выпадку загрузкі, нават не ўдаючыся ў падрабязнасці відаць, што некаторыя нюансы робяцца па некалькі разоў. Прыклад - загрузка драйвераў на дыск і ФС. Ну трызненне ж, калі GRUB загрузіўся, значыць дыск УЖЕ даступны, і не трэба падгружаць драйверы ў initrd, а затым у ядры. Як ад гэтага пазбавіцца - мы таксама даведаемся пазней.
Трэцяе - заўсёды трэба ўсведамляць што базавую ядро і наогул базавая сістэма пабудаваная на аснове найбольш распаўсюджаных канфігурацый, і з аднаго боку раздуць для як мага большай сумяшчальнасці, а з другога боку, не падтрымлівае многія фічы зноў жа для як мага большай сумяшчальнасці. Драйверы відэа, драйверы дыскаў, драйверы USB працуюць на сярэдняй арыфметычнай аптымізацыі і хуткасці. А гэта часцей за ўсё павольна. Туды ж адносяцца і ўсякія новыя тэхналогіі, накшталт нашага nvme
Што ж нам трэба зрабіць?
Па-першае, пазбавіцца ад пракладак. Пракладкі ад якіх лягчэй за ўсё пазбавіцца без лішняга галаўнога болю - гэта як ні дзіўна initrd і дысплейных менеджэр. Для таго каб пазбавіцца ад першага - трэба ўсяго толькі закаментаваць адзін радок. Каб пазбавіцца ад другога - яго трэба проста не ставіць, або выдаліць калі ўжо паставілі. Гэта значыць дамагчыся кансольнай загрузкі.
Па-другое, прымусіць нашу АС грузіць ўсе фічы для паскарэння працы.
Па-трэцяе, зрабіць так, каб па магчымасці ўсё Грузія толькі адным файлам.
Паколькі простае пазбаўленне ад initrd прывядзе да немагчымасці загрузкі (ядро не зможа загрузіцца), ды і фічы проста так не з'явяцца, адзіны спосаб зрабіць гэта - перасабраць ядро.
Гэта лёгка. Асабліва на debian-based сістэмах, Debian, Ubuntu, Elementary, Mint і іншых. На іншых канфігураванне будзе сапраўды такім жа, але зборка можа трохі адрознівацца. Якія пакеты трэба пампаваць і ставіць, я тлумачыць не буду, пра гэта можна пачытаць тут (Адкрыецца ў новым акне)
Нам варта стварыць першапачатковую канфігурацыю камандай make localyesconfig - гэтая каманда створыць папярэднюю канфігурацыю на аснове працуюць у дадзены момант модуляў, з опцыяй ўключэння гэтага ўсяго ў ядро (памятаем, мы фарміруем адзін вялікі файл). Таму будзе лепш калі на гэтым этапе вы ўставіце ў ваш кампутар ўсе прылады, якія патэнцыйна могуць выкарыстоўвацца - вебку, флэшкі, сеткавыя карты.
Далей я проста напішу якія параметры трэба сканфігураваць для мацнейшага паскарэння і падтрымкі фіч на прыладах NVM Express:
General setup ---> Kernel compression mode ---> выбіраем XZ. Гэты алогоритм сціску найбольш хуткі, хай і не вельмі эканомны.
General setup ---> T imers subsystem ---> Выбіраем Periodic timer ticks (constant rate, no dynticks) - наш працэсар сам разбярэцца як яму працаваць з задачамі, ня трэба яму перашкаджаць
Processor type and features ---> Выбіраем максімальна набліжаны працэсар да нашага, і яго некаторыя фічы, падтрымку Hyperthreading, ці проста многоядерность.
P reemption Model ---> Preemptible Kernel (Low-Latency Desktop) - гэта дазволіць максімальна хутка апрацоўваць усе задачы
Timer frequency ---> 300 HZ - вышэй няма сэнсу, працэсар будзе дарма тузацца, ніжэй - таксама, інакш рэакцыя сістэмы будзе запозненай.
Device Drivers ---> <*> NVM Express block device - ставім зорачку, гэты драйвер павінен быць вкомпілірованы ў ядро
Device Drivers ---> SCSI device support ---> [*] SCSI: use blk-mq I / O path by default - абавязкова. Гэта дазволіць сістэме ўводу высновы выкарыстоўваць паралелізм пры чытанні або запісы на NVM-носьбіце
Астатнія параметры вы павінны выставіць самі, зыходзячы з наяўнасці або адсутнасці прылад на вашым кампутары
Ідзем далей.
File systems ---> <*> The Extended 4 (ext4) filesystem - у выпадку калі вы карыстаецеся ext4 або ext3. Іншымі словамі, вы павінны вкомпілірованы ў ядро тую ФС, якая ўсталяваная ў вас.
File systems ---> <*> FUSE (Filesystem in Userspace) support - гэта дазволіць мантаваць дыскі ў графічных абалонках
File systems ---> DOS / FAT / NT Filesyste ms ---> Тут можна паставіць усе зорачкі, ці ўсе модулі, гэта трэба толькі калі ў вас ёсць файлавыя сістэмы выдатныя ад каранёвай. Флэшкі, дыскі, і гэтак далей.
Не забудзьцеся гэтак жа выставіць неабходныя вашым НЕлинукс ФС, кадоўкі ў меню Native language support --->
Пасля кампіляцыі і ўстаноўкі новага ядра, нам варта адрэдагаваць файл /boot/grub/grub.cfg і закаментаваць радок з выклікам нашага initrd. Калі вы яго пакінеце - нічога страшнага не здарыцца, але сістэма будзе загружаць два разы адны і тыя ж модулі. Калі вы яго закомментируете - нічога страшнага гэтак жа не адбудзецца, бо ўся ваша інфармацыя нікуды не выдаліцца. Пасля гэтага ў радку загрузкі вашага ядра, трэба змяніць параметр root з знакавай UUID-прылады, на яго блочны шлях, напрыклад root = / dev / nvme0n1p2
Пасля перазагрузкі па ідэі, новае ядро і ў цэлым сістэма, павінны загружацца адчувальна хутчэй, і займаць менш месца на дыску і ў памяці. Калі вы не змаглі загрузіць ядро (дакладней яно не змагло прімонтіровать сістэмны падзел і ўпала ў "kernel panic-not syncing: VFS: unable to mount root fs" - гэта азначае, што вы няправільна назвалі сістэмны падзел у параметрах ядра, або забыліся вкомпілірованы драйвер, спецыфічны для вашай АС (напрыклад вкомплилировали падтрымку ext4, але забыліся btrfs, і менавіта на ім размешчана ваша сістэма).
Працяг будзе...
Пазнакі тэксту: Linux NVM PCI-E SSD
https://minidevices.info/images/ava.png

https://minidevices.info/images/ava.png
2016-06-03 14:53 2016-06-03 14:53 2016-06-03 14:53 root Linux NVM PCI-E SSD