TGViewer
Experimental chill Experimental chill @experimentalchill · 9.22K subscribers
Post #286 16.6K
Сегодня про закон Литтла.

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

Как теория очередей связана с нагрузкой? Закон Литтла, один из самых простых и легко понимаемых результатов теории очередей, гласит, что среднее количество клиентов в системе равно средней скорости прибытия, умноженной на среднее время пребывания в системе. В этом случае клиенты — это запросы в обработке, скорость прибытия — это объем трафика, представленного серверу, а время пребывания — это количество времени, необходимое для обработки каждого запроса. Закон доказывается не самым простым, но вполне понимаемым для студента образом. На удивление в курсах по компьютерным наукам эта тема практически не затрагивается, а вот в на курсах по физике, не так мало информации можно найти!

И о сколько интересных результатов вы можете получить с этим законом. Например, когда вы читаете с HDD диска, то вы сначала перемещайте головку диска где-то за 10ms, а потом читаете со 100 MB/s скоростью. Если вы хотите тратить меньше половины времени на seek, чем на чтение данных, то вам нужно иметь более (20 - 10) ms * 100 MB/s = 1 MB на чтение за раз. За пределами единичных множителей поверх этого числа вы получаете убывающую отдачу с точки зрения амортизации времени 10/(10 + X MB), потраченного в пустую на seek для чтения всех данных. Это полезно знать, потому что большие блоки не дают читать другим процессам, которым тоже нужны данные, а вот откуда и получаются примерные размеры блоков, какие мы должны или хотим читать за раз. Пару раз от людей из пространства слышал что-то в духе как "не заseekать диск до смерти", когда они обсуждали закон Литтла.

И то же самое можно применить в условии фикса багов/тикетов в команде. Количество текущих багов примерно равно среднему времени фикса помножить на скорость их пребывания.

В какой-то степени все этот закон понимают интуитивно в простых случаях -- скажем, у вас seek HDD диска занимает 10ms, то значит вы можете всего 100 IOPS сделать на нём (всего на HDD может быть 1 in-flight request), но теряются когда надо ответить на тот же вопрос про SSD.

Например, если SSD/NVME обрабатывает запросы в среднем за 20 микросекунд и делает это с 10M IOPS, то одновременно в среднем обрабатывается 200 запросов. Если подумать, выше этого немного тяжело уйти, надо уметь 200 запросов очень быстро класть в очередь (из разных потоков в идеале, так как переключение контекстов уже 1-2 микросекунды) для обработки и отправлять устройству. Поэтому любые оптимизации в драйверах, firmware, ядре и так далее сильно увеличивают цифры IOPS, особенно на больших квантилях. Ну и показывает, что скорее всего лимиты вашей системы ещё ой как недоутилизированы.
Wikipedia Little's law theorem in queueing theory
  • 👍 109
  • ❤ 22
  • 🔥 22
  • 🤯 3
More from @experimentalchill
  1. Sep 2, 2025Latency profiler Представьте ситуацию, вы пишете код на Python, вызываете посередине библи…
  2. Jul 10, 2025Trivially relocatable В C++ есть большая группа людей (включая меня), которая любит брать…
  3. May 15, 2025Size based vector https://discourse.llvm.org/t/adding-a-size-based-vector-to-libc-s-unstab…
  4. Mar 25, 20251. Объявили результаты TON: дали серебро, оказался 6-7 по топу (Mindful Kitten), дали $500…
  5. Feb 5, 2025January update (старею) 1. Мой (первый) стажёр из Яндекса опубликовал Perforator — сборщик…
  6. Jan 12, 2025Compressed pair В стандартной библиотеке C++ множество контейнеров принимают allocator<A>,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →