|
08.11.2005, 11:19 | #1 |
Гость
|
AOS и многопроцессорная машина
Влияет ли существенно наличие нескольких процессоров на машине на быстордействие AOS. Т.е. машина работает в одной и той же конфигурации с одним процессором, затем добавляют еще процессор, как измениться скорость работы приложения (3-х уровневое, база на другой машине)? Поделитесь опытом.
|
|
08.11.2005, 11:38 | #2 |
Участник
|
Теоритически никак. AOS не использует второй процессор. Для AOS важна частота процессора.
|
|
08.11.2005, 11:59 | #3 |
Участник
|
Цитата:
Сообщение от lagr221374
Влияет ли существенно наличие нескольких процессоров на машине на быстордействие AOS. ...
Если средняя нагрузка на один процессор сервера [AOS] более 50 % - имеет смысл увеличить их количество, если есть такая возможность. Последний раз редактировалось Serge Kotov; 08.11.2005 в 12:19. |
|
08.11.2005, 12:18 | #4 |
Участник
|
Очень рекомендую выключить HyperThreading режим на AOS машине. Это отключает виртуализацию процессоров и фактически увелививает быстродействие каждого физического процессора.
|
|
08.11.2005, 12:29 | #5 |
Участник
|
Цитата:
Сообщение от Gelios
Очень рекомендую выключить HyperThreading режим на AOS машине. Это отключает виртуализацию процессоров и фактически увелививает быстродействие каждого физического процессора.
|
|
08.11.2005, 13:44 | #6 |
Участник
|
Не повлияет, AOS почти всегда использует только 1 процессор, если только вы не хотите запустить 2-й экземпляр AOS-а на одной и той же машине. Общее правило №1: AOS-ы масштабируются "box"-ами, ставите рядом еще одну машину и разводите по ним пользователей.
2 Serge Kotov что такое "клиентский процесс" применительно к 3-х звенке? |
|
08.11.2005, 22:20 | #7 |
Участник
|
Цитата:
Сообщение от itfs
Не повлияет, AOS почти всегда использует только 1 процессор, если только вы не хотите запустить 2-й экземпляр AOS-а на одной и той же машине. Общее правило №1: AOS-ы масштабируются "box"-ами, ставите рядом еще одну машину и разводите по ним пользователей.
2 Serge Kotov что такое "клиентский процесс" применительно к 3-х звенке? Под "клиентским процессом" я имел в виду один пользовательский коннект в 3-хзвенке, которому ax32serv выделяет собственный поток. Поэтому, собственно говоря, он и исполняется на одном процессоре. Т.е. разницу между процессом ОС и его потоками я знаю. Любопытно откуда есть полное убеждение сразу у трех разных участников этой ветки, что AOS умеет работать только с одним процессором? Ведь это может, например, привести к рекомендации начинающему предприятию - клиенту поставить два однопроцессорных физических сервера вместо одного двухпроцессорного, что не есть хорошо. Проверить корректность работы AOS с несколькими процессорами очень просто. Достаточно запустить Performance Monitor с просмотром нагрузки раздельно по каждому процессору. ИМХО лучше не связываться с попыткой "расщепить" один поток на несколько процессоров. В реальной ситуации в трехуровневой конфигурации для двухпроцессорного сервера AOS одновременно работает обычно больше двух пользователей. |
|
09.11.2005, 11:14 | #8 |
Участник
|
Цитата:
Сообщение от Serge Kotov
Ведь это может, например, привести к рекомендации начинающему предприятию - клиенту поставить два однопроцессорных физических сервера вместо одного двухпроцессорного, что не есть хорошо.
Но если речь идет о том чтобы выбрать между 2-х и 4-х процессорной конфигурацией, то ... я на своих выводам настаиваю. to AndyD Теоритчески я согласен, существуют предпосылки для того, чтобы процесс отдавал на исполнение потоки различным процессорам. Допустим, что проблема синхронзации так или иначе решена. Но как факт, архитектура AOS-а такова, что не отдает выполнение пользовательских потоков другим процессорам, за исключением исполнения batch-ей. С уважением, itfs. С уважением, itfs. |
|
09.11.2005, 11:44 | #9 |
Участник
|
Цитата:
Сообщение от itfs
to AndyD Теоритчески я согласен, существуют предпосылки для того, чтобы процесс отдавал на исполнение потоки различным процессорам. Допустим, что проблема синхронзации так или иначе решена. Но как факт, архитектура AOS-а такова, что не отдает выполнение пользовательских потоков другим процессорам, за исключением исполнения batch-ей.
С уважением, itfs. С уважением, itfs. Если два пользователя подключены к двухпроцессорному AOS, то их потоки будут выполняться на разных процессорах. Ограничение - привязка процесса AOS к одному процессору и приоритет потоков. Если выполнение задачи разбить на несколько потоков, то они будут выполняться каждых на разных процессорах (с учетом ограничения)
__________________
Axapta v.3.0 sp5 kr2 |
|
09.11.2005, 12:29 | #10 |
Участник
|
Вставлю свои 5 копеек:
По умолчанию Windows 2000 использует нежесткую привязку (soft affmity) потоков к процессорам Это означает, что при прочих равных условиях, система пытается выполнять поток на том же процессоре, на котором он работал в последний раз При таком подходе можно повторно использовать данные, все еще хранящиеся в кэше процессора В архитектуре NUMA (Non Uniform MemoryAccess) машина состоит из нескольких плат, на каждой из которых находятся четыре процессора и отдельный банк памяти. Отдельный погок может выпол няться на любом из этих процессоров Для жесткой привязки потоков процесса к конкретному процессору используется функция SetProcessAffinityMask. Есть и обратная GetProcessAffinityMask - которая позволяет определить используется ли жесткая привязка к процессору. В случае с АОС-ом я такую привязку не нашел. Соответственно планировщик сам выберет на каких процессорах какие потоки выполнять. |
|
09.11.2005, 11:36 | #11 |
----------------
|
Цитата:
Сообщение от itfs
AOS почти всегда использует только 1 процессор..
2-х и 4-х процессорной конфигурацией, то ... я на своих выводам настаиваю Я проводил такой опыт. Создал классик, который занимается вечным вычислением и исполняется на AOS-е. Запустил несколько клиентов и смотрел загрузку 4х процессорного сервера. 1 сеанс - 25% (1 проц 100%) 2 сеанса - 50% (2 проц 100%) 3 сеанса - 75% (3 проц 100%) и 4 сеанса - 100% |
|
08.11.2005, 14:05 | #12 |
Участник
|
Без сомнения, она это делает, но только это нам не поможет aos - это один единственный процесс и с точки зрения ОС, поделать с ним ничего нельзя.
С уваженим, itfs. |
|
08.11.2005, 14:23 | #13 |
Модератор
|
Цитата:
Сообщение от itfs
Без сомнения, она это делает, но только это нам не поможет aos - это один единственный процесс и с точки зрения ОС, поделать с ним ничего нельзя.
соответственно, одной сессии (одному потоку) наличие HT или дополнительных процессов как-либо заметно помочь не может, а вот если сессий (пользователей) много - очень даже в принципе, я недавно рисовал сферического коня в вакууме - одна сессия запускает дополнительные потоки через AOSLoadGen и грузит все доступные процессоры, но как это применить на практике, еще не придумал |
|
08.11.2005, 14:40 | #14 |
Гость
|
Цитата:
Сообщение от Vadik
...
в принципе, я недавно рисовал сферического коня в вакууме - одна сессия запускает дополнительные потоки через AOSLoadGen и грузит все доступные процессоры, но как это применить на практике, еще не придумал |
|
08.11.2005, 15:42 | #15 |
Модератор
|
Цитата:
Сообщение от lagr221374
Можно на эту тему поподробнее если не затруднит + код
Изначально задача формулировалась примерно так "Допустим, у нас есть достаточно 'тяжелая' сессия, которая на многопроцессорном сервере приложений интенсивно использует один процессор, но не использует остальные. Это в принципе возможно?" Так вот "в принципе" ответ будет "да, если..". Если мы можем разбить нашу задачу на несколько мелких задач, разбросать их по нескольким потокам в принципе несложно. Я не стал использовать Thread (был когда-то нехороший опыт), а взял AOSLoadGen, благо к нему претензий по стабильности работы не было В итоге получился, как я уже говорил, сферичейский конь в вакууме: - обходя план счетов (LedgerTable), по каждому счету запускаем отдельный поток, обегающий проводки по счету (LedgerTrans) Разумеется, сам алгоритм практической ценности не имеет, он нужен только для демонстрации Дальше появляются вопросы - как узнать о том, что созданный нами поток завершил свою работу? - как вернуть из него результаты в основной (родительский) поток? - как вообще организовать синхронизацию этих потоков? Пока нормального решения, которое действительно можно было использовать, я не нашел. Я точно не хочу использовать для обмена сообщениями таблицы, я не уверен, что хочу использовать глобальные переменные. Если у кого-то есть идеи, с радостью их выслушаю |
|
08.11.2005, 14:07 | #16 |
Участник
|
Совершенно верно. Если не привязывать процесс к определенным процессарам (процессору), то потоки будет выполняться параллельно на разных процессорах в соответствии с приоритетом. Так как Axapata на каждое подключение к AOS'у создает свой поток, то это правило действительно и для нее
__________________
Axapta v.3.0 sp5 kr2 |
|
08.11.2005, 14:12 | #17 |
Участник
|
2 itfs
Ваше сообщение увидел после того, как отправил свое, по-этому уточняю. Процесс сам по себе ничего не выполняет. Все дейсвтвия в программе выполняются потоками. Если приложение разбивает свою работу на 2 два и более потока, то они могут быть распараллелены операционкой для выполнения на разных процессорах
__________________
Axapta v.3.0 sp5 kr2 |
|
08.11.2005, 14:24 | #18 |
Модератор
|
... Как говорил Великий Рихтер
Да, у нас такая же ситуация. Второй процессор пригодится, если на машине крутиться несколько АОСов (рабочий/тестовый/разработчиков) С Уважением, Георгий |
|
08.11.2005, 15:53 | #19 |
Гость
|
Thanks. а что то ГЛОБАЛЬНОЕ использовать все же придется (как мне кажется)
|
|
08.11.2005, 16:06 | #20 |
Участник
|
По-моему можно использовать стандартные Виндовые средства для синхронизации потоков - события, семейство функций WaitFor*.
__________________
Axapta v.3.0 sp5 kr2 |
|