Феррари и фуры
В мире SMB нам сравнительно редко приходится говорить о задержке (latency). Мир SMB почти повсеместно ориентируется на пропускную способность системы и, как правило, не осознаёт задержку как потребность. Но бывают случаи, когда задержка становится важной, и тогда критически важно понять взаимодействие пропускной способности и задержки, а также то, что «скорость» означает для нас. По мере перехода в enterprise-пространство задержка будет рассматриваться как проблема всё чаще, однако даже там пропускная способность почти всегда остаётся главенствующим показателем — настолько, что концепции скорости почти повсеместно вращаются вокруг пропускной способности, а понятия задержки нередко игнорируются или забываются.
Понять роль задержки в системе бывает непросто, хотя сама по себе задержка относительно проста для понимания.
Отличное сравнение между задержкой и пропускной способностью, которое я люблю использовать, — это образ Ferrari и большегрузного автомобиля. Ferrari «быстры» в традиционном смысле: у них высокое «количество миль в час». Можно сказать, что они созданы для скорости. Но так ли это?
Как правило, мы считаем большегрузные автомобили медленными. Это большие и неповоротливые машины с небольшой максимальной скоростью. Но они перевозят много груза за раз.
В компьютерных терминах мы обычно думаем о скорости как о грузоподъёмности — мы мыслим категориями «единиц» в секунду. Если говорить в терминах Ferrari, двести миль в час — это замечательно, но перевезти можно разве что одну коробку. Большегрузный автомобиль может ехать лишь сто миль в час, но везти ближе к тысяче коробок за раз. Когда мы говорим о пропускной способности или скорости компьютера, мы думаем именно об этом. В терминах сетей мы говорим о гигабайтах в секунду и редко заботимся о скорости отдельного пакета — ведь отдельный пакет редко имеет значение. В терминах вычислений мы думаем о таких понятиях, как операции с плавающей точкой в секунду, — схожая концепция. Никого не волнует, сколько времени занимает одна FLOP (операция с плавающей точкой), важно лишь, сколько их можно выполнить за секунду или десять.
Таким образом, если рассматривать Ferrari, можно сказать, что его полезная скорость составляет двести коробко-миль в час. То есть за каждый час работы Ferrari может переместить одну коробку на расстояние до двухсот миль. Полезная скорость большегрузного автомобиля составляет сто тысяч коробко-миль в час. С точки зрения перемещения посылок пропускная способность большегрузного автомобиля легко в пятьсот раз «быстрее», чем у Ferrari.
Таким образом, с точки зрения того, как мы обычно думаем о компьютерах и сетях, большегрузный автомобиль будет «быстрым», а Ferrari — «медленным».
Но есть ещё и задержка. Допустим, наша полезная нагрузка крошечна — скажем, письмо или небольшая коробка. Ferrari может переместить эту одну коробку на тысячу миль всего за пять часов! Большегрузному автомобилю потребуется десять часов, чтобы преодолеть то же расстояние (хотя он привезёт МНОГО писем сразу). Если нам нужно как можно быстрее доставить сообщение или небольшую посылку из одного места в другое, Ferrari — лучший выбор, поскольку задержка (время от начала доставки до прибытия первого пакета) у него вдвое меньше, чем у большегрузного автомобиля.
Как можно себе представить, в большинстве случаев большегрузные автомобили значительно практичнее, поскольку их скорость доставки намного выше. Именно поэтому мы видим на дорогах грузовики постоянно, тогда как Ferrari встречаются крайне редко — несмотря на то что их стоимость примерно одинакова (очень приблизительно). Но в особых случаях Ferrari оказывается более разумным выбором. Только не очень часто.
Это общая концептуальная аналогия, применимая к многочисленным областям. Она относится к системам кэширования, памяти, CPU, сетям, ядрам и планировщикам операционных систем, автомобилям и многому другому. Задержка и пропускная способность, как правило, обратно связаны — мы жертвуем задержкой ради получения пропускной способности. В большинстве операций это наиболее разумно. Но иногда имеет смысл настраивать систему именно на задержку.
Хранилище данных — это на самом деле особый случай в вычислениях, где почти весь фокус на производительности хранилища сосредоточен вокруг IOPS, который является примерно косвенным измерением задержки, а не пропускной способности, измеряемой в «объёме переданных данных в секунду». Мы редко заботимся об этом втором числе, поскольку оно почти никогда не является источником узких мест в хранилище. Но это исключение, а не правило.
Задержка и пропускная способность могут иметь удивительные взаимодействия в вычислительном мире. Например, когда мы говорим о сетях, мы обычно измеряем только пропускную способность (Гб/с), но редко заботимся о задержке (обычно измеряемой в миллисекундах). Как правило, это потому, что почти все сетевые системы имеют схожие показатели задержки, и большинство приложений практически безразличны к задержкам. Лишь редкие приложения — например, VoIP через международные каналы или спутниковая связь — делают задержку ощутимой для рядового пользователя. Иногда людей неожиданно удивляет задержка, когда они пробуют что-то необычное — например, iSCSI через WAN на большие расстояния — и задержка вдруг проявляется как непредвиденная проблема.
Одно из мест, где взаимодействие задержки и пропускной способности становится поразительным и интересным, — это переход от электрических или оптических сетей передачи данных к физическим. Известная цитата в отрасли гласит:
Никогда не недооценивайте пропускную способность универсала, набитого лентами и мчащегося по шоссе.
Это великолепная демонстрация огромной пропускной способности с очень высокой задержкой. При поездке на пятьдесят миль через город один универсал или SUV мог бы перевезти сотни петабайт данных, достигая скоростей передачи данных, которым 10-гигабитная оптика не могла бы составить конкуренцию. Но время до прибытия первого пакета данных составит около часа. Мы часто недооцениваем такую сеть, полагая, что задержка должна быть ограничена примерно 500 мс. Но это не всегда так.
Австралия недавно оказалась в новостях: там провели тест, чтобы выяснить, может ли голубь, несущий SD-карту, с точки зрения пропускной способности сети превзойти регионального ISP — и голубь оказался быстрее ISP!
С точки зрения производительности вычислений мы часто игнорируем задержку до такой степени, что даже не осознаём её как контекст для обсуждения производительности. Но в кругах вычислений с малой задержкой она рассматривается очень тщательно. Пропускная способность системы, как правило, значительно снижается (целевая утилизация CPU составляет около десяти процентов, тогда как в более традиционных системах целевой показатель ближе к девяноста процентам), при этом используются такие концепции, как ядра реального времени, сходство CPU, привязка процессора, коэффициенты попаданий в кэш и снижение измерений — всё это применяется для получения максимально быстрого отклика системы, а не для максимального суммарного объёма обработки.
Распространённые области, где малая задержка с вычислительной точки зрения является желательной, — это критические системы управления (например, производственные контроллеры, где даже миллисекунда задержки может вызвать проблемы на производственной линии) или системы финансовых торгов, где несколько миллисекунд задержки могут привести к изменению цен на инвестиции или к тому, что продукты уже проданы и недоступны. Скорость с точки зрения задержки нередко является решающим фактором между получением прибыли и убытком — даже одна миллисекунда может быть критической.
Технически даже системы обработки аудио и видео должны быть чувствительны к задержке, однако большинство современных вычислительных систем обладают таким запасом производительности, а задержки в целом достаточно низки, что большинство систем — даже VoIP-АТС и системы конференц-связи — сегодня могут функционировать, практически не нуждаясь в отслеживании проблем задержки на стороне обработки (даже сетевая задержка всё реже становится поводом для беспокойства). Рядовой системный администратор или инженер вполне может пройти всю карьеру, ни разу не столкнувшись с системой, чувствительной к задержке, или с ситуацией, когда избыточной производительности не хватит, чтобы скрыть чувствительность к задержке.
Определение скорости — будь то пропускная способность, задержка или что-то иное, а может быть, их сочетание — является крайне важным во всех аспектах IT и в жизни в целом. Понимание того, как они влияют на нас в разных ситуациях и как они взаимодействуют друг с другом, пребывая, как правило, в обратной зависимости — где улучшение пропускной способности обходится ценой задержки, и наоборот, — а также умение балансировать их по мере необходимости для улучшения систем, с которыми мы работаем, является весьма ценным навыком.