:: Visual Foxpro, Foxpro for DOS
Простое решение проблемы подвисания 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
Небольшая сложность возникла с самовосстановлением файла.

Т.е., когда запустил из командной строки фара в каталоге с утилитой:

imagecfg -a 0x1 c:\windows\system32\ntvdm.exe

то буквально через секунду обнаружил, что восстановилась прежняя версия (что наглядно было видно по дате файла).
Пришлось повторить, и тут же, пока не восстановилась, скопировать ее в другую папку. Впрочем разумеется достаточно было и просто скопировать ее к себе в другую папку и проделать все уже безопасно с ней там.
После чего загрузился с LiveCD и заменил все файлы NTVDM.EXE на этот новый. у меня их обнаружилось 4 штуки: в System32, в dllcache и еще парочка в ServicePackFiles и где-то в папке типа в LastGood (сейчас там уже нет, так что неохота искать полное имя .
После чего, загрузившись и глянув на ядра в свойствах процесса NTVDM через Anvir Task Manager, обнаружил данный процесс уже "самостоятельно" подключившимся к нулевому ядру.
Возможно кому-то еще окажется полезным такой несложный способ решения данной проблемы.
Чтобы не возникало лишних проблем с поиском утилиты, могу даже пристегнуть ее архивом, она очень небольшая по размеру.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
_vit

Сообщений: 5176
Дата регистрации: 29.07.2002
А если вставить в прграмму SetProcessAffinityMask()?
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
korsak

Сообщений: 269
Откуда: Киров (Вятка)
Дата регистрации: 27.03.2007
вставить то можно, но FPD2.6 не знает такой функции ;)
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
XAndy

Сообщений: 3803
Откуда: Киев
Дата регистрации: 05.02.2004
"Баянище", однако
forum.foxclub.ru
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
_vit

Сообщений: 5176
Дата регистрации: 29.07.2002
korsak
вставить то можно, но FPD2.6 не знает такой функции ;)

Да, виноват, в FPD2.6 кажись еще не было возможности вызывать 32 бит dll.
нуууу можно тогда обернуть вызов программы скриптом.
Или вызывать через RUN маленькую програмку или опять же скрипт.

А если патчить NTVDM.EXE так все ДОС программы вместе с ВДМ будут на одном ядре крутиться.
Впрочем если таких программ одна, другая ...
Ratings: 0 negative/0 positive
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
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
urfin
Ещё утилита ICEAffinity.exe помогает.

Можно об этой утилите поподробнее? Может быть, кто-то реально ее уже применял для FPD-приложений на разных Windows на протяжении, скажем, нескольких месяцев?
Какие есть ограничения? Какие бывают глюки, например, совместно с Каспером или другими программами. Как работает CEAffinity.exe совместно с resfree.com (программа, разгружающая ЦП в DOS-сессии)? Какой наиболее верный способ узнать, сколько ядер в ЦП - не изучать же все спецификации на все процессоры. Что будет, если эту программу запустить на одноядерном процессоре? И еще не очень понятно, можно ли запускать программу через BAT-файл - ведь программа должна запускаться в Windows-режиме (такое сообщение, по крайней мере, можно прочитать в заголовке файла ICEAffinity.exe). Поэтому вопрос - можно ли в пакетном файле запускать и Windows и DOS-приложения в одной командной строке типа ICEAffinity.exe 1 foxprox.exe myfpdprg.exe -T и какие тут могут быть подводные камни? Наверное, я задал слишком много вопросов, но одно дело применять ICEAffinity.exe для игр, а другое дело - для серьезных приложений. Описание программы в Интернете я почитал, но хотелось бы услышать именно практические отзывы.
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
korsak

Сообщений: 269
Откуда: Киров (Вятка)
Дата регистрации: 27.03.2007
пару месяцев работало под win2003, запускалось из батника, глюков не замечено
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
resfree.com (программа, разгружающая ЦП в DOS-сессии)

Сколько пробовал в разное время с разными параметрами, resfree однако толком не снимает например загрузку памяти. Как и древние настройки самого FPD, связанные с этим. Зато, как выяснил путем экспериментов, кардинально решает проблему понижение приоритета процесса ntvdm на самый низкий, например с помощью очень удобной для этого утилиты Anvir Task Manager www.anvir.net о чем собственно уже несколько раз упоминал в разных топиках (см. например поиском по имени утилиты).

Simple777
можно ли в пакетном файле запускать и Windows и DOS-приложения в одной командной строке типа ICEAffinity.exe 1 foxprox.exe myfpdprg.exe -T

Windows "по-настоящему" по сути-то и не загружает DOS-приложения. Они загружаются через специальный эмулятор ntvdm.exe (о пропатчивании которого собственно и топик), что хорошо наблюдается например с помощью все той же вышеупомянутой утилиты Anvir Task Manager, где наглядно еще и видно в цифрах, насколько данный процесс грузит память и процессор при разных установках и настройках в autoexec.nt и config.nt.
Т.е. в любом случае в бат-файле идет как бы обычный перечень Windows-приложений, только для DOS-приложений происходит "подстановка", при которой они грузятся уже через эмулятор с использованием настроек своего pif-файла, либо "универсаьного" из папки Windows, если своего нет.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
urfin

Сообщений: 328
Дата регистрации: 17.08.2004
ICEAffinity используем уже много лет, с тех пор как появились первые камни с виртуальной или реальной моногоядерностью. Проблем нет. Одновременно юзаем Resfree для разгрузки камня и MEMLIMIT для укрощения аппетитов к памяти.
Ratings: 0 negative/0 positive
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, поскольку при этом будут работать оба ядра без каких-либо ограничений.
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Crispy

Сообщений: 18571
Дата регистрации: 16.05.2005
Simple777
В связи с этим возникает вопрос: означает ли это, что при таком запуске с указанием использования одновременно 2-х ядер для приложения FPD (или любого другого консольного приложения) проблема с зависанием исчезнет? И если это так, то лучше всегда запускать ICEAffinity.exe именно с параметром 3, поскольку при этом будут работать оба ядра без каких-либо ограничений.

Все проблемы FPD как раз именно и связаны с неудачной попыткой работы ntvdm с несколькими ядрами.
Поскольку даже windows-программы-то далеко не все могут использовать многоядерность, в основном самые новые версии у более-менее солидных производителей, например линейка продуктов Adobe, ну или у всех тех, кто нашел силы и возможность переделать свои старые версии для оптимизации. Но по-крайней мере не поддерживающие многоядерность виндовские проги хоть и не выигрывают ничего от многоядерности, но и не тормозят.
В отличие же от них, дос-программы, т.е. использующие виндовский эмулятор ntvdm (взять тот же FPD) могут и затыкаться на нескольких ядрах. И по всему похоже Микрософт даже уже и не собирается оптимизировать ntvdm для многоядерности - в семерке кажется ничего и не изменили. К тому же, как говорят, если и не в восьмерке, то далее, они намерены уже и вовсе отказаться от поддержки дос-приложений.


------------------
В действительности все иначе, чем на самом деле.
                                      (Антуан де Сент-Экзюпери)
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
В x64 версиях ОС (начиная с ядра Windows 2003) уже благополучно отказались от этой самой поддержки 16-битных приложений. А серверный ОСи уже походу только x64 будут выпускаться.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006
Цитата:
Crispy

Все проблемы FPD как раз именно и связаны с неудачной попыткой работы ntvdm с несколькими ядрами.

Конечно, в этом и есть суть проблемы, но вопрос был в том, что, возможно, ICEAffinity.exe с параметром 3 позволяет "переключать" DOS-приложение с одного ядра
на другое (или на 3-е или 4-е ядро в четырех-ядерных процессорах), предотвращая зависание. Разумеется, при этом речь идет не об одновременном использовании
нескольких ядер, а о корректном переключении с одного ядра на другое, если вдруг Windows сначала выделил одно ядро DOS-иложению, а потом (через некоторое время после запуска) - другое.

Цитата:
Igor Korolyov

В x64 версиях ОС (начиная с ядра Windows 2003) уже благополучно отказались от этой самой поддержки 16-битных приложений.

Ну, во-первых, когда закончится поддержка MS, останутся эмуляторы сторонних производителей. Во-вторых, насколько я наслышан, VFP уготована не лучшая судьба со стороны MS, и не факт, что после этого найдутся эмуляторы VFP сторонних производителей. Так что - спасайся кто может - Меланхолия уже близко. Например, незабвенный О.Бендер, однажды оказавшись в сходной ситуации, пошел в управдомы...
Ratings: 0 negative/0 positive
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) ?
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Команду TITLE в батнике пробовал?


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Простое решение проблемы подвисания FPD2.6 при многоядерности
Simple777
Автор

Сообщений: 33855
Дата регистрации: 05.11.2006


Удивительное рядом! Признаться, bat-файлы я изучал в лучшем случае до Win98 (и даже это утверждение - легкое лукавство ), и поэтому о существовании команды title даже не подозревал. Как я понимаю, эта команда появилась после Win98. Возможно, уже была в Millenium? И, наверное, впервые появилась в Win2000.

Поскольку трудно себе представить Win98 на многоядерном процессоре, использование команды Title полностью закрывает поднятую проблему.

Для тех, кому лень искать формат команды Title, приведу пример ее использования (вдруг кому-нибудь пригодится?)

Команда Title записывается в первой строке пакетного файла (ну, может быть, это не обязательно должна быть первая строка - не проверял):

Title Мое приложение
После запуска пакетного файла в названии окна будет написано:

Мое приложение



Igor Korolyov в очередной раз удивил глубоким знанием предмета...


Есть много, друг Горацио, такого, что и не снилось нашим мудрецам...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 24 (Гостей: 24)

© 2000-2024 Fox Club 
Яндекс.Метрика