SysBench — модульное, кроссплатформенное многопотоковое приложение позволяющее не прибегая к организации комплексного тестирования быстро оценить параметры системы для работы под высокой нагрузкой. SysBench может также протестировать производительность MySQL, но это тема для другой статьи.
Установка:
sudo apt-get install sysbench
Производительность дисковой подсистемы
Создаем файлы для тестирования производительности. Файлы создаются в текущем каталоге с именами test_file.*
sysbench --test=fileio --file-num=64 --file-total-size=1G --init-rng=on --file-extra-flags=direct prepare
—file-num — количество файлов —file-total-size — суммарный размер файлов Запускаем тестирование:
sysbench --test=fileio --max-time=10 --max-requests=100000 --num-threads=2 --file-num=64 --file-total-size=1G --file-block-size=16384 --file-test-mode=rndrw run
—max-time — ограничение по времени выполнения в секундах —max-requests — ограничение по количеству операций —num-threads — количество потоков —file-block-size — размер блоков в байтах —file-test-mode — режим тестирования, возможные значения seqwr — последовательная запись seqrewr — последовательная перезапись seqrd — последовательное чтение rndrd — чтение со случайным доступом rndwr — запись со случайным доступом rndrw — чтение и запись со случайным доступом Получаем не очень высокие значения, что и следовало ожидать от VPS сервера за примерно 400 руб в мес.
sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 2 Extra file open flags: 0 64 files, 16Mb each 1Gb total file size Block size 16Kb Number of random requests for random IO: 100000 Read/Write ratio for combined random IO test: 1.50 Periodic FSYNC enabled, calling fsync() each 100 requests. Calling fsync() at the end of test, Enabled. Using synchronous I/O mode Doing random r/w test Threads started! Time limit exceeded, exiting... (last message repeated 1 times) Done. Operations performed: 1140 Read, 760 Write, 1157 Other = 3057 Total Read 17.812Mb Written 11.875Mb Total transferred 29.688Mb (2.967Mb/sec) 189.89 Requests/sec executed Test execution summary: total time: 10.0060s total number of events: 1900 total time taken by event execution: 0.0700 per-request statistics: min: 0.01ms avg: 0.04ms max: 2.33ms approx. 95 percentile: 0.20ms Threads fairness: events (avg/stddev): 950.0000/321.00 execution time (avg/stddev): 0.0350/0.01
Производительность процессора
Используются 64х битные целые для расчета простых чисел до значения —cpu-max-primes.
$ sysbench --test=cpu --cpu-max-prime=20000 --num-threads=2 --max-time=10 run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 2 Doing CPU performance benchmark Threads started! Time limit exceeded, exiting... (last message repeated 1 times) Done. Maximum prime number checked in CPU test: 20000 Test execution summary: total time: 10.0015s total number of events: 7506 total time taken by event execution: 19.9843 per-request statistics: min: 2.55ms avg: 2.66ms max: 9.49ms approx. 95 percentile: 2.83ms Threads fairness: events (avg/stddev): 3753.0000/0.00 execution time (avg/stddev): 9.9921/0.00
Оценка скорости работы с семафорами
Выполняется по одному запросу на поток. В начале создается небольшая нагрузка на процессор обычным циклом (параметр —mutex-loops), после чего выполняется захват случайного семафора, увеличивается глобальная переменная и семафор освобождается. Количество повторений этой процедуры задается параметром —mutex-locks. Общее количество семафоров для теста задается через —mutex-num.
$ sysbench --test=mutex --num-threads=64 run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 64 Doing mutex performance test Threads started! Done. Test execution summary: total time: 0.5010s total number of events: 64 total time taken by event execution: 28.3254 per-request statistics: min: 224.71ms avg: 442.58ms max: 492.37ms approx. 95 percentile: 491.32ms Threads fairness: events (avg/stddev): 1.0000/0.00 execution time (avg/stddev): 0.4426/0.07
Оценка производительности памяти
Выделяется буфер памяти и производятся операции чтения или записи. Количество данных прочитанных или записанных за одну операцию определяется размером указателя т.е. 4 или 8 байт (32 или 64 бит). Процесс повторяется пока не будет обработан заданный объем (—memory-total-size). Можно задать количество потоков (—num-threads), размер буфера (—memory-block-size) и тип операции (чтение или запись —memory-oper=[read | write].
$ sysbench --test=memory --num-threads=2 run sysbench 0.4.12: multi-threaded system evaluation benchmark Running the test with following options: Number of threads: 2 Doing memory operations speed test Memory block size: 1K Memory transfer size: 102400M Memory operations type: write Memory scope type: global Threads started! Done. Operations performed: 104857600 (515274.87 ops/sec) 102400.00 MB transferred (503.20 MB/sec) Test execution summary: total time: 203.4984s total number of events: 104857600 total time taken by event execution: 303.7104 per-request statistics: min: 0.00ms avg: 0.00ms max: 24.84ms approx. 95 percentile: 0.00ms Threads fairness: events (avg/stddev): 52428800.0000/377524.00 execution time (avg/stddev): 151.8552/0.17