-O2 глоток свежего воздуха

Технический прогресс достиг по истине не бывалых высот. Еще совсем не давно мы задумывались о мегагерцах, а сегодня многоядерные системы уже нас не удивляют. Этот ошеломительный рост позволил совершить скачок современным компьютерным технологиям: абстракций становится больше; языки все больше интерпретируются нежели компилируются. Все подчинено принципу написано однажды — работает всегда и везде.

Мое увлечение программированием на С++ подсказывает, что если программу настроить (заточить) под конкретное оборудование, то и работать она будет быстрее. А между тем большинство Linux дистрибутивов по прежнему собирается под i386 архитектуру, которая естественно не учитывает и не может учитывать новомодные оптимизации современных процессоров.

Мой домашний процессор поддерживает:

fpu vme de pse tsc msr pae mce cx8 apic mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc arch_perfmon pebs bts aperfmperf pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm sse4_1 lahf_lm dts

Вряд ли ОС скомпилированная для процессора семейства i386 хоть что то из этого будет использовать.

На краю бездны

Оставим теоретические выкладки тем кому они интересны, мне же интересен живой эксперимент. План прост, ставим Gentoo (компилировать будем с флагами -O2 -march=i686 -pipe), запускаем тесты и анализируем. А так как Gentoo я ставлю в первый раз, то главное это не сойти с ума.

К сожалению не хватает духу пустить в разнос свой домашний ПК, воспользуемся виртуальной машиной. И это еще один интереснейший момент, а имеет так уж значение какая архитектура используется если все это дело все равно живет в искусственной коробочке созданной VritualBox`ом. Что ж тем интереснее будет результат.

Конфигурация гостевой машины: [toggle Title=»VirtualBox 4.1.8 1CPUx1GB»]

1CPUx1GB
00:00.0 Host bridge: Intel Corporation 440FX — 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC’97 Audio Controller (rev 01)
00:06.0 USB Controller: Apple Computer Inc. KeyLargo/Intrepid USB
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:08.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:0d.0 SATA controller: Intel Corporation 82801HBM/HEM (ICH8M/ICH8M-E) SATA AHCI Controller (rev 02)

[/toggle]
Конфигурация хоста: [toggle Title=»Ububntu 11.10 2CPUx3GB»]

Ubuntu 11.10
Intel(R) Core(TM)2 Duo CPU     P7350  @ 2.00GHz
3GB
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)
00:01.0 PCI bridge: Intel Corporation Mobile 4 Series Chipset PCI Express Graphics Port (rev 07)
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)
00:1c.2 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 3 (rev 03)
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)
00:1c.4 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 5 (rev 03)
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)
00:1f.0 ISA bridge: Intel Corporation ICH9M LPC Interface Controller (rev 03)
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)
01:00.0 VGA compatible controller: nVidia Corporation G96 [GeForce 9600M GT] (rev a1)
02:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8071 PCI-E Gigabit Ethernet Controller (rev 16)
03:00.0 Network controller: Intel Corporation WiFi Link 5100

[/toggle]

Палата мер и весов

Я придумал 3 тест кейса:

  1. gen.pl — скрип для генерации 1,000,000 insert запросов.
  2. Выполнение на базе данных (postgresql 9.1) скрипта подготовленного в пункте 1.
  3. Выполнение сложного sql запроса на таблице с 1,000,000 записей.

Подключение к виртуальный машине осуществляется через ssh, а поскольку первый тест генерирует большой поток текстового вывода, то попутно тестируется и сетевой стек.

Результаты хост системы получились такие (i386 real-pc):

  1. Генерация: 35 секунд
  2. Создание: 2 минуты и 4 секунды
  3. Выполнение: 15 секунд

Собери победителя

Gentoo (по-русски читается «генту», название вида пингвинов укрепилось в русском языке задолго до появления дистрибутива) — это английское название вида пингвинов Pygoscelis papua. Согласно Книге рекордов Гиннеса 98, этому виду пингвинов принадлежит рекорд скорости плавания (36 км/ч)[3].

На самом деле сборка Gentoo доставляет, она реально доставляет. Это интереснейший квест, который каждый должен пройти сам.  Я невероятно много узнал нового и чрезвычайно полезного о Linux. Но самое приятное, оказалось что это не такой уж и долгий процесс. Оказывается, при конфигурировании ядра нет нужды собирать «левые » драйвера и тысячи лишних модулей, нужно собирать лишь те вещи которые необходимы для функционирования конкретно твоих железок. Ядро получается сверх компактным. Оно грузится мгновенно. Сборка заняла 30-40 минут и это в виртуальной машине, что сказать — крутотенюшка. Не меньше доставляет и система emerge, выглядит как менеджер пакетов, делает то же что менеджер пакетов, только делает методом компиляции из исходников с оптимизационными флагами по вашему желанию.

Быстрее, выше, сильнее!

Gentoo (-O2 -march=i686 -pipe):

  1. Генерация: 39 секунд
  2. Создание: 4  минуты 19 секунд
  3. Выполнение: 17 секунд

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

Ubuntu 11.10 (i386) смогла выжать только это:

  1. Генерация: 9 минут и 8 секунд
  2. Создание: 21 минута и 20 секунд
  3. Выполнение: 17 секунд

Это печалит, Ubuntu моя любимая ОС и безрадостно видеть вот такой результат. Полный провал в первых двух тестах, однако обычный SQL запрос выполняется так же быстро как и в Gentoo.

Попробуем что нибудь по современней с точки зрения поддерживаемой архитектуры, OpenSUSE 12.1 (i586):

  1. Генерация: 10 минут и 15 секунд
  2. Создание: 6 минут и 40 секунд
  3. Выполнение: 17 секунд

Видим ту же плачевную ситуацию с первым тестом. Второй тест выполнился на порядок быстрее чем в Ubuntu, но результаты Gentoo быстрее более чем на 2 минуты. Третий тест традиционно так же быстр как и в других системах.

Локальным победителем признается Gentoo (-O2 -march=i686 -pipe). Не буду особо скрывать, что меня так и тянет собрать Gentoo с флагами -O3 -march=native -mtune=native -pipe (native значит оптимизация конкретно под мой CPU), так сделаем же это и посмотрим на результаты!

  1. Генерация: 4 минуты и 50 секунд
  2. Создание: 5 минут
  3. Выполнение: 15,7 секунд

 

Все результаты в единой таблице:

Тест Real PC Gentoo -O2 Gentoo -O3 Ubuntu (i386) OpenSUSE (i586)
1. 35 сек. 39 сек. 290 сек. 548 сек. 615 сек.
2. 124 сек. 259 сек. 300 сек. 1280 сек. 400 сек.
3. 15 сек. 17 сек. 15,7 сек. 17 сек. 17 сек.

 

Относительные результаты (относительно Real PC):

Тест Real PC Gentoo -O2 Gentoo -O3 Ubuntu (i386) OpenSUSE (i586)
1. 100% 111% 829% 1566% 1757%
2. 100% 209% 242% 1032% 323%
3. 100% 113% 105% 113% 113%

 

Как видим оптимизационный флаг -O3 сыграл злую шутку, в первых тестах Gentoo значительно сдала свои позиции, тем не менее не так плохо на фоне других систем, а результаты третьего теста просто рекордные.

Выводы делайте сами, но в целом понятно что Gentoo на слабой машине возможно будет идеальным решением.

Advertisements

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s