от task_struct(6-04-2014)

На 30 март 2014 излезе Линукс ядро 3.14

Основните нововъведения в него са:

  • SCHED_DEADLINE за по-добра поддръжка на реално-времево управление на процесите
  • zram - механизъм за компресиране на паметта
  • Btrfs - поддръжка на свойства в inode-овете
  • Събитията от трасиране на ядрото вече могат да стартират "команди"
  • probe-ите в потребителското пространство вече могат да достъпват всички аргументи
  • Валидатор на заключвания в потребителското пространство
  • Рандомизация на адресното пространство в ядрото
  • Автоматично групиране на малки пакети в TCP
  • Нов мрежов пакетен диспечър
  • Kernfs

SCHED_DEADLINE за по-добра поддръжка на реално-времево управление на процесите

Операционните системи традиционно предоставят приоритизация на процесите при разпределението на процесорното време. Колкото по-голям приоритет има един процес, толкова повече процесорно време ще получи спрямо процесите с по-нисък приоритет. В Линукс, потребителите обикновено слагат приоритете на стойности между -20 и 19 като използват командата nice(2) В допълнение в Линукс съществува и понятието "диспечерен клас". Всеки такъв клас предоставя различен начин за разпределяне на процесорното време. На пример, класа SCHED_FIFO ще разпредели времето на принципа "първи влязъл, първи излязъл", а SCHED_RR раздава на всички процеси еднакво време за изпълнение и ги сменя в кръг един след друг. Подходът с приоритетите, обаче, не е много подходящ за реално-времеви задачи. Компаниите Evidence Srl и ReTiS Lab са създали алтернативен дизайн около концепцията за реално-времева задача - разпределение с краен срок. Този дизайн е имплементиран, чрез новият клас SCHED_DEADLINE. Разпределението с краен срок премахва идеята за приоритети на процесите. Вместо това, всеки процес предоставя три параметъра време за изпълнение, период и краен строк. На задача от класа SCHED_DEADLINE и се гарантира, че ще получи "време за изпълнение" микросекунди на всеки "период" микросекунди, и тези "време за изпълнение" микросекунди са на достижими до "краен срок" микросекунди от началото на периода. Диспечерът на процесите използва тази информация за да изпълни процеса с най-скорошен краен срок, поведение, близко до изискванията за реално-времеви системи. За повече информация за алгоритъма можете да прочетете документацията.

zram - механизъм за компресиране на паметта

zram предоставя блокови устройства в RAM-а. Всичко, което се запива с тези устройства се компресира. Ако zram устройство се използва като swap, системата ефективно ще компресира паметта, която се опитва да запише в swap-а. Това ефективно работи като евтин механизъм за компресиране на паметта с цел да се подобри реакцията на системи с ограничено количество памет. Zram се използва в телевизори, Android 4.4, Cyanogenmod, Chrome OS, Lubuntu и други.

Btrfs - поддръжка на свойства в inode-овете

В тази версия на ядрото става възможно да се добавят двойки име-стойност към inode-овете. Това става чрез xattr. Целта на тези двойки е да се съхраняват свойства за inode-овете, като компресия на пример. Тези свойства могат да се наследяват. Това значи, че ако директория има свойство в inode–а си, което може да се наследява, това свойство се добавя към всеки нов inode в тази директория. Под-дяловете също могат да имат асоциирани свойства и те могат да бъдат наследени от родителският поддял. С тази версия е добавено едно специално свойство "compression", което може да има стойности "lzo" или "zlib" и да бъде наследявано.

Събитията от трасиране на ядрото вече могат да стартират "команди"

Probe-ите са набор от инструменти за събиране на дебъг информация или измерване на производителността на ядрото. Разработчиците и системните администратори често ги използват за дебъгване на ядрото или намиране на проблеми.
Тази система позволява лесно да се регистрират probe функции като събития( за повече информация вижте Documentation/trace/events.txt). В 3.14 е добавена възможност тези събития да стартират "команди". Командите могат да имат различни форми. На пример, при събитие може да се пускат или спират други събития или да се покаже програмния стек в момента на настъпване на събитието. Също така могат да се добавят и филтри на събития. Дадена команда ще бъде стартирана само ако събитието, което я предизвиква мине през филтъра. На пример, следният код показва програмния стек първите 5 пъти, когато kmalloc е извикан с размер по-голям или равен на 64К: # echo 'stacktrace:5 if bytes_req >= 65536' > \ /sys/kernel/debug/tracing/events/kmem/kmalloc/trigger

probe-ите в потребителското пространство вече могат да достъпват всички аргументи

В Линукс 3.5 беше добавена възможност за използване probe-и в приложения, работещи в потребителското адресно пространство. Сега вече могат да се достъпват всички видове данни: памет, стек, битови полета и други.

Валидатор на заключвания на мутекси в потребителското пространство

От версия 2.6.18 ядрото има инструмент, с който могат да се намират проблеми, свързани със заключени мутекси по време не изпълнение. От 3.14 този инструмент може да се стартира и използва за намиране на проблеми в приложения, изпълнявани в потребителското пространство.

Рандомизация на адресното пространство в ядрото

Друга новост е възможността за избиране на случайни физически и виртуални адреси при декомпресиране на ядрото. Това позволява да се спрат атаките към ядрото, базирани на знания, къде в паметта се намират негови важни функции.

Автоматично групиране на малки пакети в TCP

Когато дадено приложение прави множество малки последователни системни извиквания write()/sendmsg(), ядрото ще се опита да ги събере възможно най-много, за да намали броят на изпратени пакети. Това действие се нарича автоматично групиране ("automatic corking"). Групирането се прави само ако вече има поне един пакет за това приложение в Qdisc опашката или в опашката за изпращане на устройството. Приложенията все още могат да използват TCP_CORK флага в setsockopt() за постигане на оптимални резултати. Също така е добавен и нов sysctl (/proc/sys/net/ipv4/tcp_autocorking) за управление като по подразбиране автоматичното групиране е пуснато.

Нов мрежов пакетен диспечър

"Bufferbloat" е ситуация, при която голямото количество буфери, предавани по мрежата, могат да причинят висока латентност и насичане. С нарастването на броя на интерактивните приложения ( VoIP, видео, финансови операции и др. ), този проблем се засилва и може да причини спад в производителността. Съществуват редица подобрения в мрежовият стек на ядрото, които се опитват да решат този проблем. С 3.14 идва и нов пакетен диспечер - PIE(Proportional Integral controller Enhanced), който може ефективно да контролира средната латентност на опашките от буфери до определена стойност. Симулации, теоретични анализи и реални тестове показват, че PIE успява да осигури ниска латентност и да постигне високо оползотворяване на мрежовата връзка в множество ситуации.

Kernfs

Kernfs e част от sysfs логиката, отделена в независим модул, така че другите подсистеми в ядрото да могат бързи и лесно да създават свои виртуални файлови системи.

Източник: kernelnewbies.org


<< TuxCon - FOSS конференция търси лектори | 25 години Интернет >>