Це цифри, які повинен знати кожен інженер комп’ютера

У 2010 році Джефф Дін з Google провів у Стенфорді чудову доповідь, яка зробила його досить відомим. У ньому він обговорив кілька цифр, які мають значення для обчислювальних систем. Тоді Пітер Норвіг вперше опублікував ці цифри в Інтернеті.

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

Ця стаття є не лише збіркою орієнтовних даних Джеффа Діна, а й збирає всі такі цифри з різних джерел. Це має допомогти вам як системному дизайнеру та архітектору. Під час проектування ви можете використовувати ці цифри, щоб оцінити обсяг ресурсів, що потрібні вашій системі.

Груба оцінка даних про затримку за 2019 рік:

  1. Посилання на кеш L1: 1 наносекунда.
  2. Посилання на кеш-пам’ять L2: 4 наносекунди.
  3. Блокування / розблокування Mutex: 17 наносекунд.
  4. Посилання на основну пам’ять / оперативну пам’ять: 100 наносекунд.
  5. Стиснути 1 Кб за допомогою Zippy (зараз називається Snappy): 2000 наносекунд або 2 мікросекунди.
  6. Неправильне передбачення гілки процесора: 3 наносекунди.
  7. Випадкове зчитування твердотільного накопичувача (SSD): 16 мікросекунд.
  8. Пошук диска (жорсткий диск / магнітний диск): 3 мілісекунди.
  9. Читайте послідовно 1 000 000 байт з основної пам'яті: 4 мікросекунди.
  10. Читайте послідовно 1 000 000 байт з SSD: 62 мікросекунди.
  11. Послідовно зчитуйте з диска 1 000 000 байт: 947 мікросекунд.
  12. Запит на зворотну мережу в одному центрі обробки даних: 500 мікросекунд.
  13. Надсилання 2000 байт по товарній мережі: 62 наносекунди.

Час, необхідний для переміщення корисного навантаження через TCP:

Ось кількість часу, необхідного для передачі різних корисних навантажень даних у типових стільникових мережах по всьому світу, не допускаючи втрати даних.

RTT - Час поїздки в обидва кінці - загальний час, необхідний для того, щоб пакет даних (купа байтів даних) перемістився від відправника до одержувача, а одержувач - відправника по мережі. Коротше, це називається Ping time.

  1. Передача даних з 1 байта на 13000 байт (приблизно 13 КБ) займає 1 зворотний шлях або 1 RTT. Грубий час - США: 150 мілісекунд, Індія: 1200 мілісекунд, Бразилія: 600 мілісекунд.
  2. 13 001 байт - 39 000 байт (від 13 КБ до 39 КБ) займає 2 RTT. Грубий час - США: 300 мілісекунд, Індія: 2400 мілісекунд, Бразилія: 1200 мілісекунд.
  3. 39 001 байт - 91 000 байт (від 39 КБ до 91 КБ) займає 3 RTT. Приблизний час: США: 450 мілісекунд, Індія: 3600 мілісекунд, Бразилія: 1800 мілісекунд.
  4. 91 001 байт - 195 000 байт (від 91 КБ до 195 КБ) займає 4 RTT. Грубий час - США: 600 мілісекунд, Індія: 4800 мілісекунд, Бразилія: 2400 мілісекунд.

Отже, чим більший розмір відповіді, тим більше байтів, довша поїздка в обидва кінці, більша затримка API і, зрештою, менш зручна програма.

Ця публікація буде оновлена, коли будуть знайдені нові або оновлені номери. Будь ласка, повідомте мене, якщо вам відомі нові цифри.

Ця стаття спочатку опублікована на середній стіні автора. Якщо вам це подобається, будь ласка, дайте хлопці.

Довідково:

  1. //colin-scott.github.io/blog/2012/12/24/latency-trends/
  2. //blog.std.in/2015/05/23/http-response-sizes-and-tcp/
  3. //medium.com/@kousiknath/must-know-numbers-for-every-computer-engineer-6338a12c292c