Ядрото на Linux най-накрая превръща функцията Time Stamp Counter (TSC) в задължително изискване за x86 процесорите, повече от десетилетие след като Microsoft започна да я предлага като предпочитана основа за синхронизация с висока резолюция на подходящи системи с Windows.

Неотдавнашна промяна, въведена в ядрото на Linux премахва останалата конфигурационна логика, която позволяваше ядрото за x86 да се компилира без поддръжка на TSC. Промяната, озаглавена „x86/cpu: Make CONFIG_X86_TSC unconditional“ прави поддръжката на TSC задължителна, тъй като се очаква останалите поддържани x86 процесори да разполагат с тази функция.

Това може да звучи като сравнително незначително почистване на ядрото, но бележи края на една ера за поддръжката от Linux на изключително стар x86 хардуер.

За тези, които не са запознати, TSC е специален 64-битов регистър, който действа като брояч на процесора и съществува още от ерата на Intel Pentium. Той осигурява начин за измерване на изминалото време с висока резолюция (с изключително висока прецизност) и достъпът до него е много по-бърз (тъй като е просто регистър на процесора) в сравнение с таймерите на платформата, като HPET (High Precision Event Timer) или таймерът за управление на енергопотреблението (ACPI PM).

Подобряването на производителността винаги е било ключов показател за напредъка на софтуера и хардуера, затова е логично защо TSC получи приоритет. Поради това днес всеки модерен процесор на Intel и AMD разполага с 64-битов TSC, който може да се чете чрез инструкции като RDTSC и RDTSCP.

Интересно е, че Microsoft достигна подобен етап много по-рано, въпреки че ситуацията с Windows е съвсем различна. Windows въведе QueryPerformanceCounter (QPC) с Windows 2000 и Windows XP като брояч на производителността с висока резолюция. По-старите системи можеха да имат проблеми с неинвариантни или несинхронизирани TSC, така че Windows можеше да използва платформени таймери като HPET или ACPI PM таймера, когато TSC на процесора беше неподходящ.

Windows 7 и Windows Server 2008 R2 вече използваха TSC с постоянна честота като основа за QPC в системи, в които отделните броячи на процесорите можеха да бъдат синхронизирани. Microsoft отиде още по-далеч с Windows 8, Windows 8.1 и съответните им сървърни версии, които използват TSC като основа за брояча на производителността и въведоха подобрена синхронизация за по-големи системи. Въпреки това Microsoft все още документира проверки за инвариантни и синхронизирани TSC и посочва, че Windows може да избере друг хардуерен таймер, когато TSC е неподходящ. Компанията също така предупреждава разработчиците да не четат директно TSC и препоръчва вместо това QPC, тъй като абстракцията се справя с разликите в хардуера и виртуализацията.

Има основателна причина за предпочитанието на Microsoft, когато TSC е използваем, тъй като според компанията четенето на QPC, базиран на TSC може да отнеме само десетки до стотици цикли на процесора, докато преминаването към таймер, базиран на дънната платка, може да увеличи разходите до приблизително 0,8–1,0 микросекунди, а това е значително. QPC, базиран на TSC, може също така да избегне преход на ядрото, нещо, което не е възможно, когато Windows трябва да използва алтернативи като HPET или таймера на PM.

Вследствие на това Linux от години се занимава с откриването, калибрирането и заобикалянето на проблемите с надеждността на TSC. Сега обаче една от най-старите части от този код за съвместимост най-накрая се премахва. Можете да видите промяната тук в Git хранилището на ядрото на Linux.