Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Давно уже обнаружил, что при определенных движениях в окне FPD2.6 под ХР на многоядерном процессоре иногда происходит зависание фокспро. И опять-таки уже несколько лет использовал для этого Anvir Task Manager www.anvir.net который позволял отключать лишние ядра, после чего на данную сессию проблем не возникало. Однако после каждой перезагрузки компа приходилось производить процедуру отключения заново, поскольку, хотя там и есть флажок "запомнить", но запоминалось только до конца данной сессии. Но как-то в прошлом году оно надоело, и тогда после некоторых поисков нашел, как можно запомнить подключение процесса NTVDM к одному ядру уже навсегда. Но как-то все то руки не доходили, то не попадалась нужная утилита. На днях наконец-то она попалась "в нужное время в нужном месте".
Т.е. суть проста. Имеется утилита Imagecfg из стандартного набора MS утилит для NT. С ее помощью достаточно пропатчить файл NTVDM.EXE, после чего процесс будет всегда висеть например на нулевом ядре. Кому интересно, вот ссылки, на которые я ориентировался: social.msdn.microsoft.com www.robpol86.com www.markwilson.co.uk Небольшая сложность возникла с самовосстановлением файла. Т.е., когда запустил из командной строки фара в каталоге с утилитой:
то буквально через секунду обнаружил, что восстановилась прежняя версия (что наглядно было видно по дате файла). Пришлось повторить, и тут же, пока не восстановилась, скопировать ее в другую папку. Впрочем разумеется достаточно было и просто скопировать ее к себе в другую папку и проделать все уже безопасно с ней там. После чего загрузился с LiveCD и заменил все файлы NTVDM.EXE на этот новый. у меня их обнаружилось 4 штуки: в System32, в dllcache и еще парочка в ServicePackFiles и где-то в папке типа в LastGood (сейчас там уже нет, так что неохота искать полное имя . После чего, загрузившись и глянув на ядра в свойствах процесса NTVDM через Anvir Task Manager, обнаружил данный процесс уже "самостоятельно" подключившимся к нулевому ядру. Возможно кому-то еще окажется полезным такой несложный способ решения данной проблемы. Чтобы не возникало лишних проблем с поиском утилиты, могу даже пристегнуть ее архивом, она очень небольшая по размеру. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
_vit Сообщений: 5176 Дата регистрации: 29.07.2002 |
А если вставить в прграмму SetProcessAffinityMask()?
|
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
korsak Сообщений: 269 Откуда: Киров (Вятка) Дата регистрации: 27.03.2007 |
вставить то можно, но FPD2.6 не знает такой функции ;)
|
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
XAndy Сообщений: 3803 Откуда: Киев Дата регистрации: 05.02.2004 |
"Баянище", однако
forum.foxclub.ru |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
_vit Сообщений: 5176 Дата регистрации: 29.07.2002 |
Да, виноват, в FPD2.6 кажись еще не было возможности вызывать 32 бит dll. нуууу можно тогда обернуть вызов программы скриптом. Или вызывать через RUN маленькую програмку или опять же скрипт. А если патчить NTVDM.EXE так все ДОС программы вместе с ВДМ будут на одном ядре крутиться. Впрочем если таких программ одна, другая ... |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
urfin Сообщений: 328 Дата регистрации: 17.08.2004 |
Ещё утилита ICEAffinity.exe помогает.
Юзеры запускают FPD26 проги через батник типа ICEAffinity.exe 1 foxprox.exe myfpdprg.exe -T и NTVDM патчить не надо. Исправлено 1 раз(а). Последнее : urfin, 15.03.12 12:43 |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Можно об этой утилите поподробнее? Может быть, кто-то реально ее уже применял для FPD-приложений на разных Windows на протяжении, скажем, нескольких месяцев? Какие есть ограничения? Какие бывают глюки, например, совместно с Каспером или другими программами. Как работает CEAffinity.exe совместно с resfree.com (программа, разгружающая ЦП в DOS-сессии)? Какой наиболее верный способ узнать, сколько ядер в ЦП - не изучать же все спецификации на все процессоры. Что будет, если эту программу запустить на одноядерном процессоре? И еще не очень понятно, можно ли запускать программу через BAT-файл - ведь программа должна запускаться в Windows-режиме (такое сообщение, по крайней мере, можно прочитать в заголовке файла ICEAffinity.exe). Поэтому вопрос - можно ли в пакетном файле запускать и Windows и DOS-приложения в одной командной строке типа ICEAffinity.exe 1 foxprox.exe myfpdprg.exe -T и какие тут могут быть подводные камни? Наверное, я задал слишком много вопросов, но одно дело применять ICEAffinity.exe для игр, а другое дело - для серьезных приложений. Описание программы в Интернете я почитал, но хотелось бы услышать именно практические отзывы. |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
korsak Сообщений: 269 Откуда: Киров (Вятка) Дата регистрации: 27.03.2007 |
пару месяцев работало под win2003, запускалось из батника, глюков не замечено
|
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Сколько пробовал в разное время с разными параметрами, resfree однако толком не снимает например загрузку памяти. Как и древние настройки самого FPD, связанные с этим. Зато, как выяснил путем экспериментов, кардинально решает проблему понижение приоритета процесса ntvdm на самый низкий, например с помощью очень удобной для этого утилиты Anvir Task Manager www.anvir.net о чем собственно уже несколько раз упоминал в разных топиках (см. например поиском по имени утилиты).
Windows "по-настоящему" по сути-то и не загружает DOS-приложения. Они загружаются через специальный эмулятор ntvdm.exe (о пропатчивании которого собственно и топик), что хорошо наблюдается например с помощью все той же вышеупомянутой утилиты Anvir Task Manager, где наглядно еще и видно в цифрах, насколько данный процесс грузит память и процессор при разных установках и настройках в autoexec.nt и config.nt. Т.е. в любом случае в бат-файле идет как бы обычный перечень Windows-приложений, только для DOS-приложений происходит "подстановка", при которой они грузятся уже через эмулятор с использованием настроек своего pif-файла, либо "универсаьного" из папки Windows, если своего нет. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
urfin Сообщений: 328 Дата регистрации: 17.08.2004 |
ICEAffinity используем уже много лет, с тех пор как появились первые камни с виртуальной или реальной моногоядерностью. Проблем нет. Одновременно юзаем Resfree для разгрузки камня и MEMLIMIT для укрощения аппетитов к памяти.
|
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Вообще-то теме больше месяца, но все же...
Попробовал на нескольких компьютерах с 2-х-ядерными процессорами запускать приложение FDP через bat-файл: @ echo off resfree 3 ICEAffinity.exe 1 foxprox.exe myfpdprg.app -T Вроде бы все работает, но когда приложение стало вызывать Word по команде: !cmd /c start winword /x /m то появились страшные тормоза, и Word грузился почти минуту, из чего я сделал вывод, что при таком запуске bat-файла resfree.com по какой-то причине после исполнения строки ICEAffinity.exe 1 foxprox.exe myfpdprg.app -T уже прекратил свою работу. Несложный эксперимент показал, что проблема решается легко и просто. В первом bat-файле (например, 1.bat) записывfется строка: ICEAffinity.exe 1 2.bat Во втором же bat-файле (например, 2.bat) записывается: @echo off resfree 3 rem and other command's... foxprox -t myprog.app После запуска приложения FPD таким способом все отлично работает, и никаких тормозов не наблюдается. Кстати, как сообщает ICEAffinity.exe при запуске с ключом /? , можно задать как конкретный номер ядра, так и указать, что следует использовать оба ядра, если запустить с параметром 3: ICEAffinity.exe 3 В связи с этим возникает вопрос: означает ли это, что при таком запуске с указанием использования одновременно 2-х ядер для приложения FPD (или любого другого консольного приложения) проблема с зависанием исчезнет? И если это так, то лучше всегда запускать ICEAffinity.exe именно с параметром 3, поскольку при этом будут работать оба ядра без каких-либо ограничений. |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Crispy Сообщений: 18571 Дата регистрации: 16.05.2005 |
Все проблемы FPD как раз именно и связаны с неудачной попыткой работы ntvdm с несколькими ядрами. Поскольку даже windows-программы-то далеко не все могут использовать многоядерность, в основном самые новые версии у более-менее солидных производителей, например линейка продуктов Adobe, ну или у всех тех, кто нашел силы и возможность переделать свои старые версии для оптимизации. Но по-крайней мере не поддерживающие многоядерность виндовские проги хоть и не выигрывают ничего от многоядерности, но и не тормозят. В отличие же от них, дос-программы, т.е. использующие виндовский эмулятор ntvdm (взять тот же FPD) могут и затыкаться на нескольких ядрах. И по всему похоже Микрософт даже уже и не собирается оптимизировать ntvdm для многоядерности - в семерке кажется ничего и не изменили. К тому же, как говорят, если и не в восьмерке, то далее, они намерены уже и вовсе отказаться от поддержки дос-приложений. ------------------ В действительности все иначе, чем на самом деле. (Антуан де Сент-Экзюпери) |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
В x64 версиях ОС (начиная с ядра Windows 2003) уже благополучно отказались от этой самой поддержки 16-битных приложений. А серверный ОСи уже походу только x64 будут выпускаться.
------------------ WBR, Igor |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Цитата: Конечно, в этом и есть суть проблемы, но вопрос был в том, что, возможно, ICEAffinity.exe с параметром 3 позволяет "переключать" DOS-приложение с одного ядра на другое (или на 3-е или 4-е ядро в четырех-ядерных процессорах), предотвращая зависание. Разумеется, при этом речь идет не об одновременном использовании нескольких ядер, а о корректном переключении с одного ядра на другое, если вдруг Windows сначала выделил одно ядро DOS-иложению, а потом (через некоторое время после запуска) - другое. Цитата: Ну, во-первых, когда закончится поддержка MS, останутся эмуляторы сторонних производителей. Во-вторых, насколько я наслышан, VFP уготована не лучшая судьба со стороны MS, и не факт, что после этого найдутся эмуляторы VFP сторонних производителей. Так что - спасайся кто может - Меланхолия уже близко. Например, незабвенный О.Бендер, однажды оказавшись в сходной ситуации, пошел в управдомы... |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Пришлось реанимировать старую тему. Но есть еще один нюанс при использовании утилиты ICEAffinity. Если запускать приложение в оконном режиме, например, из пакетного файла:
ICEAffinity.exe 1 2.bat или просто ICEAffinity.exe 1 myapp.exe то в этом случае в названии окна прописывается маршрут и имя файла, которое было указано после ICEAffinity.exe В случае запуска пакетного файла 2.bat пишется такое имя для окна пакетного файла 2.bat C:\windows\system32\cmd.exe В случае запуска приложения без пакетного файла имя окна будет такое: d:\mydir\myapp.exe Если даже iceaffinity запустить из пакетного файла, и для значка этого пакетного файла задать имя, то после вызова приложения или другого пакетного файла, указанного после iceaffinity, исходное имя для окна пакетного файла не сохраняется. Я даже пробовал использовать рекуррентный запуск одного и того же пакетного файла - это тоже не помогает. Что называется, мелочь - а для пользователя приятно А особенно приятно отвечать на вопросы пользователя: "А че это за фингня тут написана?" Может быть, есть какая-нибудь хитрость, которая позволит обойти этот не очень приятный момент (с именем окна приложения, запущенного после ICEAffinity.exe) ? |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Команду TITLE в батнике пробовал?
------------------ WBR, Igor |
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности | |
---|---|
Simple777 Автор Сообщений: 33855 Дата регистрации: 05.11.2006 |
Удивительное рядом! Признаться, bat-файлы я изучал в лучшем случае до Win98 (и даже это утверждение - легкое лукавство ), и поэтому о существовании команды title даже не подозревал. Как я понимаю, эта команда появилась после Win98. Возможно, уже была в Millenium? И, наверное, впервые появилась в Win2000. Поскольку трудно себе представить Win98 на многоядерном процессоре, использование команды Title полностью закрывает поднятую проблему. Для тех, кому лень искать формат команды Title, приведу пример ее использования (вдруг кому-нибудь пригодится?) Команда Title записывается в первой строке пакетного файла (ну, может быть, это не обязательно должна быть первая строка - не проверял):
Мое приложение Igor Korolyov в очередной раз удивил глубоким знанием предмета... Есть много, друг Горацио, такого, что и не снилось нашим мудрецам... |
© 2000-2024 Fox Club  |