![]() |
eXeL@B —› Программирование —› Thread limit в x64 |
Посл.ответ | Сообщение |
|
Создано: 05 августа 2009 22:41 · Поправил: Hexxx · Личное сообщение · #1 |
|
Создано: 05 августа 2009 23:00 · Личное сообщение · #2 |
|
Создано: 05 августа 2009 23:34 · Личное сообщение · #3 |
|
Создано: 06 августа 2009 00:06 · Личное сообщение · #4 На x86 это ограничение связано с тем, что под стек потока резервируется метр адресного пространства, которого на 32х биной архитектуре и так с гулькин хуй. 32х битные ОС непригодны для использования ресурсов современных машин, а на x64 можно создать столько потоков, на сколько хватит проца и памяти. ----- PGP key ![]() |
|
Создано: 06 августа 2009 00:19 · Личное сообщение · #5 Сделал небольшую тестовую прогу. Тестовая система: Core i7, 12гб RAM, Windows 2003 x64 x86 приложение без /LARGEADDRESSAWARE - 1599 потоков x86 приложение с /LARGEADDRESSAWARE - 3222 потока x64 приложение - 173116 потоков (после чего кончилась память) ----- PGP key ![]() |
|
Создано: 06 августа 2009 09:20 · Личное сообщение · #6 ntldr пишет: x86 приложение без /LARGEADDRESSAWARE - 1599 потоков x86 приложение с /LARGEADDRESSAWARE - 3222 потока x64 приложение - 173116 потоков (после чего кончилась память) спасибо. А /LARGEADDRESSAWARE какие изменения за собой несет? Как-то код самого приложения меняется или это просто в PE заголовке очередной флаг. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 06 августа 2009 09:28 · Личное сообщение · #7 Просто флаг в PE заголовке, который разрешает использовать 3гб адресного пространства. Флаг работает на x86 системах запущенных с ключом /3GB в boot.ini и на x64 системах. Впрочем, ключ /3GB не панацея, т.к. сокращает доступные ядру ресурсы, что отрицательно сказывается на возможности открытия большого количества сокетов, уменьшает файловый кэш, и.т.д. ----- PGP key ![]() |
|
Создано: 06 августа 2009 12:06 · Личное сообщение · #8 |
|
Создано: 06 августа 2009 13:11 · Личное сообщение · #9 ntldr пишет: Просто флаг в PE заголовке, который разрешает использовать 3гб адресного пространства. Флаг работает на x86 системах запущенных с ключом /3GB в boot.ini То есть в принципе, даже если у меня нет этого флага у моей проги, я смогу запустить больше процессов если у меня система запущена с ключем /3GB, чем без него? ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 06 августа 2009 15:58 · Личное сообщение · #10 Hexxx пишет: я смогу запустить больше процессов если у меня система запущена с ключем /3GB, чем без него? Наоборот, меньше процессов, потому что этот флаг сокращает ресурсы ядра. Юзайте x64 и будет вам щастье во всём. ----- PGP key ![]() |
|
Создано: 06 августа 2009 16:38 · Личное сообщение · #11 К примеру я запускаю приложение, которое создает 20 потоков. На x86 системе я щас могу запустить 74 таких приложения, пока мне система не начнет отказывать в создании потоков. Ну там получается что еще в системе еще бегают потоки системных процессов и всякой гадости. Но суммарно 2000 получается. ntldr пишет: Наоборот, меньше процессов Правильно я понимаю, что если я включу режим /3Gb, то уже не смогу запустить 74 копии приложения? Максимальное количество процессов получится меньше? ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 06 августа 2009 17:01 · Личное сообщение · #12 Количество запускаемых процессов ограничено лишь общим объемом памяти, которой и на x86 системе может быть больше 4гб. Юзай Windows 2003 Enterprise edition, только она поддерживает > 4гб RAM. Если же софт вынужден работать в кастрированной Windows XP, то ограничивай свои потребности, эта недоось нихрена не умеет. Hexxx пишет: Правильно я понимаю, что если я включу режим /3Gb, то уже не смогу запустить 74 копии приложения? Зависит от того, в какое узкое место сейчас всё упирается. Если в память - то без разницы, если в адресное пространство ядра - то максимальное количество процессов уменьшится. ИМХО лучше не юзать столько потоков, яхз зачем их может столько понадобиться. ----- PGP key ![]() |
|
Создано: 06 августа 2009 17:20 · Поправил: Hexxx · Личное сообщение · #13 ntldr пишет: Зависит от того, в какое узкое место сейчас всё упирается. Я ж писал Hexxx пишет: щас могу запустить 74 таких приложения, пока мне система не начнет отказывать в создании потоков Памяти еще 700 мб свободно остается. ntldr пишет: ИМХО лучше не юзать столько потоков, яхз зачем их может столько понадобиться. Мое дело запустить как можно больше копий одной проги на компе. Винду мне переставлять не дадут. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 06 августа 2009 18:01 · Личное сообщение · #14 Провел эксперимент. Тестовая система: Windows 2003 x86 Standard edition, VirtualBox 3.0.4, 4гб RAM, Core i7 (1 core) Запускался процесс имеющий 1 поток. Результаты: swap enabled - 18223 процессов swap disabled - 18222 процессов swap enabled, /3GB - 3598 процессов swap disabled, /3GB - 3605 процессов Таким образом делаем вывод, что количество процессов ограничено адресным пространством ядра, и требования количества потоков в процессе и количества процессов в системе противоречивы, и оба параметра не могут быть одновременно оптимизированы. ----- PGP key ![]() |
|
Создано: 06 августа 2009 19:47 · Личное сообщение · #15 |
|
Создано: 06 августа 2009 20:21 · Личное сообщение · #16 |
|
Создано: 06 августа 2009 21:19 · Личное сообщение · #17 |
|
Создано: 07 августа 2009 00:20 · Личное сообщение · #18 Я вот чо-то не пойму русиновича на счет вот этого: Like 32-bit threads, 64-bit threads also have a default of 1MB reserved for stack, but 64-bit processes have a much larger user-mode address space (8TB), so address space shouldn’t be an issue when it comes to creating large numbers of threads. ... However, on a system with 2GB of RAM, Testlimit64 was able to create only 55,000 threads, far below the number it should have been able to if resident available memory was the limiter (2GB/24K = 89,000): Вроде как должно было выделять по метру, ибо по дефолту, и он запускал без -n, а потом вдруг получилось, что на поток по 24 кб... ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 07 августа 2009 00:48 · Личное сообщение · #19 Не путай выделение памяти MEM_RESERVE и MEM_COMMIT. В первом случае выделяется кусок адресного пространства, т.е. набор PTE позволяющий отобразить память в определенное место, во втором случае выделяется виртуальная память. Виртуальная память под стек резервируется, но выделяется не сразу, а по мере срабатывания guard page. ----- PGP key ![]() |
|
Создано: 07 августа 2009 02:35 · Поправил: DrGolova · Личное сообщение · #20 А у таких ограничений ноги случаем не из нулевого кольца ростут? Теоретических 8tb это конечно великолепно, но столько non-paged памяти явно и близко никто не даст выделить. Шеддулер наверняка использует память под каждый поток, причем явно не по десять байт на трэд. Есть ли способ резервирования б0льшего количества памяти под нулевое кольцо? Апд: да, уже выяснили что из нулевого. дайте тулзу - померяем разницу на разных конфигурациях и обьемах оперативы. ![]() |
|
Создано: 09 августа 2009 04:09 · Личное сообщение · #21 |
|
Создано: 09 августа 2009 10:02 · Личное сообщение · #22 Хех, если у вас 32-битная винда то вы ограченый количеством потоков. А если 64-битная то количеством GDI объектов. По моим тестам быстрее достигается ограничение "There is a theoretical limit of 65,536 GDI handles per session." см msdn.microsoft.com/en-us/library/ms724291(VS.85).aspx Памяти еще вагон и тележка. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 09 августа 2009 13:08 · Личное сообщение · #23 Gideon Vi пишет: ntldr, а как 2к3 к этому относится? 2к3 всегда работает стабильно, если в системе нет кривых дров. Hexxx пишет: А если 64-битная то количеством GDI объектов. Слава богу GDI приложения врядли могут потребовать запуска тысяч копий. ----- PGP key ![]() |
|
Создано: 09 августа 2009 15:55 · Поправил: Hexxx · Личное сообщение · #24 ntldr пишет: Слава богу GDI приложения врядли могут потребовать запуска тысяч копий. тысячи не надо. Уже 150 копий какого-нить там IE8 будет достаточно чтобы уложить GDI на Vista Business x64 ![]() Можем поприколу померяться сколько у кого получится запустить IE8 на 64-битных платформах ![]() Пока что рекорд для IE7 - 159 штук. А для IE8 почему-то больше 60 не получается. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
|
Создано: 10 августа 2009 18:30 · Поправил: Hexxx · Личное сообщение · #25 Объясните мне кто-нить вот это (чтобы лучше было видно надо нажать "full size" и растянуть раза в полтора): пояснение к тому что на видео: Я запустил на Vista SP2 Enterprise x86 прогу, которая запустила 200 IE7 в режиме SUSPENDED. Потом начал с промежутком в две секунды делать ResumeThread. А теперь зацените поличество потоков (оно было больше чем 2048) и память. В конце вы можете наблюдать как умирает GDI. ----- Реверсивная инженерия - написание кода идентичного натуральному ![]() |
![]() |
eXeL@B —› Программирование —› Thread limit в x64 |
Эта тема закрыта. Ответы больше не принимаются. |