от task_struct(6-01-2011)

На 4-ти януари, 2011г, излезе Линукс ядро 2.6.37

Новостите са:

1. Ext4 - по-добра SMP скалируемост и по-бърз mkfs

  • По-добрa SMP мащабируемост: В тази версия Ext4 използва "bio" слоя директно, вместо междинния буферен слой, който имаше доста проблеми с производителността и скалируемостта при SMP системи. "Bio" слоят (съкратено от Block I/O) е част от ядрото, която изпраща заявки към IO/O диспечъра и беше една от първите въможности, вкарани в ядро 2.5.1.
  • По-бърз mkfs: Един от най-бавните моменти при създаването на нова файлова система Ext4 е инициализирането на inode таблиците. mkfs може да избегне тази стъпка и да остави inode таблиците неинициализирани. Когато новата файлова система е монтирана за първи път, ядрото пуска нишка (ext4lazyinit), която инициализира тези таблици.

2. Премахнат е BKL (Big Kernel Lock)
BKL е гигантско заключване на ядрото, което се появява във версия 2.0, когато Алън Кокс вкарва поддръжката на SMP. Но това е било само една стъпка за постигане на SMP скалируемост - само един процес е можел да изпълнява код от ядрото в даден момент в Линукс 2.0. В далечна перспектива е трябвало BKL да се замени с по-малки заключвания на части от ядрото, с цел множество процеси да могат изпълняват отделните части паралелно. В тази версия вече е възможно да се компилира ядро без поддържка на BKL. Трябва да се отбележи, че това няма да се отрази на бързодействието, тъй като всички критични пътища(codepaths) са независими от BKL от доста време. BKL все още се използваше в доста некритични места като ioctl-и, драйвъри, някои файлови системи и други. Точно тези места са изчистени в тази версия и са заменени с мутекси, които не подобряват паралелизма.

3. Ceph-базирано мрежово блоково устройство
Ceph е разпределена мрежова файлова система, която се появи в ядро 2.6.34. В дизайна на Ceph има "object storage devices" и "metadata servers", които съхраняват метаданни за обектите. Ceph използва тези 2 неща, за да реализира своята файлова система, но тези обекти могат също да се използват за имплементиране на мрежово блоково устройство (или дори Amazon S3, съвместимо съхранение на обекти).
В тази версия на ядрото се появява блоковото устройство Rados(RDB). RBD ви позволява да създадете блоково устройство, което е разпределено по обектите, съхранявани в Ceph. В контраст с алтернативи като iSCSI или AoE, RBD изображенията са разпределени и дублирани из Ceph клъстер. Това предоставя надежност (ако един възел откаже, системата продължава да работи ), скалируемост и прецизна настройка на достъпа до съхраняваните обекти.

4. Възможност за ограничаване на I/O трафика
Това прави възможно да се определи горна граница за четене / запис на група от процеси, което може да бъде полезно в много случаи. Пример:

Монтиране на cgroup blkio контролера 
# mount -t cgroup -o blkio none /cgroup/blkio

Задаване на лимит за дадено усройсто на root групата. ФорматЪТ е следният ":  "
# echo "8:16  1048576" > /cgroup/blkio/blkio.read_bps_device

Това ще сложи лимит от 1MB/секунда при четене от процес от root групата на устройство с major/minor номер 8:16.

Ограниченията могат да бъдат зададени в IO операции в секунда (blkio.throttle.read_iops_device). Също така има и еквиваленти при писане - blkio.throttle.write_bps_device и blkio.throttle.write_iops_device. Тази функционалност не замества IO weight контролера, който се появи в 2.6.33.

5. "Jump label": изключените точки за следене не се отразявт на производителността
Точките за следене могат да бъдат описани като специални printf() извиквания, които се използват в ядрото за да показват информация. Тази информация впоследствие се използва от инструменти като perf, LTT или systemtrap, за да анализират поведението на системата. Има два вида такива точки - динамични и статични. Динамичните точки променят кода на ядрото по време на изпълнение, като вмъкват процесорни инструкции, където е необходимо за то на данните. Те са известни още и като kprobes и натоварването от тяхното използване бе оптимизирано в Линукс 2.6.34.
Статичните точки, от друга страна, са създадени от разработчиците на ядрото при писането му. Те са разположени на стратегически места в кода. За пример, Ext4 има 50 стратични точки. Тези точки се компилират с останалата част от кода на ядрото и по подразбиране са изключени (функцията не се извиква), докато някой не ги активира. Но винаги има един if, който определя дали точките са включени. Това намалява малко производителността на система , но все пак е по-добре да се оптимизира, а точно това прави "jump label". На мястото на тестването на условието се слага машинната инструкция "no operation", така че изключените статични точки вече не забавят системата. (Съвет: Можете да използвате командата "sudo perf list", за да видите пълния списък на статичните точки във вашата система).

6. Подобрения в управлението на захранването.

  • Компресирането на образа за хибернация вече се прави със LZO.
  • Забавено автоматино спиране на устройствата. Тази функционалност подобрява управлението на захранването по време на работа на системата, което беше добавено в 2.6.32. Някои драйвъри не искат устройството, което управляват, да спре веднага, щом не се използва по време на работа на системата. Те искат устройството да остане неактивно за някакво минимално време и чак след това да заспи.

7. Поддръжка на PPP през IPv4 (PPTP)
С тази промяна драстично са ускорени PPTP VPN връзките и е намалено използването на процесорно време в сравнение със съществуващите до сега имплементации на протокола в потребителското пространство(poptop/pptpclient).

В новата версия също има множество подобрения по Btrfs и Perf probe. Също така вече е налично и Fanotify API.



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


<< Курс "Въведениe в Qt" | Честита Нова Година >>