UnixBench

Еще одна часть по тестированию производительности сервера. Но чтобы не было скучно, дополним тестирование одной практической задачкой.

В интернете много обсуждений, какую версию Linux выбрать — 32-bit или 64-bit. Одна из позиций — если памяти меньше 4 гигабайт — ставь 32-bit. Если больше, то — 64.

Против 64-bit выступает мнение, что она прожорлива на оперативную память, чуть ли не в два раза. В тоже время на многих задачах она быстрее.

Попробуем подтвердить или опровергнуть эти теории использую бенчмарк UnixBench.

Установка UnixBench:

  1. yum install gcc gcc-c++ make libXext-devel
  2. или
  3. yum groupinstall "Development Tools"
  4. затем
  5. yum install perl perl-Time-HiRes
  6. wget -c http://byte-unixbench.googlecode.com/files/UnixBench5.1.3.tgz
  7. tar xvzf UnixBench5.1.3.tgz
  8. cd UnixBench
  9. make
  10. ./Run

установка дополнительных пакетов может и не понадобиться, так что все на ваше усмотрение.

C помощью UnixBench я решил сравнить свеженький сервер. На нем нет никаких сайтов. Конфигурация такая:

  1. Architecture:          x86_64
  2. CPU op-mode(s):        32-bit, 64-bit
  3. Byte Order:            Little Endian
  4. CPU(s):                8
  5. Vendor ID:             GenuineIntel
  6. CPU family:            6
  7. Model:                 60
  8. Stepping:              3
  9. CPU MHz:               3400.327
  10. BogoMIPS:              6800.65
  11. Virtualization:        VT-x
  12.  
  13. model name      : Intel(R) Xeon(R) CPU E3-1240 v3 @ 3.40GHz
  14. cpu MHz         : 3400.327
  15. cache size      : 8192 KB
  16. bogomips        : 6800.65
  17. cores           : 4

Стоял вопрос, какую версию CentOS установить 32-bit или 64-bit. Памяти меньше 4 гигабайт и поэтому вроди 64-bit не обязательна, но с другой стороны 64-bit сама по себе быстрее до 30% по уверениям разных гуру тестеров. Поэтому сначала я запустил UnixBench на версии CentOS 6.4 32-bit, а затем на 64-bit. Запусков было несколько, свёл их в таблицу. Так как имеем 4 виртуальных ядра, то в таблице результаты для одной копии теста и для 4 запущенных паралельно

Версия CentOS32-bit64-bit
1 parallel copy of tests1480.41628.2
4 parallel copies of tests3397.63572.7
Чуть ранее были получены другие результаты на этом же сервере
1 parallel copy of tests1567.81786.7
4 parallel copies of tests3865.74592.4
И еще кучка прогонов, для подтверждения
1 parallel copy of tests1548.4 / 1560.4 / 1465.5 / 1412.5 / 1536.4 / 1492.4 / 1465.7 / 1493.0 / 1481.7 / 1343.7 / 1449.1 / 1439.3 / 1330,3 / 1498,9 / 1503 / 14901590.3 / 1645.8 / 1700.9 / 1683 / 1745.4 / 1739.4 / 1692.2 / 1589.8
4 parallel copies of tests3782.9 / 3655.1 / 3482.7 / 3284.4 / 3766.5 / 3429.5 / 3384.1 / 2595.2 / 3444.1 / 3282.3 / 3338.7 / 3319.7 / 3114,1 / 3647,7 / 3681,2 / 3696,43719.9 / 3833.9 / 3947.3 / 4045.6 / 4181.6 / 4272 / 3904 / 3848.1

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

Я посчитал среднее арифметическое по всем прогонам и у меня получилось для 32-bit: 1467,133 / 3438,022 для 64-bit: 1685,944 / 4038,311

Таким образом 64-битная версия быстрее 32-битной на 14,91% при однопоточных вычислениях и на 17,46% при многопоточных.

Что касается потребления памяти, то оно действительно больше на 64-битной системе. Ниже на скриншотах потребление памяти после перезагрузки.

32-бита. Занято 62692 килобайта

64-бита. Занято 87128 килобайт. На 39% больше, чем в 32-битной

Стоит ли увеличение потребления памяти на 39% прироста в скорости в 18%? Сложно сказать. Если памяти достаточно много, то вероятнее всего — да. Потому что конечный пользователь все таки оценивает работу сервера по скорости отдачи контента, а сколько памяти занято ему абсолютно безразлично.

К тому же посмотрим, насколько больше занимают основные потребители mysqld и httpd. Получается, что на 25,81% и 28,57% соответственно