Linux наконец-то следует примеру Windows и делает обязательным требование к функции CPU

Linux Tsc X86 ядро процессоры Windows neowin.net

Linux наконец делает обязательным давно ожидаемый аппаратный компонент TSC, следуя пути Windows. Узнайте, как это упростит ядро и повлияет на старые системы.

Ядро Linux наконец делает счётчик временных меток (TSC) обязательным требованием для процессоров x86 — спустя более десяти лет после того, как Microsoft начала использовать его в качестве предпочтительной основы для высокоточного измерения времени в подходящих системах Windows.

Недавнее изменение, внесённое в ядро Linux, удаляет оставшуюся логику конфигурации, которая позволяла собирать ядро x86 без поддержки TSC. Коммит под названием «x86/cpu: Сделать CONFIG_X86_TSC безусловным» делает поддержку TSC обязательной, поскольку теперь ожидается, что все поддерживаемые процессоры x86 будут иметь эту функцию. Это может показаться относительно незначительной чисткой ядра, но это знаменует собой конец эпохи поддержки Linux для чрезвычайно старого оборудования x86.

Для тех, кто интересуется: TSC — это специальный 64-битный регистр, который выступает в роли счётчика процессора и существует со времён эпохи Intel Pentium. Он обеспечивает высокоточный (очень мелкозернистый) способ измерения прошедшего времени и может быть доступен гораздо быстрее (поскольку это просто регистр ЦП), чем такие таймеры платформы, как HPET (High Precision Event Timer) или таймер ACPI PM (управления питанием).

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

Однако исторически Linux приходилось сохранять код для процессоров, которые либо не имели TSC, либо не могли надёжно его использовать. Это было в значительной степени связано с тем, что ядро продолжало поддерживать оборудование, уходящее корнями в эпоху i486. Однако эта нагрузка становилась всё более ненужной по мере удаления поддержки таких процессоров.

Linux 7.0 прекратил поддержку процессоров Intel 486, а следующий цикл разработки удалил поддержку дополнительных процессоров, которые не позволяли считать TSC общедоступным. С исчезновением этих ЦП ядро теперь может безопасно предполагать, что процессор x86 имеет TSC.

Таким образом, новое изменение связано не столько с тем, чтобы внезапно сделать Linux зависимым от функции, которой нет у современных ПК, сколько с окончательным удалением кода совместимости, который был необходим на протяжении десятилетий.

Интересно, что 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.

Всегда имейте в виду, что редакции могут придерживаться предвзятых взглядов в освещении новостей.

В тренде:


Похожие новости: