PRKernel

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

Линус Торвалдс почиства кода за копиране на x86 памет за Linux 6.4

Linux ядро

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

Линус Торвалдс миналата седмица обедини своя клон „x86-rep-insns“ в ядрото за прозореца за сливане на Linux 6.4. Фокусът на кода на Torvalds за Linux 6.4 е да изчисти кода за копиране на x86 памет. обясни в Git сливане:

Това изчиства голяма част от нашия код за копиране на памет x86, особено за потребителски достъп. Дълго време настоявам за внимателна поддръжка на архитектурата за копиране и изтриване на паметта и се вижда колко агресивно ядрото използва rep movs’ и „rep stos“, когато е възможно.

И тази микроархитектурна поддръжка се е подобрила през годините до точката, в която в модерен CPU най-добрият вариант за екземпляр на паметта, който би се превърнал в извикване на функция (за разлика от нещо, което може да бъде прехвърлено само в индивидуални инструкции за „преместване“) сега е вместо това да включва последователността от низови инструкции.

Това обаче има смисъл само когато разполагаме със съвременните тагове за това: възможности за x86 FSRM и FSRS („Fast Short REP MOVS/STOS“).

Така че това изчиства голяма част от нашия исторически код, отървава се от използването на стария флаг („REP_GOOD“ и „ERMS“) от състоянията на memcpy/memset и го заменя с тази съвременна реалност. Обърнете внимание, че REP_GOOD и ERMS все още се използват от известни големи случаи (напр. изчистване на стека от страници).

Причината голяма част от това да е свързана с потребителския достъп до паметта е, че нормалните състояния вътре в ядрото се извършват от компилатора (__builtin_memcpy() и __builtin_memset()) и стигаме до точката, в която можем да използваме нашето пренаписване на инструкции, за да включим тези заявява, че инструкциите за низ ще трябва да поддържат някаква поддръжка на компилатор.

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

Прозорецът за консолидация на Linux 6.4 остава отворен до края на следващата седмица, тъй като продължава да се пуска още код на функции.