Запуск тестов производительности локально
У нас есть простой процесс для запуска "классических" тестов производительности SunSpider, Kraken и Octane. Вы можете запускать их с различными бинарными файлами и комбинациями флагов, а результаты усредняются за несколько запусков.
CPU
Соберите оболочку d8
в соответствии с инструкциями в Сборка с использованием GN.
Перед запуском тестов убедитесь, что вы установили ваш регулятор масштабирования частоты процессора в режим производительности.
sudo tools/cpu.sh fast
Команды, которые понимает cpu.sh
:
fast
, производительность (алиас дляfast
)slow
, энергосбережение (алиас дляslow
)default
, по требованию (алиас дляdefault
)dualcore
(отключает все кроме двух ядер), dual (алиас дляdualcore
)allcores
(включает все доступные ядра заново), all (алиас дляallcores
).
CSuite
CSuite
- это наш простой инструмент для запуска тестов:
test/benchmarks/csuite/csuite.py
(sunspider | kraken | octane)
(baseline | compare)
<путь к бинарному файлу d8>
[-x "<опциональные дополнительные флаги командной строки d8>"]
Сначала запустите в режиме baseline
, чтобы создать базовые значения, затем в режиме compare
, чтобы получить результаты. CSuite
по умолчанию выполняет 10 запусков для Octane, 100 для SunSpider и 80 для Kraken, но вы можете изменить количество запусков для ускорения с помощью опции -r
.
CSuite
создает две поддиректории в каталоге, из которого вы его запускаете:
./_benchmark_runner_data
— это кешированный вывод из N запусков../_results
— в этот файл записываются результаты. Вы можете сохранять эти файлы с разными именами, и они будут отображаться в режиме сравнения.
В режиме сравнения вы, естественно, используете другой бинарный файл или хотя бы разные флаги.
Пример использования
Предположим, вы собрали две версии d8
и хотите увидеть, что произойдет с SunSpider. Сначала создайте базовые значения:
$ test/benchmarks/csuite/csuite.py sunspider baseline out.gn/master/d8
Записан файл ./_results/master.
Запустите снова sunspider в режиме сравнения, чтобы увидеть результаты.
Как предложено, повторите запуск, но на этот раз в режиме compare
с другим бинарным файлом:
$ test/benchmarks/csuite/csuite.py sunspider compare out.gn/x64.release/d8
тест: результат | master | % |
===================================================+==========+========+
3d-cube-sunspider: 13.9 S 13.4 S -3.6 |
3d-morph-sunspider: 8.6 S 8.4 S -2.3 |
3d-raytrace-sunspider: 15.1 S 14.9 S -1.3 |
access-binary-trees-sunspider: 3.7 S 3.9 S 5.4 |
access-fannkuch-sunspider: 11.9 S 11.8 S -0.8 |
access-nbody-sunspider: 4.6 S 4.8 S 4.3 |
access-nsieve-sunspider: 8.4 S 8.1 S -3.6 |
bitops-3bit-bits-in-byte-sunspider: 2.0 | 2.0 | |
bitops-bits-in-byte-sunspider: 3.7 S 3.9 S 5.4 |
bitops-bitwise-and-sunspider: 2.7 S 2.9 S 7.4 |
bitops-nsieve-bits-sunspider: 5.3 S 5.6 S 5.7 |
controlflow-recursive-sunspider: 3.8 S 3.6 S -5.3 |
crypto-aes-sunspider: 10.9 S 9.8 S -10.1 |
crypto-md5-sunspider: 7.0 | 7.4 S 5.7 |
crypto-sha1-sunspider: 9.2 S 9.0 S -2.2 |
date-format-tofte-sunspider: 9.8 S 9.9 S 1.0 |
date-format-xparb-sunspider: 10.3 S 10.3 S |
math-cordic-sunspider: 6.1 S 6.2 S 1.6 |
math-partial-sums-sunspider: 20.2 S 20.1 S -0.5 |
math-spectral-norm-sunspider: 3.2 S 3.0 S -6.2 |
regexp-dna-sunspider: 7.6 S 7.8 S 2.6 |
string-base64-sunspider: 14.2 S 14.0 | -1.4 |
string-fasta-sunspider: 12.8 S 12.6 S -1.6 |
string-tagcloud-sunspider: 18.2 S 18.2 S |
string-unpack-code-sunspider: 20.0 | 20.1 S 0.5 |
string-validate-input-sunspider: 9.4 S 9.4 S |
SunSpider: 242.6 S 241.1 S -0.6 |
---------------------------------------------------+----------+--------+
Результаты предыдущего запуска кэшируются в подкаталоге, созданном в текущем каталоге (_benchmark_runner_data
). Сводные результаты также кэшируются, в каталоге _results
. Эти каталоги можно удалить после выполнения шага сравнения.
Другая ситуация возникает, когда у вас тот же бинарный файл, но вы хотите увидеть результаты различных флагов. Кажется скучным, вы хотели бы посмотреть, как Octane работает без оптимизирующего компилятора. Сначала базовое значение:
$ test/benchmarks/csuite/csuite.py -r 1 octane baseline out.gn/x64.release/d8
Обычно для получения стабильных результатов Octane требуется 10 запусков.
Записано в /usr/local/google/home/mvstanton/src/v8/_results/master.
Запустите Octane снова в режиме сравнения, чтобы увидеть результаты.
Обратите внимание на предупреждение, что одного запуска обычно недостаточно, чтобы быть уверенным в большинстве оптимизаций производительности, однако наше «изменение» должно давать воспроизводимый эффект уже с одного запуска! Теперь давайте сравним, передав флаг --noopt
, чтобы отключить TurboFan:
$ test/benchmarks/csuite/csuite.py -r 1 octane compare out.gn/x64.release/d8 \
-x "--noopt"
Обычно для получения стабильных результатов Octane требуется 10 запусков.
тест: результат | мастер | % |
===================================================+==========+========+
Richards: 973.0 | 26770.0 | -96.4 |
DeltaBlue: 1070.0 | 57245.0 | -98.1 |
Crypto: 923.0 | 32550.0 | -97.2 |
RayTrace: 2896.0 | 75035.0 | -96.1 |
EarleyBoyer: 4363.0 | 42779.0 | -89.8 |
RegExp: 2881.0 | 6611.0 | -56.4 |
Splay: 4241.0 | 19489.0 | -78.2 |
SplayLatency: 14094.0 | 57192.0 | -75.4 |
NavierStokes: 1308.0 | 39208.0 | -96.7 |
PdfJS: 6385.0 | 26645.0 | -76.0 |
Mandreel: 709.0 | 33166.0 | -97.9 |
MandreelLatency: 5407.0 | 97749.0 | -94.5 |
Gameboy: 5440.0 | 54336.0 | -90.0 |
CodeLoad: 25631.0 | 25282.0 | 1.4 |
Box2D: 3288.0 | 67572.0 | -95.1 |
zlib: 59154.0 | 58775.0 | 0.6 |
Typescript: 12700.0 | 23310.0 | -45.5 |
Octane: 4070.0 | 37234.0 | -89.1 |
---------------------------------------------------+----------+--------+
Здорово увидеть, что CodeLoad
и zlib
относительно не пострадали.
Под капотом
CSuite
основан на двух скриптах в той же директории: benchmark.py
и compare-baseline.py
. В этих скриптах есть больше опций. Например, вы можете записать несколько базовых показателей и выполнить сравнение в 3, 4 или 5 вариантах. CSuite
оптимизирован для быстрого использования, жертвуя некоторой гибкостью.