Объявляем о втором испытании происхождения Compute Pressure

Кеннет Кристиансен
Kenneth Christiansen
Arnaud (Arno) Mandy

В течение прошлого года Intel сотрудничала с Google и другими сторонами в разработке API Compute Pressure API. В Chrome 115 вы можете зарегистрироваться для участия в пробной версии Origin , чтобы протестировать этот новый API. В этом посте объясняются проблемы, для решения которых был разработан API, и показано, как его использовать.

Проблема

Интернет становится ключевой платформой приложений, а новые возможности делают такие приложения, как видеоконференции, не просто возможными, но и приятными для пользователей. Веб-интерфейсы загружаются мгновенно, они доступны откуда угодно и не требуют предварительной установки.

Пользователям нужны быстро загружающиеся и отзывчивые приложения. Они также хотят максимально эффективно использовать время автономной работы и использовать бесшумные устройства, к которым не будет жарко прикасаться. Иногда этого бывает сложно достичь при создании расширенных возможностей, поскольку плавная анимация и размытие фонового видео требуют много вычислительной мощности, нагружая аппаратное обеспечение до предела и разряжая аккумулятор.

Кроме того, для доступа к веб-приложениям используется огромное количество устройств. Возможности пятилетнего ноутбука будут сильно отличаться от нового настольного компьютера, даже при использовании той же версии браузера.

Разработчики часто предпочитают разрабатывать наименьший общий знаменатель, избегая использования некоторых функций, которые могут обременить старые или менее функциональные устройства. Однако, если бы можно было оптимизировать работу для пользователей, у которых есть мощное оборудование и которые находятся в подходящей среде, чтобы извлечь из него выгоду, почему бы не сделать это? Например, при присоединении к видеовызову с телефона, скорее всего, лучше всего просто увидеть текущего говорящего. Однако на настольном компьютере было бы неплохо видеть всех участников разговора, и оборудование обычно справляется с этой задачей. Чтобы добиться этого, вам нужна аппаратная телеметрия в реальном времени, без ущерба для конфиденциальности пользователей, которую можно использовать для планирования задач и постепенного включения и выключения функций, чтобы обеспечить бесперебойную работу пользователя. Здесь может помочь API Compute Pressure.

Что такое API вычисления давления?

API Compute Pressure предлагает состояния высокого уровня, которые отражают нагрузку на систему. Эти состояния высокого уровня обеспечивают хороший баланс между конфиденциальностью (неразглашением слишком большого количества конкретной информации, которая могла бы идентифицировать пользователя) и информацией, о которой разработчики могут легко рассуждать. Кроме того, это позволяет реализации использовать правильные базовые аппаратные метрики, чтобы пользователи могли использовать всю доступную им вычислительную мощность, пока система не находится в неуправляемой нагрузке.

Современные процессоры, например, спроектированы так, чтобы в большинстве ситуаций нормально работать при 100% загрузке, на одном ядре или на всех ядрах, поэтому API, который жестко запрограммировал загрузку 80% как критический, может привести к тому, что разработчики будут недостаточно использовать возможности оборудования и предлагая неоптимальный пользовательский опыт. С другой стороны, система может не иметь надлежащего охлаждения или температура окружающей среды может быть очень высокой, как летом, и система может дросселировать еще до достижения высокой загрузки ЦП. Текущий API работает с глобальной нагрузкой на ЦП, но мы планируем поэкспериментировать с включением нагрузки на ЦП на страницу в основном потоке и рабочих процессах.

Вычислительное давление имеет следующие состояния:

  • Номинально: текущие рабочие нагрузки оказывают минимальное давление, что позволяет системе работать на более низкой тактовой частоте для экономии энергии.
  • Удовлетворительно: система работает нормально; все гладко, и он без проблем может выполнять дополнительную работу.
  • Серьезно: на систему оказывается серьезное давление, но оно поддается контролю, и система работает хорошо, но, возможно, приближается к своим пределам:
    • Тактовая частота (в зависимости от мощности переменного или постоянного тока) неизменно высока.
    • Термики высокие, но все же управляемые и не вызывающие дросселирования.

На этом этапе, если вы добавите дополнительную работу, система может перейти в критическое состояние.

  • Критическое: система вот-вот достигнет своих пределов, но еще не достигла предела. Критическое не означает, что система активно регулируется, но это состояние не является устойчивым в долгосрочной перспективе и может привести к регулированию, если рабочая нагрузка останется прежней. Этот сигнал является последним призывом к веб-приложению облегчить свою рабочую нагрузку.

Включите API вычисления давления

По умолчанию API Compute Pressure не включен в Chrome, но с ним можно поэкспериментировать в Chrome 115, явно включив эту функцию. Вы можете активировать его локально, включив флаг enable-experimental-web-platform-features .

Чтобы включить эту функцию для всех посетителей вашего приложения, в настоящее время проводится пробная версия Origin , которая завершится в Chrome 118 (18 июля 2023 г.). Чтобы принять участие в пробной версии, зарегистрируйтесь и включите мета-элемент с токеном исходной пробной версии в HTML- или HTTP-заголовок. Дополнительную информацию можно найти в публикации «Начало работы с пробными версиями Origin» .

Наблюдайте за вычислительным давлением

Следующий фрагмент кода иллюстрирует, как отслеживать и реагировать на изменения вычислительной нагрузки:

// The `records` parameter is a sequence of records between two
// consecutive callbacks. Currently it contains ten entries, but
// this is an implementation detail.
function callback(records) {
  const lastRecord = records.pop();
  console.log(`Current pressure ${lastRecord.state}`);
  if (lastRecord.state === 'critical') {
    // Reduce workers load by 4.
  } else if (lastRecord.state === 'serious') {
    // Reduce workers load by 2.
  } else {
    // Do not reduce.
  }
}

const observer = new PressureObserver(callback, {
  // Sample rate in Hertz.
  sampleRate: 1,
});
observer.observe('cpu');

В следующем фрагменте кода показано, как использовать API Compute Pressure из iframe:

<iframe src="https://mysite.com/" allow="compute-pressure">
  <script>
    // Use Compute Pressure API.
  </script>
</iframe>

Поддержка платформы

API Compute Pressure доступен в Chrome 115 для Linux, ChromeOS, macOS и Windows.

Демо

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

Если ваш браузер не поддерживает API, на видео ниже показана запись демо-версии.

Обратная связь

На этом этапе очень важна обратная связь с разработчиками, поэтому сообщайте о проблемах на GitHub с предложениями и вопросами.

Благодарности

Образ героя был создан Робертом Анашем на Unsplash . Эта статья была рецензирована Рэйчел Эндрю и Томасом Штайнером .