Бенчмарк кластера
Git-репозиторий Solana содержит все сценарии, которые могут вам понадобиться для запуска собственной локальной тестовой сети. В зависимости от того, чего вы хотите достичь, вы можете запустить другой вариант, поскольку полноценная, многоузловая тестовая сеть с повышенной производительностью значительно сложнее в настройке, чем одноузловая тестовая нода только на Rust. Если вы хотите разрабатывать функции высокого уровня, такие как эксперименты со смарт-контрактами, избавьте себя от некоторых головных болей при настройке и придерживайтесь демоверсии с одним узлом только для Rust. Если вы занимаетесь оптимизацией производительности конвейера транзакций, рассмотрите расширенную демонстрацию с одним узлом. Если вы работаете над консенсусом, вам понадобится как минимум многоузловая демонстрация только для Rust. Если вы хотите воспроизвести наши показатели TPS, запустите расширенную демонстрацию с несколькими узлами.
Для всех четырех вариантов вам понадобится последняя версия набора инструментов Rust и исходный код Solana:
Сначала настройте Rust, Cargo и системные пакеты, как описано в Solana README.
Теперь проверьте код с github:
git clone https://github.com/solana-labs/solana.git
cd solana
Демонстрационный код иногда ломается между выпусками, поскольку мы добавляем новые низкоуровневые функции, поэтому, если вы впервые запускаете демоверсию, вы повысите свои шансы на успех, если посмотрите [последний выпуск](https:// github.com/solana-labs/solana/releases), прежде чем продолжить:
TAG=$(git describe --tags $(git rev-list --tags --max-count=1))
git checkout $TAG
Настройка конфигурации
Убедитесь, что важные программы, такие как программа голосования, созданы до запуска каких-либо узлов. Обратите внимание, что мы используем релизную сборку для хорошей производительности.
Если вам нужна отладочная сборка, используйте только cargo build
и опустите часть команды NDEBUG=1
.
cargo build --release
Сеть инициализируется регистром генезиса, созданным при выполнении следующего скрипта.
NDEBUG=1 ./multinode-demo/setup.sh
Кран
Для того, чтобы валидаторы и клиенты работали, нам нужно запустить кран, чтобы выдать несколько тестовых токенов. Сборщик доставляет «аэродропы» в стиле Милтона Фридмана (бесплатные токены для запрашивающих клиентов) для использования в тестовых транзакциях.
Запустите кран с помощью:
NDEBUG=1 ./multinode-demo/faucet.sh
Одноузловая тестовая сеть
Прежде чем запускать валидатор, убедитесь, что вы знаете IP-адрес машины, которую вы хотите использовать в качестве загрузочного валидатора для демонстрации, и убедитесь, что порты udp 8000–10000 открыты на всех машинах, на которых вы хотите протестировать.
Теперь запустите валидатор начальной загрузки в отдельной оболочке:
NDEBUG=1 ./multinode-demo/bootstrap-validator.sh
Подождите несколько секунд, пока сервер инициализируется. Когда он будет готов к приему транзакций, он напечатает «лидер готов...». Лидер запросит несколько токенов у сборщика, если у него их нет. Кран не должен быть запущен для последующих запусков лидера.
Многоузловая тестовая сеть
Чтобы запустить многоузловую тестовую сеть, после запуска узла-лидера запустите несколько дополнительных валидаторов в отдельных оболочках:
NDEBUG=1 ./multinode-demo/validator-x.sh
Чтобы запустить валидатор с повышенной производительностью в Linux, в вашей системе должен быть установлен CUDA 10.0:
./fetch-perf-libs.sh
NDEBUG=1 SOLANA_CUDA=1 ./multinode-demo/bootstrap-validator.sh
NDEBUG=1 SOLANA_CUDA=1 ./multinode-demo/validator.sh
Демонстрация клиента тестовой сети
Теперь, когда ваша тестовая сеть с одним узлом или несколькими узлами запущена и работает, давайте отправим в нее несколько транзакций! В отдельной оболочке запустите клиент:
NDEBUG=1 ./multinode-demo/bench-tps.sh # runs against localhost by default
Что только что произошло? Демонстрационная версия клиента запускает несколько потоков для отправки 500 000 транзакций в тестовую сеть как можно быстрее. Затем клиент периодически пингует тестовую сеть, чтобы увидеть, сколько транзакций он обработал за это время. Обратите внимание, что демонстрация намеренно заполняет сеть пакетами UDP, так что сеть почти наверняка отбросит их кучу. Это гарантирует, что у тестовой сети есть возможность достичь 710 000 TPS. Демонстрация клиента завершается после того, как он убедился, что тестовая сеть не будет обрабатывать никаких дополнительных транзакций. Вы должны увидеть несколько измерений TPS, напечатанных на экране. В варианте с несколькими узлами вы также увидите измерения TPS для каждого узла валидатора.
Отладка тестовой сети
В коде есть несколько полезных отладочных сообщений, вы можете включить их для каждого модуля и уровня. Перед запуском лидера или валидатора установите обычную переменную среды RUST_LOG.
Например
-
Чтобы включить
info
везде иdebug
только в модуле solana::banking_stage: export RUST_LOG=solana=info,solana::banking_stage=debug
-
Чтобы включить ведение журнала программы BPF:
export RUST_LOG=solana_bpf_loader=trace
Обычно мы используем debug
для нечастых отладочных сообщений, trace
для потенциально частых сообщений и info
для ведения журнала, связанного с производительностью.
Вы также можете подключиться к запущенному процессу с помощью GDB. Процесс лидера называется solana-validator:
sudo gdb
attach <PID>
set logging on
thread apply all bt
Это сбросит все трассировки стека потоков в gdb.txt.
Тестовая сеть для разработчиков
В этом примере клиент подключается к нашей общедоступной тестовой сети. Чтобы запустить валидаторы в тестовой сети, вам нужно открыть порты udp 8000-10000
.
NDEBUG=1 ./multinode-demo/bench-tps.sh --entrypoint entrypoint.devnet.solana.com:8001 --faucet api.devnet.solana.com:9900 --duration 60 --tx_count 50
Вы можете наблюдать за результатами транзакций вашего клиента на нашей панели показателей