Анализ биткойн-сети, часть 5: анализ нагрузочного тестирования• 2015/06/25
Предлагаем вашему вниманию пятую статью из серии об увеличении размера блоков и его значении для дальнейшего роста биткойн-сети.
Анализ результатов нагрузочного тестирования29 и 30 мая отдельные участники биткойн-сообщества совместными усилиями протестировали пропускную способность сети, отправив в нее за короткое время десятки тысяч транзакций. Нагрузочное тестирование начало сказываться на работе пула транзакций в памяти узлов поздним вечером (по времени UTC) 29 мая и продолжалось до раннего утра 30 мая (см. диаграмму ниже). Ради целей данного анализа мы определяем интервал тестирования как период между блоками 358 596 (23:39 по UTC) и 358 625 (6:54 по UTC). С помощью инструментов TradeBlock мы проанализировали данные этого тестирования и получили несколько интересных результатов.
Чтобы смоделировать высокую нагрузку на сеть, участники тестирования программно сгенерировали тысячи транзакций с небольшой комиссией. При максимальной нагрузке в пуле транзакций находилось 26 тысяч транзакций (в обычном режиме их количество составляет от 1 до 4 тысяч).
Определение приоритета транзакцийСтолкнувшись с необходимостью обработать 135 тысяч транзакций за сутки, майнеры были вынуждены выбирать, какие транзакции им включать в каждый очередной блок. Чтобы сравнить обработку транзакций в обычном режиме и при нагрузочном тестировании, мы проанализировали распределение транзакций относительно “контрольного периода”, включающего двое суток перед тестированием (23 и 27 мая) и двое суток после (3 и 6 июня) — по одному рабочему и одному выходному дню.
Средняя комиссия за байт данных в транзакциях за 7 с половиной часов нагрузочного тестирования составила около 32 сатоши, однако большая доля транзакций (26%) включала наименьшую комиссию (0-5 сатоши за байт данных). Средняя величина транзакции во время тестирования составила 5,8 XBT с медианой 0,1 XBT. Эти же значения в контрольный период были равны 10,9 XBT и 0,4 XBT соответственно. Иначе говоря, количество транзакций и объем данных во время тестирования значительно увеличились, но характеристики транзакций при этом также отклонились от стандартных.
Далее мы проанализировали, как долго пришлось ждать добавления транзакции в блок при тестировании, и сравнили это “время ожидания” (в блоках) с контрольным периодом. Как показано ниже, подтверждение транзакцией с низкой комиссией (от 0 до 5 сатоши за байт данных) во время тестирования занимало в среднем около 28 блоков, или почти 5 часов, тогда как в контрольный период аналогичные транзакции подтверждались менее чем за 10 блоков. В целом увеличение комиссии ускоряло обработку транзакции как при тестировании, так и в обычном режиме. По диаграмме также ясно, что время подтверждения при тестировании увеличилось для всех категорий транзакций в сравнении с обычным режимом.
Из этого правила выбивается лишь категория с комиссией 45-50 сатоши за байт. Это объясняется тем, что данная категория включает в основном длинные цепи неподтвержденных транзакций, отправленных в сеть одна за другой с небольшим интервалом. Эти транзакции не только перегрузили пул в памяти узлов, но и чаще остальных интерпретировались как спам из-за очень малого “возраста” монет.
Аналогичная тенденция заметна и при сравнении времени подтверждения в зависимости от величины транзакций. Учитывая, что около 80% транзакций при тестировании относились к категории 0-1 XBT, время подтверждения сильнее всего выросло для этой категории, но и все остальные транзакции обрабатывались при высокой нагрузке дольше.
Размеры блоков, их пределы и хешрейтЗа 7 с половиной часов тестирования майнеры сгенерировали 30 блоков, тогда как при 10-минутном интервале их должно было быть 45. Мы не уверены, в чем причина уменьшения количества блоков, но статистический анализ указывает, что оно может быть напрямую связано с бОльшим количеством транзакций в каждом блоке.
Согласно приведенной ниже диаграмме, 67% блоков, созданных в ходе тестирования, имели размер около 750 КБ, который по умолчанию задан в стандартном биткойн-клиенте (в обычном режиме за январь-май 2015 года в эту категорию попало 15% блоков). Пулы DiscusFish и Eligius используют блоки с ограничением в 1 МБ — максимумом согласно текущему протоколу. После нагрузочного тестирования пулы BTCChina и AntMiner также увеличили предельный размер до 1 МБ. В общем, 5 из 10 крупнейших майнеров создают блоки, ограниченные пределом 750 КБ, а другие 5 — блоки с пределом 900-1000 КБ.
Интересно отметить, что 35% блоков, созданных в ходе тестирования, не были полными, а один блок был вообще пуст, несмотря на большое количество транзакций в пуле, ожидающих подтверждения. Это означает, что моделирование, описанное в 4-й части, на самом деле отражает наилучший сценарий, тогда как в действительности майнинг неполных блоков может снижать пропускную способность сети.
За 7 с половиной часов тестирования пул BTCChina обнаружил 20% блоков, что значительно выше его типичного хешрейта, составляющего около 8% сети. Пул DiscusFish обнаружил только два блока, что соответствует 7% (в сравнении с 19% в обычном режиме). Конечно, к этим данным следует относиться скептически, но для статистически значимой выборки из 30 элементов это указывает на вероятное наличие некоторой неучтенной переменной, вызывающей отклонение результатов от случайного распределения.