апреля 11, 2007

Небольшой апгрейд

Было:
2 x Intel(R) Xeon(TM) Dual CPU 3.00GHz
2G RAM
FAST-160 WIDE SCSI 320.0 MB/s DT IU RTI
Gentoo 2006 i386 SMP HTT, cfq io scheduler

Стало:
Тоже самое, только
4G RAM
Gentoo 2006 amd64 SMP HTT, deadline io scheduler
CFLAGS="-O2 -pipe -march=nocona"

Разница в производительности mysql пожалуй минимум раза в два быстрее.
Было очень активное обращение к винчестеру на чтение, очень большие таблицы. % io wait был очень высок, т.к. процессор постоянно ждал данных от винчестера. LA было около 2.5-3 обычное.

Выигрыш в производительности получился за счет:

  • Увеличения объема памяти:
    База занимает около 4 гигабайт. Памяти на машине было 2. Из них 1 гигабайт занимал сам процесс mysqld. Оставался 1 гигабайт на кеш
    После увеличения объема памяти под кеш стало доступно 3 гигабайта.
    Mem: 4052136k total, 4016616k used, 35520k free, 168860k buffers, 2766228k cached
    Почти половина базы сейчас сидит в памяти
  • Переход системы на архитектуру amd64. На архитектуре 32бит линукс использовал извраты чтобы добраться до памяти выше 800М. Теперь же он к любой странице памяти обращается одинаково быстро
  • Компиляция mysqld в режиме 64 бит. "-march=nocona" дает команду GCC подстроить код под архитектуру EMT64 данного процессора. Чем конкретно это выигрышно я точно не знаю, подозреваю что операции ввода-вывода должны дать прирост быстродействия.