Имя: Пароль:
IT
Админ
Как ведет себя 1с на многоядерном процессоре (Проблема)
0 Nikulin
 
07.02.12
16:53
А проблема в том, что нужно понять вот что.
Есть 4 ядра (8 виртуальных процессоров).
Есть 1с сервер предприятия и СКЛ сервер на другом компе (другой комп не рассматриваем)
Есть другая учетная система которой пользуются половина пользователей 1с
Ворос.
На одном ядре крутится сервер предприятия, 1 клиентская 1с и один экземпляр второй учетной системы. Если на клиентской 1с запускают отчет и она начинает отжирать весь ресурс этого ядра то что будет с другими процессами?
т.е. они заткнутся, или переместятся на другое ядро?
т.е. может ли экземпляр 1с перемещаться на другие ядра в зависимости от балансной нагрузки? Может ли процесс сервера предприятия перемещатся.
Умеет ли виндоус (биос... или еще чтото) распределять процессы интерактивно?
1 Nikulin
 
07.02.12
16:55
В продолжение.
Запускается сервер.
Стартует сервер предприятия.
Фактически все новые процессы стартуют на 1 процессоре?
Как в дальнейшем распределяются приложения?
т.е. в течении дня сервер предприятия все более нагружен, и те кто по несчастью попали с ним на 1 процессор начинают тормозить все сильнее?

Нужны какие либо ссылки на анализ ситуации и на авторитетные мнения =)
Выскажите пожалуйста собственное мнение.
2 acsent
 
07.02.12
16:57
тебе рассказать о принципах многозадачности в винде?
3 Lama12
 
07.02.12
17:00
(2) +1
(0)В правильно написанной программе (не в специализированной), процессами управляет ОС.
4 Живой Ископаемый
 
07.02.12
17:04
2(0) "Умеет ли виндоус (биос... или еще чтото) распределять процессы интерактивно?"
http://screencast.com/t/fH5qEPKbf0yu
умеет?
5 Живой Ископаемый
 
07.02.12
17:04
а (Проблема) в чем?
6 H A D G E H O G s
 
07.02.12
17:06
(4) А я тогда написал приблуду, которая раскидала мне 2 calc.exe по 2 моим ядрам :-)
7 H A D G E H O G s
 
07.02.12
17:06
Но я ниасилил - че делать с 4 calc.exe и 2 ядрами.
8 Живой Ископаемый
 
07.02.12
17:09
2(6) а я об этом не знаю...
9 Живой Ископаемый
 
07.02.12
17:09
Но то есть Таск Менеджер сам не умеет
10 Nikulin
 
07.02.12
17:18
"Проблема" в том, что возникли некоторые терки между разработчикам этой самой второй учетной системы, и нужно аргументированно вести диалог. Делим производительность сервера.
11 Живой Ископаемый
 
07.02.12
17:20
2(10) засуньте его в виртуалку или в песочницу.
12 Nikulin
 
07.02.12
17:20
(4) это доступность процессоров для процесса?
Я не могу понять, может ли приложение переклчаться интерактивно между свободными процессорами.
13 acsent
 
07.02.12
17:21
винда не умеет перекидывать уже работающий процесс, только новый
14 acsent
 
07.02.12
17:22
ели приложение порождает новый процесс, нить, то ос автоматом выбирает для него менее нагруженный процессор
15 acsent
 
07.02.12
17:22
так же можно закрепить некотоые приложения за определеными процессами
16 Живой Ископаемый
 
07.02.12
17:24
2(15) а как?
17 acsent
 
07.02.12
17:27
ключевое слово affinity
http://www.softportal.com/get-21971-runwithaffinity.html
18 Живой Ископаемый
 
07.02.12
17:29
2(17) а есть такое же, но для служб?
19 acsent
 
07.02.12
17:30
понятия не имею, да и этой то утилитой ни разу не пользовался ))
20 acsent
 
07.02.12
17:31
21 Alexmtx
 
07.02.12
17:33
Привет всем!
Ситуация следующая.
Имеем сервер - 2 процессора по 2 ядра и гипертрейдинг, - итого по 4 виртуальных ядер = 8 виртуальных ядер всего.

Процесс 1cv8.exe - это однопоточное приложение 1С82, то есть имеет только ОДИН поток!
При запуске как понимаю этот поток распределяется на первое ядро если оно не загружено или на более свободные, если первое сильно загружено
Так понимаю, что ОС может создать однопоточное приложение на каком-то из ядер, но перекидывать его не будет после старта.

Так вот, потом подвисает процесс Try.exe базы, написанной на VC++ и загружает первое ядро на полную и в итоге 1С тормозит.
22 Alexmtx
 
07.02.12
17:36
По мнению программистов VC++ ОС в таком случае поток процесса 1cv8.exe может перекинуть на другое свободное ядро.

В реальности же этого не происходит, 1С тормозит.

ОС W2k3 Server x86 Enterprise Edition 16 Гб ОЗУ
23 Lama12
 
07.02.12
17:37
(21) С чего это 1С однопоточное?
У меня сейчас на разных сессиях от 9 до 11 потоков.
24 Alexmtx
 
07.02.12
17:37
Есть линка, в которой досконально расписывается ротация потоков приложения и невозможность ротации однопоточного приложения?
25 Alexmtx
 
07.02.12
17:38
Не надо путать потоки с процессами!
26 Alexmtx
 
07.02.12
17:39
http://www.upweek.ru/forum/viewtopic.php?f=4&t=15316

Читаем в конце статьи.
27 Lama12
 
07.02.12
17:40
(25) Вот я как раз и не путаю. :)
Один процесс. У него 10 потоков. Сколько нитей, не скажу. Process explorer не показывает.
28 Alexmtx
 
07.02.12
17:44
из этих потоков потоков самих 1С (не ntdll.dll) сколько?
29 acsent
 
07.02.12
17:47
(27) поток - это и есть нить
30 Lama12
 
07.02.12
17:47
(28) Хм... один :)
31 Alexmtx
 
07.02.12
17:47
вот-вот - поток, он же нить всего один у 1с!
32 Lama12
 
07.02.12
17:51
(31) Блин... разрушаете розовые очки. :)
33 Alexmtx
 
07.02.12
17:51
Никак не могу найти хорошее описание ротации потоков по ядрам в ОС...
34 Rovan
 
гуру
07.02.12
18:10
(21) ты на сервере запускаешь сеанс КЛИЕНТА 1С ?
35 Rovan
 
гуру
07.02.12
18:11
(27) я счес через FAR посмотрел: у клиента 1С (1cv8.exe) 10 нитей
36 Rovan
 
гуру
07.02.12
18:13
(21) "Так вот, потом подвисает процесс Try.exe базы, написанной на VC++ и загружает первое ядро на полную и в итоге 1С тормозит."
***
это вопрос к разрабочикам Try.exe  !
37 Жан Пердежон
 
07.02.12
18:16
(33) запускать try.exe и 1с на разных ядрах тулзой из (17) - не вариант?
38 Alexmtx
 
07.02.12
20:38
С Try.exe побороли, вот только сами разработчики говорят что Try.ee не мог влиять, так как ОС распределяет потоки по ядрам.
Они неправильно понимают как работает однопоточное приложение.
Вот мне и нужно весомое доказательство со ссылкой на авторитетный источник.
Запускается на сервере через Citrix.
39 GreyK
 
07.02.12
20:44
(0) 1С по жизни однопоточная, ей эти "многопроцессорные процы" до фени, ей скорость записи на диск важна и скорость проца.
40 Раттенфангер
 
07.02.12
20:50
(11) Кстати да. Виртуалка- лучший выход из сложившейся ситуации, т.к. игрой с аффинити и назначением памяти все равно практически невозможно создать равные условия для двух приложений. А в виртуалке - легко. Да и переезд на разные сервера виртуалкам сделать гораздо проще.
41 mdocs
 
07.02.12
21:08
(39) А бывают многопоточные базы данных?
42 smaharbA
 
07.02.12
21:08
афинутни
43 Torquader
 
07.02.12
22:45
Во-первых, никто не мешает системе переносить процессы между ядрами, так как после выгрузки процесса с процессора его можно загрузить в другое ядро точно также, как и в предыдущее, только нужно понимать, что один поток может быть загружен только в одно ядро одновременно.
Во-вторых, система обрабатывает системные вызовы для операций с диском, памятью и другими системными ресурсами, которые тоже выполняются последовательно, так как к одному устройству в один момент времени может иметь доступ только один процесс.
Поэтому, если у сервера тормозит дисковая подсистема (а это самое частое явление, так как нехватка памяти тоже приводит к возрастанию использования диска), то сколько бы процессоров в системе не наблюдалась, все процессы будут ждать выполнения дисковых операций и даже один однопоточный процесс, который полностью загрузил обмен с диском может очень сильно повлиять на производительность всей системы в целом.
Конечно, распределение процессов по процессорам (SetProcessAfinityMask) позволяет распределить нагрузку, но только в пределах вычислительной мощности, а в случае проблем с диском может даже сильно затормозить работу, так как ограниченный процесс будет медленнее обрабатывать ответы от диска.
44 Alexmtx
 
08.02.12
16:10
В однопоточном приложении поток один и как при запуске занимает одно ядро, так уже его система перенести на другие ядра не сможет!
45 smaharbA
 
08.02.12
21:11
(44) правда ?
46 MaxS
 
08.02.12
21:14
Проводил эксперимент с десктопной виртуалкой. У гостя 2 ядра, у хоста 4. Когда гость загружает 2 ядра на 100%, хост периодически перекидывает нагрузку то на одну пару, то на другую.
47 Neco
 
08.02.12
21:39
(41) Большинство современных СУБД многопоточные
48 Фрэнки
 
08.02.12
22:24
(47) СУБД многопоточные, но при этом внутри СУБД должен быть свой собственный планировщик, иначе вся многопоточность СУБД обернется всего лишь запуском каждого сеанса подключения к СУБД в отдельном одиночном потоке. Т.е. далеко не все СУБД для винды умеют делить сеансы на несколько потоков. МС СКЛ умеет. Но его при этом глючит и клинит. Причем, глюки и клины выскакивают в разных ситуациях, в зависимости от версии сборки 1С. На некоторых сборках 1С попадаются рекомендации по использованию параметра управления разрешенным количеством потоков на один коннект к СУБД
49 Фрэнки
 
08.02.12
22:25
параметр нужно указывать для МС СКЛ
50 pectopatop
 
08.02.12
23:25
Если в аспекте СУБД говорить, то больше важна, и нужна, и используется (1С это не весь ИТ еще) - не многоПОТОЧНОСТЬ, а параллельные запросы.
Читай параллельные чтения/записи в дата-файлы.
Т.к. у СУБД чаще узкое место - HDD.
Для параллельных чтений/записи необязательно нити отдельные создавать.