Дневник на ядрото - какво носи (3) инфраструктурата c t magazine

Тенденции и новини | Дневник на ядрото

ядрото

AppArmor, входни точки за вирусни скенери при достъп, новоизписан убиец извън паметта, както и основите на кода Xen-Dom0 са едни от най-важните нововъведения на ядрото на Linux 2.6.36. Благодарение на известно преструктуриране, тази версия става малко по-малка от предшественика си въпреки няколкостотин хиляди реда нов код.

В сряда сутринта Линус Торвалдс пусна шестата версия преди изданието на Linux 2.6.36. Той посочи, че би искал да пусне 2.6.36 скоро, но може би все пак да вмъкне друга предварителна версия.

Дневникът на ядрото приема това като възможност за продължаване на мини-поредицата „Какво носи 2.6.36“ с описанието на иновациите, свързани с неща като управление на паметта, системата за изграждане и поддръжка за различни CPU и системни архитектури. Първата част от поредицата се занимаваше с промените в графичния хардуер, втората с файлови системи, съхранение и мрежов хардуер; четвърта част за промените в ACPI, PCI, управление на захранването и драйверите за USB, FireWire, V4L/DVB и Co. ще завърши мини серията след няколко дни.

Сигурност

След като разработчиците на AppArmor, разкрити от Novell през 2006 г., се опитваха неуспешно в продължение на няколко години да включат кода на ядрото за подобряване на защитата, версия 2.6.36 от това най-накрая се присъедини към ядрото (включително 1, 2, 3, документация). Подобно на SELinux, AppArmor може да ограничава приложенията до определени действия; Следователно атакуващите, които получават достъп до системата чрез дупка в сигурността, например в сървърния софтуер, могат да причинят само ограничени щети.

AppArmor има репутацията на по-лесен за администриране от SELinux. Последният е предпочитан от Red Hat и се използва от Red Hat Enterprise Linux (RHEL) и Fedora, наред с други. Novell се фокусира дълго върху AppArmor, но се отдели от собствения си отдел за разработка на AppArmor през 2007 г. и също използва SELinux от 2008 г. В резултат на това развитието на AppArmor се забави значително, докато Джон Йохансен му даде нов тласък в началото на годината и накрая настоя за включване в официалното ядро. По-рано Йохансен е работил в Novell и в момента е отговорен за интеграцията на AppArmor в Ubuntu в Canonical.

Fanotify, който се появи от TALPA, се нуждаеше от многобройни опити и няколко години преди Torvalds да го интегрира (включително 1, 2, 3). Той се основава на интегрирания в 2.6.31 Fsnotify и предлага входни точки, чрез които скенерите за вируси, например, могат да се свързват, за да проверяват файлове при достъп до зловреден софтуер, преди съдържанието им да бъде доставено („сканиране при достъп“). Няколко статии на LWN.net (включително 1, 2, 3) предоставят основна информация за това как работи Fanotify и проблемите с по-ранните версии на Fanotify.

[Актуализиране 14 октомври 2010 г., 9:30 ч.] Само няколко дни преди завършването на Linux 2.6.36, разработчиците временно деактивираха интерфейсите на Fanotify на потребителското пространство, за да могат да отстранят някои недостатъци, някои от които също засягат ABI (1, 2, 3) - това означава, че Fanotify засега не може да се използва. За Kernel 2.6.37 се планират отстраняване на грешки и повторно активиране на интерфейсите на потребителското пространство; Все още не е ясно дали тези лепенки вероятно ще намерят своя път и в едно от стабилните ядра от серията 2.6.36. [/Актуализиране]

Управление на паметта и нишките

Разработчиците на ядрото значително са се променили и до голяма степен са пренаписали убиеца Out of Memory (OOM), който убива процеси, когато няма достатъчно памет, за да може системата да продължи да работи (1, 2, 3). Поради тези промени фината корекция на OOM се прилага чрез/proc /

/ oom_adj вече е „оттеглено“ и трябва да изчезне през август 2012 г. LWN.net предоставя повече информация за промените в OOM в статията „Друго презаписване на убиец на OOM“.

Хакерите на ядрото също са интегрирали "Управлявани работни параметри по съвпадение", които оптимизират обработката на нишки на ядрото (включително 1, документация). В резултат на това ядрото трябва да използва ресурсите по-ефективно, да го мащабира по-добре и да се справи с по-малко нишки в много системи - потребителите също ще забележат последното, защото това съкращава списъка с нишки на ядрото, издадени от ps -A. Разработчикът предоставя допълнителни предимства и причини за промените в подробна поща на своите кръпки и като част от заявката Git-Pull; LWN.net написа статия за Concurrencey Managed Workqueues миналата есен.

[виртуализация на прекъсване на страници, Kbuild]

Архитектурен код

Списъкът на процесорните архитектури, поддържани от ядрото, отново се разраства с 2.6.36 и вече включва и 32-битовите процесори TILEPro и TILE64 (включително 1, 2, 3), разработени от Tilera. Те са подобни на MIPS VLIW процесори с много ядра, които комуникират помежду си чрез iMesh мрежа. Тъй като те работят много икономично, повече от 10 000 процесорни ядра могат да бъдат настанени в сървърна стойка. Поддръжката за процесорите Tegra на Nvidia, които са базирани на ARM архитектурата (включително 1, 2, 3), идва от средата на Android. Освен това ядрото вече съдържа около 90 процента от драйверите за Ben NanoNote (включително 1, 2, 3, 4, 5, 6, 7, 8) - джобен компютър с отворена хардуерна платформа, който също се предлага в Европа от пролетта е на разположение.

Поддръжникът на KVM Avi Kivity пише в искането си за Git-Pull, че в KVM няма важни нови функции за 2.6.36. Той обаче посочва някои оптимизации на производителността и споменава поддръжката на процесорните команди Xsave (1, 2) и AVX (Intel Advanced Vector Extension) в системи за гости.

Исканията за Git-Pull от Jeremy Fitzhardinge и Konrad Rzeszutek Wilk дават общ преглед на промените в кода Xen. С кръпките, събрани от първите, драйверите на Paravirt вече могат да се използват и в напълно виртуализирани домейни („pv-on-hvm“); Поради другите промени, Linux като паравиртуализирана система за гости може да има достъп до PCI устройства чрез един вид виртуален IOMMU, който хостът (Dom0) предоставя (включително 1). Някои от промените също така поставят основите, върху които трябва да се основава кодът за работа на ядрото на Linux като „първоначален домейн“ - вид съкратена поддръжка на Dom0. Понастоящем този код се обсъжда в LKML и може да премине в основния клон за развитие на Linux в една от следващите версии.

Постно

Кодът на Kbuild вече предлага четири нови цели:

  • "oldnoconfig" замества "loose_nonint_oldconfig" и задава всички опции за конфигуриране в конфигурационния файл на ядрото ".config" на "не", които не са били предварително зададени.
  • "listnewconfig" замества "nonint_oldconfig" и изброява всички опции, които все още не са зададени в ".config".
  • "alldefconfig" създава ".config", в който на всички опции се дават настройките, определени от файловете Kconfig по подразбиране.
  • "savedefconfig" пише конфигурационен файл, наречен "defconfig", в който са изброени само тези опции, които се различават от стандартните настройки на файловете Kconfig.

С помощта на последния make target разработчиците са създали десетки стандартни конфигурационни файлове за различните системни и процесорни архитектури, поддържани от ядрото на Linux, които заместват предишните стандартни конфигурационни файлове. Тъй като последният също преди това съдържаше записи за всички опции, които kconfig файловете на ядрото са посочили като стандарт, съответстващият коммит е почти 6 MB и премахва над двеста хиляди реда в ядрото.

Администраторите Itanium (IA64) и Power подсигуряват преди това своите конфигурационни файлове по този начин (1, 2). Всички тези промени са основната причина, поради която изходният код на 2.6.36 трябва да е малко по-малък от директния си предшественик - това е изключително необичайно, тъй като през последните години ядрото е нараснало с няколкостотин хиляди реда с всяка нова версия.

Диетата за стандартните конфигурационни файлове вече беше започнала с 2.6.35, когато разработчиците на ядрото направиха файловете за ARM системи по-леки. Цялото нещо не променя нищо за потребителя, тъй като както преди "make defconfig" създава основен конфигурационен файл за вашата собствена система.

[разчупване на страници, малки перли]

различни

  • Хакерите на ядрото допълнително намалиха използването на Big Kernel Lock (BKL) в инфраструктурния код и многобройни драйвери - включително в подсистемата TTY, което създаде трудности дори за някои от най-опитните хакери на ядрото. По този начин разработчиците се приближават до целта ядрото да работи на стандартни системи без този тромав заключващ механизъм, който влошава мащабируемостта и производителността на системата.
  • Кодът x86 вече поддържа известия за ограничаване на мощността от процесорите Sandy Bridge на Intel, които се очакват в началото на следващата година (1, 2, 3). Новият драйвер на Hwmonitor pkgtemp е базиран на него и може да отчита температурата на процесора (1, документация)
  • В определени ситуации планиращият процес намалява конкуренцията между нишките на ядрото, които искат да получат изключителен контрол над зает ресурс. Това позволява на активния процес да работи по-необезпокоявано, което в някои случаи значително увеличава пропускателната способност на данните (Статия, статия на LWN.net).
  • Както при своите предшественици, 2.6.36 също така внася множество промени в кода за отстраняване на грешки, мониторинг на производителността и проследяване. Хакерите на ядрото премахнаха например приставката Ftrace kmemtrace, тъй като функциите вече могат да се изпълняват, като се използват проследяващи събития от типа "kmem" и "perf kmem". Както вече беше описано в първата част на поредицата „Какво носи 2.6.36“, ядрото на системи с поддръжка на Intel KMS вече предлага KDB дебъгерна обвивка за анализ на причината за срив на X сървъра когато преминаването към текстова конзола вече не е възможно и не е конфигурирана серийна конзола.
  • Почти месец след края на прозореца за сливане, ядрените хакери направиха промяна в планиращия процес, чрез която планировщикът трябва да намали максималното време за изчакване, особено на настолни системи, когато други процеси изискват паралелно време на процесора - това обещава по-добро Скорост на реакция, която трябва да накара системата да се чувства по-бързо. Дискусията, предшестваща промяната, и коментарът за фиксиране обясняват фона и предоставят измерени стойности, според които максималната латентност в тестовия сценарий е почти наполовина.
  • С 2.6.36 хакерите на ядрото искат да елиминират проблема, който е причинил системите с 2.6.35 и някои по-ранни версии на ядрото да се чувстват изключително бавни при определени условия или да спрат да реагират понякога, докато ядрото прехвърля по-големи количества данни на бавен носител (напр. USB стик) написа (включително 1).
  • Подобрението за сигурност на Tomoyo вече предлага „Интерактивен режим за налагане“, който администраторите могат да използват, за да решат дали да игнорират нарушение на политиката. Видеоклип в YouTube илюстрира как работи.
  • Stefani Seibold промени Kfifo API, който вече беше значително преработен в 2.6.32, за да подобри производителността и да осигури по-добър API (включително 1, 2). Старите API извиквания все още се поддържат, новите възможности са обяснени с няколко примера.
  • Coccinelle вече може да бъде извикан чрез make target "coccicheck" - програма за анализ на семантичен код, която може да облекчи програмистите от работа при рефакторинг на код. Подробности за възможностите са предоставени от документацията на ядрото и статия, публикувана на LWN.net през пролетта на миналата година.

Малките перли

Много незначителни, но в никакъв случай незначителни промени могат да бъдат намерени в следващия списък с английските заглавия на съответните промени. Подобно на много от препратките в предишния текст, записите водят към уеб предния край на клона на Git, поддържан от Linus Torvalds, с "официалните" източници на ядрото на Kernel.org. Коментарът за фиксиране, показан чрез тези връзки и издадената под него кръпка предоставят много повече информация за съответните промени.

Преди всяка връзка има няколко букви и цифри в квадратни скоби. "C" идентифицира кръпки с промени в Kconfig файлове, които съдържат помощни текстове и опции за конфигуриране, които се показват по време на конфигурацията на ядрото чрез "make menuconfig", "make xconfig" и подобни инструменти. "D" означава кръпки, които променят документацията, която се намира в клона на ядрото под Документация /. „N“ означава промени, които създават нов файл. Числото дава грубо впечатление за размера на пластира: „1“ означава промени, които са между 10 и 20 KByte, включително коментари, „2“ за тези, които са с размер между 20 и 30 KBytes; Промените без номер са по-малки от 10 KB, докато корекциите с "9" са 90 KB или по-големи.

Код за отстраняване на грешки, мониторинг на ефективността и проследяване