Перейти к содержимому

Latency что это

  • автор:

Что такое latency

Определение „latency” — это общий термин, обозначающий особенно в широко понимаемых системах информатики, всякого рода задержку во время исполнения заданных операций. Переходя на слишком выше уровень уточнения, а именно к вопросом компьютерных сетей, как „latency” определяется всякого рода простои и задержки, которые возникают во время трансмисии пакетов данных, а также в процессе переработки полученных или приготовленных к высылке данных. Часто можно также встретить понятие «лаг» („lag”), особенно популярное в кругах любителей компьютерных игр (игры онлайн через Интернет), и людей интенсивно использующих услугу IRC. Столь же популярное на компьютерном жаргоне является определение „ping”, используемое взаимозаменяемо с «лагом». Однако, оно не до конца правильное, потому что нинг — это один из основных инструментов до оценки задержок трансмиссии в сети.

Стоимости задержок зависят от многих факторов. В чётко работающей локальной сети, в которой существует относительно небольшое движение, которое является дробью максимальной пропускной способности трансмиссионного медиума (напр. 100 МБ/с при типических кабелях в виде витой пары кат. 5), задержка меньше чем 1 миллисекунда. Используя интернет-ретрансяторы, средние стоимости могут заключаться в разделе с нескольких десятков миллисекунд до даже нескольких секунд. Постольку в случае типичной интернет-деятельности, напр. пересматривания сайтов, дискуссии на чатах, получения файлов или высылки и-мейлов, несколько-секундные «лаги» не являются очень надоедливыми, поскольку в ситуациах, где требуется скорый ответ сервера, вопрос обстоит совершенно по-другому. Примеры применений этого типа представляются в т. ч. следующим образом:

• Компьютерные игры — практика показывает, что задержки ряда 100 миллисекунд — ещё приемлемые, выше этого предела, особенно для игр со скорым действием, такие «лаги» могут затруднить розыгрыш.
• Видео — осмотр фильмов онлайн, напр. из сервиса Youtube требует относительно высокую, постоянную пропускную способность. Задержки трансмиссии данных ряда 300 — 500 миллисекунд могут стать причиной прекращения фильма, потери синхронизации на линии звук-изображение, или в некоторых случаях вызывать деформации изображения.
• Телеработа, особенно с графическим десктопом — задержки ряда одной секунды неоднократно вызывают срыв связи и необходимость её повторного установления. Стоимости, колебающиеся вокруг 300 миллисекунд отчётливо влияют на снижение комфорта работы.

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

• Низко производительное програмное обеспечение сервера электонной почты — в случае большого количества и-мейлов переработка одиночного сообщения понимается как промежуток времени между получением и-мейла сервером и его помещением в приёмный ящик пользователя, и может продолжаться даже до нескольких десятков минут, где типичный сервер SMTP употребляет на это действие несколько миллисекунд.
• Ошибки в контроллерах сетевых карт — некоторые дешёвые сетевые карты имеют ошибки в своих системных контроллерах, которые вызывают изрядные задержки в трансмиссии данных. Часто вследствие несоблюдения стандартов, касающихся формообразования пакетов, доступа в трансмиссионый медиум или сотрудничества с ядром операционной системы. С точки зрения конечного пользователя, сетевая карта с ошибочно написанным контроллером имеет очень низкую пропускную способность, очень долгое время ожидания установления связи (до нескольких десятков секунд, независимо от параметров ретранслятора, используемого коммуникационного протокола, и других качеств), а также вообще отрицательное влияние на стабильность операционной системы.
• Програмное обеспечение, которое не успевает к переработке прибывающих данных. Это слишком другая ситуация, чем в случае свободного сервера электронной почты, потому что связывается со слишком низкой расчётной мощью компьютера. Случаи этого рода можно заметить при пробе осмотра фильма онлайн по компьютеру со сильно устарелой конфигурацией. Несмотря на распоряжение ретранслятором с теоретической пропускной способностью, значительно превышающей требования фильма, его осмотр может оказаться затруднённым в связи с техникой, не успевающей за декодированием отдельных клеток так, чтобы пользователь получил плавное изображение.

Время ожидания (latency)

Latency (дальше — время ожидания) — это время, которое требуется на доставку пакета данных от источника к пункту назначения. В деле оптимизации производительности важно сокращать проблемы, которые приводят к длительному времени ожидания. Также необходимо научиться тестировать работу приложения в условиях плохого соединения. В этой статье мы рассмотрим само понятие времени ожидание, его причины, способы детекции и исправления.

Что такое «время ожидания»?

Время ожидания — это промежуток времени, который проходит с момента старта запроса до момента получения ответа. При запросе первых 14КБ время ожидания дольше, потому что весь запрос включает в себя DNS запрос, соединение TCP handshake (en-US), установление безопасного соединения TLS. Последующие запросы будут иметь меньшее время ожидания, так как соединение с сервером уже установлено.

Время ожидания описывает величину задержки сети или, в частности, интернет-соединения. Малое время ожидания подразумевает едва заметные задержки. Большое время ожидания подразумевает большие задержки. Одно из основных усилий в оптимизации приложения должно быть направлено на снижение этого времени ожидания.

Улучшить время ожидания, связанное только с одним ресурсом, например, с HTML кодом страницы — это довольно просто. Но приложения, как правило, состоят из множества запросов: CSS, JavaScript-файлы, медиа. Чем больше запросов исходит со страницы, тем большее влияние оказывает время ожидания на общие впечатления пользователя.

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

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

Эмуляция времени ожидания

Для эмуляции большой времени задержки вы можете использовать средства разработчика. В англоязычных интерфейсах эмуляция называется «Throttling».

Emulate latency by emulating throttling

В Firefox кнопка переключения находится на панели Network (Сеть), в заголовке таблицы. С помощью инструмента вы можете испытать работу приложения в сетях от GPRS до высокоскоростных. Также вы можете сами указать скорость загрузки и время ожидания. Браузеры предоставляют разные наборы значений, но, как правило, все они покрывают перечисленные ниже случаи:

Selection Download speed Upload speed Minimum latency (ms)
GPRS 50 Kbps 20 Kbps 500
Regular 2G 250 Kbps 50 Kbps 300
Good 2G 450 Kbps 150 Kbps 150
Regular 3G 750 Kbps 250 Kbps 100
Good 3G 1.5 Mbps 750 Kbps 40
Regular 4G/LTE 4 Mbps 3 Mbps 20
DSL 2 Mbps 1 Mbps 5
Wi-Fi 30 Mbps 15 Mbps 2

Временные показатели сети

Кроме того, во вкладке Network (Сеть), вы можете изучить, как много времени занял тот или иной запрос. На изображении ниже — пример загрузка SVG файла размером 267.5КБ.

The time it took for a large SVG asset to load.

Когда запрос находится в очереди, ожидая установки соединения с сервером, он считается заблокированным. Блокировка случается, когда браузер уже обрабатывает слишком много соединений одновременно (в большей степени это относится к предыдущему поколению HTTP1.1, который позволял поддерживать до 6 соединений за раз). Пока все соединения обрабатываются, браузер не может загружать другие ресурсы. Как только загрузка ресурса завершается — соединение освобождается.

DNS поиск (DNS resolution) — это время, которое требуется на DNS lookup. Это процесс, когда браузер находит соответствие между именем домена и его IP-адресом. Если вы обращаетесь ко многим доменам, DNS поиск занимает больше времени.

Установка соединения (Connecting) — это время, требуемое на TCP handshake (en-US). Это процесс SYN — ACK, когда браузер и сервер договариваются о формате соединения. Как и DNS, чем больше соединений к разным серверам вы используете, тем больше время создания соединений.

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

Отправка (Sending) — время, необходимое для отправки HTTP запроса на сервер.

Ожидание (Waiting) — это ожидание обработки запроса сервером. Например, вы хотите получить изображение. В этом случае сервер должен обратиться к файловой системе, найти файл, передать его HTTP соединению. В случае сложных динамических запросов процесс может занимать секунды и минуты. Это ещё одно место для оптимизации, но уже не клиентское, а серверное.

Получение (Receiving) — это время на загрузку ответа. Этот показатель — комбинация скорости сети и размера файла. Если изображение было закешировано, то его загрузка может произойти мгновенно. Но если не использовать кеш и включить эмуляцию медленной сети, изображение может загружаться 43 секунды!

Измерение времени ожидания

Время ожидания сети (Network latency) — это время, которое требуется на отправку запроса и полную загрузку ответа.

Время ожидания диска (Disk latency) — это время, которое требуется устройству на то, чтобы получить запрос, понять его, найти файл в файловой системе и вернуть ответ.

Found a content problem with this page?

  • Edit the page on GitHub.
  • Report the content issue.
  • View the source on GitHub.

This page was last modified on 3 авг. 2023 г. by MDN contributors.

Algo & DMA: технологии биржевой торговли

Биржевые технологии, алгоритмическая торговля, Java и программирование

Что такое latency? Low latency? Ultra-low latency?

Для понимания понятия latency возьмем простой пример. Представьте себе некий «черный ящик» с одним входом и одним выходом. Вы подаете сигнал на вход и ожидаете появление сигнала на выходе. При проведении экспериментов вы замечаете, что при подаче сигнала на вход сигнал на выходе появляется через 1 секунду. Причем это происходит постоянно с отклонением +/- 10 миллисекунд. То есть выдача сигнала на выходе происходит с определенной задержкой. Это и есть latency — время задержки.

Latency вокруг нас

close up of snail on ground

Формально latency — это время между произошедшим событием и реакцией на него.

Где-то в далекой-далекой галактике сейчас взорвалась сверхновая. Но мы узнаем об этом только через несколько сотен лет, когда свет от взрыва дойдет до Земли. Это latency в астрофизике.

На другом конце комнаты кто-то открыл банку с формалином. Запах формалина дошел до вас только через несколько минут. Это latency в физике газов.

Вы написали письмо другу и бросили его в почтовый ящик. Ваш друг получил его через месяц. Это latency Почты России.

Вы повернули выключатель, а свет в спортивном зале загорелся через несколько секунд, когда сработали все реле и разрядники газоразрядных ламп. Это latency в электротехнике.

Вы выпили стакан водки, а опьянели через несколько минут. Это latency в биологии.

Latency в IT

В компьютерных системах задержка latency присутствует на всех уровнях неотъемлемо, просто по самой природе компьютерных систем. Мы говорим о latency в памяти (время, когда данные на считывание были посланы в память, и когда они были реально считаны), latency в сети (время, когда данные были посланы в сеть, и когда они были приняты на другом конце), latency в приложении (время, когда произошло определенное действие, и когда произошла реакция на него: нажатие кнопки и выполнение действия на это нажатие).

Конечно программистам и пользователям хотелось бы, чтобы latency была равна 0: чтобы данные передавались по сети моментально, чтобы в память данные записывались тут же, чтобы по нажатии кнопки сразу получался результат. К сожалению против этого идеала работают сами законы физики (сигнал не может передаваться по сети быстрее скорости света, следствие не может наступить раньше причины), и ошибки программистов (неверно написанный код, неверно выбранные структуры данных, неверный дизайн, архитектура приложения, неверно выбранная платформа). Соответственно, задача программиста — сделать так, чтобы предложение не только работало, работало правильно и без ошибок, но также работало быстро и желательно настолько быстро, насколько это возможно для данных аппаратных и программных средств. Чем ниже latency, тем лучше.

Latency в финансах

Latency — главный объект, на который обращают внимание в финансовых торговых приложениях. Приложение не просто должно работать быстро, а должно укладываться в определенные временные рамки. Выход за эти временный рамки грозит убытками, либо упущенными возможностями.

Давно прошли те времена, когда торги осуществлялись вручную, ордера на биржу передавались по телефону, а цены биржевых сделок распространялись по телеграфу и выводились на ленту механическим тикером. Latency тогда исчислялась часами: вы видели текущую цену на тикере (tick), отправляли приказ (order) своему брокеру, брокер — маклеру на бирже, маклер на бирже исполнял ваш ордер (trade), перезванивал брокеру, а он вам. За это время рыночная цена акции конечно могла измениться, и ваш ордер мог быть исполнен вовсе не по той цене, которую вы видели час назад на ленте тикера. Этот феномен называется «slippage» (буквально «проскальзывание»), когда из-за latency вы получаете не мгновенное исполнение ордера и, соответственно, по другой рыночной цене, чем ожидали, или вообще не получаете никакого исполнения.

В настоящее время все торги ведутся компьютерами. На передачу рыночных данных и исполнение ордера тратятся уже не часы, а секунды, миллисекунды, микросекунды. Latency уменьшилась, но все равно не равна нулю. В этой гонке конкурентное преимущество получает тот, кто тратит на все операции принятия решения (tick-to-trade) меньше времени, чем другие. Медали за второе место в торгах не существует: кто первый отреагировал на новую цену в книге лимитных ордеров, на какую-то новость, на изменения на других рынках, на биржах в других странах и совершил сделку — тот и победитель. Проигравшему остается только надежда успеть совершить следующую сделку быстрее других.

Гонка за low latency

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

В 1997 году «low latency» означала задержку в 1 миллисекунду.

В 2005 году «low latency» — это 500 микросекунд.

В 2018 году, говоря о low latency, мы имеем в виду задержки уже порядка 100 микросекунд, не больше.

Ultra-Low Latency

pexels-photo-1537268.jpeg

Задержки порядка 10-20 микросекунд это уже ultra-low latency.

Задайте себе вопрос: можете ли вы написать приложение способное за 10-20 микросекунд обработать пришедший по TCP/IP пакет данных, разобрать его на значимые блоки, проанализировать их, на основании анализа сформировать рыночный ордер, закодировать его в FIX-сообщение, и послать его на биржу?

Каким языком программирования вы для решения этой задачи воспользуетесь? Какую операционную систему выберите? С какими настройками? На какой аппаратной платформе? С какими параметрами? С какой сетевой картой? С каким сетевым кабелем? Какой длины? Сколько времени у вас займет написание такой программы и сборка всей системы готовой для реальных торгов на бирже? В какой бюджет вы уложитесь? Как быстро вы сможете вносить изменения в эту систему и выкладывать ее в Production?

Почитать еще

  • О подходах оптимизации вообще
  • Об оптимизации на всех уровнях торговой системы, написанной на Java

Что такое latency (задержка)

Что такое latency (задержка) в звуке

Многие начинающие и даже опытные музыканты сталкиваются с различными проблемами в работе из-за задержки. Задержка — неотъемлимая часть любой студийной деятельности, как ни крути. Но не все понимают, что такое задержка (latency), откуда она берется и как ее побороть. Отличная статья на эту тему, раскрывающая всю суть вопроса, хранится на официальном сайте PreSonus — разработчика StudioOne. Собственно, на основе этой статьи и создан данный материал.

Матчасть

Для начала обратимся к Википедии (или школьному курсу физики), которая расскажет каждому школьнику о том, что скорость распространения звука в воздухе составляет 331 метр в секунду. За одну миллисекунду звук проходит расстояние, равное 0,331 метра. Не нужно быть семи пядей во лбу, чтобы догадаться, что абсолютно все звуки, которые мы слышим, достигают нас с некоторой задержкой. Задержка зависит от того, насколько далеко располагается источник звука от нашего уха. Плюс ко всему, скорость распространения звуковых сигналов может сильно меняться в зависимости от условий окружающей среды. Так, цифра в 331 м/с будет верной при температуре воздуха в 0 градусов по Цельсию.

sound-wave

Допустим, у нас есть некий источник звукового сигнала, который издает один и тот же звук с определенным промежутком времени. Если время между повторениями сигнала будет составлять от 20 до 30 миллисекунд, то человек сможет различить звуки. Если интервал между звуками будет на отметке от 12 мс до 15 мс, то человек не будет способен различить два отдельных звука, но почти наверняка почувствует что-то неладное. А если отставание звуков друг от друга будет в районе 10 мс, то большинство людей будут думать, что звук идет непрерывно. В зависимости от человека цифры могут меняться, но среднее их значение будет примерно такое, как описано выше.

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

Представим ситуацию, что музыкант находится дома и играет на гитаре через компьютер — гитара подключена к аудиокарте, в системе открыта некая DAW, в которой запущен Guitar Rig. При таком развитии событий человек со 100% вероятностью столкнется с задержкой. Если задержка будет больше 12 мс, то будет отчетливо слышно отставание реально извлеченного звука от того, что будет слышно в наушниках или мониторах компьютера. Играть с задержкой некомфортно, хотя и есть такие товарищи, которые спокойно могут играть при большем уровне задержки.

Что такое задержка (latency) в цифровых интерфейсах

Говоря максимально простым языком, задержка (latency) — это время, необходимое звуковому сигналу на прохождение пути от аналогового входа до аналогового выхода аудиоинтерфейса. Во время своего пути сигнал попадает на аналоговый вход, затем отправляется через аналого-цифровой преобразователь в рабочую станцию на компьютере, после чего через цифро-аналоговый преобразователь сигнал поступает на аналоговый выход. Путь не близкий, однозначно.

Прежде, чем попасть куда-либо дальше, любой аналоговый сигнал в современных аудиоинтерфейсах проходит через аналого-цифровой преобразователь (АЦП), главной задачей которого является перекодировка аналогового сигнала в цифровой. Не трудно догадаться, что с технической точки зрения это крайне сложный процесс. Среднее время выполнения перекодировки аналогового сигнала в цифровой составляет порядка 0,5 мс. На обратной стороне звук вновь пройдет через преобразователь, но цифро-аналоговый (ЦАП), который преобразует получившиеся цифровые значения обратно в аналоговый сигнал. Время обратного преобразования также находится на отметке около 0,5 мс.

Print

Не стоит забывать, что на пути сигнала встречаются несколько специальных буферов — областей памяти, используемых для временного хранения информации. Они активно используются в тех случаях, когда скорость получения данных и скорость обработки данных разнится между собой. Это позволяет достичь максимально точной обработки информации и избежать любых искажений сигнала, но за счет замедления вывода звука. Каждый буфер, в случае своего использования, увеличивает значение задержки на некоторое количество единиц времени. Примерами таких буферов служат входные и выходные буферы USB-шины, а также ASIO или Core Audio драйверов.

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

Presonus-MAC

Для облегчения данной ситуации разработчики драйверов предоставили возможность конечным пользователям самостоятельно изменять размер буфера. Уменьшение размера буфера может привести к уменьшению задержки за счет увеличения нагрузки на процессор компьютера. Увеличение буфера — к увеличению задержки, но меньшим нагрузкам на процессор и прочие компоненты системы. Таким образом, меньше размер буфера — меньше задержка, меньше стабильность системы; больше размер буфера — больше задержка, больше стабильность работы компьютера.

Как уменьшить задержку?

Большая часть пользователей, которые ищут в интернете, что такое задержка (latency), желают уменьшить ее размеры всеми доступными способами.

В наше время в 90% аудиоинтерфейсов можно найти функцию прямого мониторинга, которая выводит звуковой сигнал сразу на аналоговый выход в обход преобразователей. На выходе к сигналу добавляется выходной сигнал с компьютера. Прямой мониторинг позволяет избавиться от задержки, слышать аудиотрек и собственный сигнал одновременно, но за счет того, что исходный звук не будет подвергнут никакой обработке. То есть, при использовании прямого мониторинга во время записи гитарных партий нам будет слышен чистый, ничем не обработанный звук, тусклый гитарный звук без компрессии, панорамирования и прочих радостей студийных технологий.

OldSkool-monitoring

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

Некоторые производители программного и аппаратного обеспечения стараются использовать собственные приложения для обработки и мониторинга сигнала, которые работают в обход различных буферов и драйверов. Так, к примеру, поступает приложение для обработки гитарного звука Pod Farm от Line 6, которое самостоятельно обрабатывает сигнал и не задействует ASIO-буфер.

LatencyChain-so2 (1)

Те же PreSonus установили, что на современных компьютерах размер буфера USB-шины можно уменьшить до 1 мс, если будут соблюдены множественные условия. PreSonus отдельно отмечают о том, что размер буфера в 1 мс возможен пока что только теоритически, на практике же размер буфера может быть уменьшен до 2-4 мс. Проблема заключается в том, что достижение таких временных значений зависит не столько от компьютера или аудиоинтерфейса, сколько от стараний самих производителей программного обеспечения по написанию качественного и быстрого драйвера, который сможет работать в обход ASIO напрямую с USB-шиной. Из очевидных примеров использования такого подхода можно привести компанию Image-Line, разработчиков популярной рабочей станцим FL Studio. В комплекте с программой поставляется собственный ASIO-драйвер, который должен обеспечить уменьшение значений задержки при работе в FL Studio.

Вместо выводов

Теперь, когда мы разобрались, что такое задержка (latency) и откуда она берется, стоит запомнить самое главное. От задержки никуда не деться. Вообще. Никак. Это абсолютно естественная вещь, от которой нельзя избавиться, но можно минимизировать «ущерб» от нее.

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

В любом случае, если производители программного обеспечения будут грамотно подходить к оптимизации работы собственного ПО и необходимых драйверов по части работы с USB и ASIO/Core Audio, то задержка будет составлять менее 10 мс, а то и меньше.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *