LINUX.ORG.RU
решено ФорумAdmin

Низкая производительность виртуалки 1С MS sql под kvm


2

5

Всем привет.
В компании провожу перевод 1С сервера на виртуалку. Ранее использовалась машина 4Gb памяти, 2x DualCore Intel Xeon 5120, 1866 MHz ), raid 10. Сейчас новый сервер 32 Gb, 2 проца AMD Opteron, raid 1 + raid 10.


Поставил kvm, поставил виртуалку win 2008 R2, на него win sql x64 + 1С 8.2 x32.
SQL Базы 1c лежат на отдельном raid 10 из 4-х WD 10000.
По тестам everest скорость выросла значительно, однако сама 1С работает заметно медленнее, примерно на 10-20% Хотя должна была бы ускориться раза в два. Вот конфиг виртуалки.

<domain type='kvm'>
  <name>WindowsServer2008_sql</name>
  <uuid>c0dc51f6-c435-6e81-512e-a6befd6f5c76</uuid>
  <memory unit='KiB'>14312000</memory>
  <currentMemory unit='KiB'>14312000</currentMemory>
  <vcpu placement='static'>12</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Opteron_G4</model>
    <vendor>AMD</vendor>
    <topology sockets='2' cores='6' threads='6'/>
    <feature policy='require' name='perfctr_core'/>
    <feature policy='require' name='skinit'/>
    <feature policy='require' name='ibs'/>
    <feature policy='require' name='mmxext'/>
    <feature policy='require' name='osxsave'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='topoext'/>
    <feature policy='require' name='fxsr_opt'/>
    <feature policy='require' name='cr8legacy'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='wdt'/>
    <feature policy='require' name='extapic'/>
    <feature policy='require' name='osvw'/>
    <feature policy='require' name='nodeid_msr'/>
    <feature policy='require' name='perfctr_nb'/>
    <feature policy='require' name='cmp_legacy'/>
    <feature policy='require' name='lwp'/>
    <feature policy='require' name='monitor'/>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source file='/data/guest_images/WindowsServer2008_sql.raw'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
       <source file='/data2/WindowsServer2008sql_database.img'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:0d:ac:4b'/>
      <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='direct'>
      <mac address='52:54:00:3a:8b:09'/>
      <source dev='eth1' mode='vepa'/>
      <model type='e1000'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='ru' passwd='asdFGH01'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Собственно, где проблема, почему скорость работы 1С может быть низкой? Может проблема в MS SQL?


в виртуалке для сети и дисков используются драйвера virtio?

в самой винде драйвера virtio установлены?

почему не используется LVM вместо образа?

raid железный? настройки raid10 покажите.

используются диски sas? почему 10000, а не на 15000 rpm.

vxzvxz ★★★
()
Ответ на: комментарий от vxzvxz

для дисков virtio, для сети нет (это исправлю)

разница в скорости не большая, но попробую перейти на lvm, ок. Т.к. уже многие об этом говорят.

raid железный HP. Какие настройки интересуют?

диски sata 10000. На sas денег не дали =(

abdus
() автор топика
Ответ на: комментарий от vxzvxz

Кстати у меня проц Opteron 2xO6274 (2.2GHz-16MB) 16-Core (2 max) / 4x8GB RDIMM / P410i (512Mb)

Я вообще глянул по тесту Гилева. У оптеронов печальные результаты. Выше 15-ти почти ни у кого

abdus
() автор топика
Ответ на: комментарий от pekmop1024

Провели тест. Использовали старый сервер 1С, а базы с нового сервера. И скорость 1С стала точно как как на старом сервере. Это значит, что скорость именно 1С низкая, а не SQL. Надо ее копать.

abdus
() автор топика
Ответ на: комментарий от abdus

1237MB/s это ~ 9896 Mbit/s, в то время как пропускная способность SATA/300 3Gib/s

TEX ★★★
()
Ответ на: комментарий от abdus

попробую перейти на lvm

lvm уберет прокладку в виде фс, позволит снапшотами снимать копии

Какие настройки интересуют?

настройки связанные с кэшем и отложенной записью.

vxzvxz ★★★
()
Ответ на: комментарий от abdus

всегда под 1С приобретали сервера на базе интеловских ксеонов с максимально доступной по деньгам частотой, в качестве серверной платформы выбираем тианы - http://www.tyan.com/, под ОС выделяем отдельный диск (не в масиве), под подкачку отдельный диск (не в масиве), базы на raid10 (диски sas).

vxzvxz ★★★
()
Ответ на: комментарий от vxzvxz

Провел эксперимент. Поставил на свой рабочий комп (i7 3400 MGz, 8Gb DDR3) сервер 1С, но использую базы MS SQL с виртуального сервера. Сокорость выросла значительно, 3 секунды на тяжелые запросы. Это в 3 раза выше чем на старом сервере. В общем проблема в 1С, мать ее. Затык на проце, вирутальном или в принципе AMD. Решил поставить на новый сервак винду без виртуализации, может в принципе с этим Opteron 2200 Mgz 1С тормозит. О результатах напишу

abdus
() автор топика
Ответ на: комментарий от abdus

Любопытно. Никогда не видел, чтобы оно так влияло.

pekmop1024 ★★★★★
()
Ответ на: комментарий от abdus

Позвольте показать ссылку на статью

Если не читать статью, то до 50% замедления создает связка Проц-память http://infostart.ru/public/201858/ а остальное приходится на скорость отклика дисков и iops.

gilevru
()
Ответ на: комментарий от petav

Поставил на железо винду.

Тест Гилева на файловой базе 33,33 против 13 на виртуалке, на ms sql 11,23 против 10 на витруалке.

В общем потери видны только на файловой. тест Гилева на MS Sql работает на 10% быстрее чем в виртуалке. Так что просадка существенная по скорости имеется только на дисках при файловой базе. Кроме того 1С использует только 1 проц из 32-х имеющихся на борту. Т.к. скорость проца всего 2200, то результаты низкие.

Я решил еще потестить на линуксе как 1С будет себя вести. Может быстрее начнет... Хотя я уже сомневаюсь. У кого есть опыт? Какова производительность?

И еще момент, может можно как-0то процы объединять для вычислений, чтоб 2 проца в виртуалке выглядели как 1 и делили вычисления между собой? Звучит бредово, но может что-то подобное изобрели?

abdus
() автор топика
Ответ на: комментарий от abdus

ну и еще один вариант использовать простой декстопный комп с высокой частотой как сервер 1С, который будет коннектиться к MS SQL на виртуалке.

abdus
() автор топика
Ответ на: комментарий от abdus

Кроме того 1С использует только 1 проц из 32-х имеющихся на борту. Т.к. скорость проца всего 2200, то результаты низкие.

Попробуйте увеличить кол-во рабочих процессов rphost. Дело в том что, по умолчанию он один, это хорошо для x64 систем, а для 32 битных их кол-во надо подбирать опытным путем, среднее 4.

32 битный софт в 64 битной системе эмулируется и возникают потери. 32 битная 1C для production не совем подходит. Очень допускаю, что в виртуализированной среде, это носит более заметный характер.

Я решил еще потестить на линуксе как 1С будет себя вести. Может быстрее начнет... Хотя я уже сомневаюсь. У кого есть опыт? Какова производительность?

Однозначного ответа не дам, только догадки. 1с замахнулись на новый сегмент и тестят на пользователях. Я к примеру добился признания нескольких ошибок, при которых сервер 1С валился и не запускался, обещали исправить тогда-то.

И еще момент, может можно как-0то процы объединять для вычислений, чтоб 2 проца в виртуалке выглядели как 1 и делили вычисления между собой?

Не так как вы сказали, но процы можно оттюнить.

Вообщем я в этой проблеме тоже копаюсь...

petav ★★★★★
()
Ответ на: комментарий от abdus

А какая у тебя база? Сколько пользователей?

DALDON ★★★★★
()
Ответ на: комментарий от DALDON

Xeon 5120 1,87 ГГц, 4 ОЗУ, win 2003, raid 10 на 4-х дисках 7200

abdus
() автор топика
Ответ на: комментарий от abdus

Ситуация, тогда файловая и дорогая работа программистов по оптимизации запросов и логики работы под этот режим, но это точно не дешевле выйдет.

ну и еще один вариант использовать простой декстопный комп с высокой частотой как сервер 1С, который будет коннектиться к MS SQL на виртуалке.

если нет возможности соблюсти хост64+гость64+1С64 то наверное самый лучший вариант, по моему мнению, если только везде 32 использовать?

petav ★★★★★
()
Ответ на: комментарий от abdus

У меня примерно аналогичная ситуация.

Лично моё мнение такое: в твоём случае тебе 32бита хватит. (тем более что денег на x64 нету).

Всё что тебе нужно это: сделать профайлинг нагрузки на CPU текущий, на дисковую подсистему и понять в чём у тебя СЕЙЧАС затык. Таже винда имеет готовый инструмент в своём арсенале - смотри в «Панель управления».

Если у тебя не успевает ядро CPU обрабатывать процесс rphost тогда можно создать ещё один процесс rphost, и один резевный хотябы с автоперезапуском основных - это уже тебе значительно поможет избежать тупняков и утечек памяти.

А так в целом 1.87 ГГц - это мало. Если ты на тойже конфигурации поставишь CPU 3,2 Ггц, добавишь один процесс rphost я думаю что производительность выраситит процентов на 40-50%. И не суть важно - можно и виртуализовать. Но не вижу в этом большого смысла для 1С.

DALDON ★★★★★
()
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от DALDON

У нас сейчас 2 процесса rphost и сделать еще парочку не проблема, есть хороший программист 1С в штате. Но для реализации многих новых фич в 1С нужно больше памяти гораздо, так что переезд на другой сервер необходим.

Щас попробую просто заменить сервак на xeon, может заменят, с доплатой и чтоб лояльность не потерять.

В общем проблему выявили, и поднять на текущем сервере производительность на 70-100% все равно не выйдет, все упирается в проц. Так что вывод такой. 1С гумно и ей нужен проц с высокой частотой. Но как сменю сервак - отпишусь о результатах.

abdus
() автор топика
Ответ на: комментарий от abdus

Двух процессов более чем достаточно, будет много процессов - будет много впустую расходоваться ОЗУ, а она на x32 бита ценна. - Хотя надо опять-же смотреть в зависимости от нагрузки на ЦПУ... Программист 1С не всегда понимает в процессах 1С, он как правило просто программирует. - Это ближе к базиснику по 1С - ну или к сисадмину...

Если нужно больше памяти то ИМХО: надо платформу 1С тоже x64.

DALDON ★★★★★
()
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от petav

У меня закончилась эпопея. Взяли десктопную машинку с простой win7 и процом intel 3600 Mgz и используем ее в качестве 1С сервера, которая конектится к mysql базе на виртуалке.

abdus
() автор топика
Ответ на: комментарий от abdus

На Ваших количествах пользователей и размерности базы ходить на виртуалку в MSSQL ИМХО смысла нету ровном счётом никакого. ОЗУ под MSSQL + один rphost должно хватать.

DALDON ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.