Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Вниз

Можно ли научить винду не использовать своп...   Найти похожие ветки 

 
vidiv ©   (2006-12-19 14:45) [0]

... для конкретного приложения? Не скидывать его в своп, даже если оно свернуто.


 
tesseract ©   (2006-12-19 14:53) [1]

Низя, в своп скидывается страницы памяти, какая из них какая - определить сложновато.


 
vidiv ©   (2006-12-19 17:17) [2]

понял, спасибо


 
oldman ©   (2006-12-19 18:59) [3]


> Можно ли научить винду не использовать своп для конкретного приложения?


А на хрена, извините???


 
tesseract ©   (2006-12-19 20:27) [4]


> oldman ©   (19.12.06 18:59) [3]


Производительность повышаем :-)

Хотя kernel-драйверы и системная область насколько помню  в своп не попадают........


 
vidiv ©   (2006-12-21 15:26) [5]


>
> А на хрена, извините???

Есть приложение ZDE (Zend Development Environment), написанное на джаве, как я понимаю. если его свернуть, подержать там немного (поиграть например, или в инете полазить), а потом развернуть, то примерно минут 5 оно будет тупить откровенно... Хотелось этого избежать =)


 
DrPass ©   (2006-12-21 15:40) [6]


> Хотя kernel-драйверы и системная область насколько помню
>  в своп не попадают

Винда - настолько продвинутая ОСь, что она умеет свопить свое ядро, и активно этим пользуется :)
Впрочем, эта фича при желании отключается ключиком в реестре.


 
tesseract ©   (2006-12-21 17:46) [7]


> DrPass ©   (21.12.06 15:40) [6]


Сиситемная область ядра не выгружается. Выгружаються вроде только usermode части драйверов и др мусор.


 
Vendict ©   (2006-12-23 17:55) [8]

DrPass ©   (21.12.06 15:40) [6]
Винда - настолько продвинутая ОСь, что она умеет свопить свое ядро, и активно этим пользуется :)
Впрочем, эта фича при желании отключается ключиком в реестре.


можно, ради интереса, информацию в оригинале или ссылочку ?


 
tesseract ©   (2006-12-23 19:49) [9]


> Vendict ©   (23.12.06 17:55) [8]


А. Саламон М. Руссинович  "Внутреннее устройство Windows 2000"


 
Чапаев ©   (2006-12-23 19:58) [10]

> [8] Vendict ©   (23.12.06 17:55)
Отключить можно любым твикером, только следует учитывать, что после такого тюнинга перестанет работать standby и hibernate, о чём обычно предупредить забывают, а юзер начинает матюкаться на глючность софта проклятого МС.


 
Petr V. Abramov ©   (2006-12-24 03:32) [11]

> что после такого тюнинга перестанет работать standby и hibernate
и правильно матюгается, нефиг людям такие ключи давать, после их использования и появляются программы, которые по гигу жрут на приложение, которое по функционалу под ДОС пойдет, а по геморрою разработки - под вин 3.11


 
ors_archangel ©   (2006-12-24 05:25) [12]


>  Можно ли научить винду не использовать своп...

VirtualLock: The VirtualLock function locks the specified region of the process"s virtual address space into physical memory, ensuring that subsequent access to the region will not incur a page fault. ©msdn.
Только вот не вижу VirtualLock не для своего процесса, но если всё-таки получится выполнить его для всех commited-страниц из-под нужного процеса, то это должно дать нужный эффект. Как выполнить под другим процессом? Ну, можно подключиться к нему через DebugActiveProcess, например (я как-то загружал доп. библиотеки в чужие процессы таким образом), с CreateRemoteThread - наверно сложнее (я как-то пробовал, чё-то ничерта не получилось, но тогда немного другое нужно было), пока больше вариантов в голову не приходит…


 
Чапаев ©   (2006-12-24 10:57) [13]

> [11] Petr V. Abramov ©   (24.12.06 03:32)
Слюну медикам сдавать не пробовал? Вроде змеиный яд для лекарств нужен очень. Опять же, уважаемым человеком станешь, все дела...


 
iZEN ©   (2006-12-24 11:44) [14]


> vidiv ©   (19.12.06 14:45)
>
> ... для конкретного приложения? Не скидывать его в своп,
>  даже если оно свернуто.

Нет, сынок, это фантастика. (с)
Ядро физически не допустит этого для приложений.


 
tesseract ©   (2006-12-24 11:54) [15]


> iZEN ©   (24.12.06 11:44) [14]


Win3.11 допускал, он не обладал вытесняющей многозадачностью :-)


 
iZEN ©   (2006-12-24 11:58) [16]


> tesseract ©   (24.12.06 11:54) [15]
>
>
> > iZEN ©   (24.12.06 11:44) [14]
>
>
> Win3.11 допускал, он не обладал вытесняющей многозадачностью
> :-)

Win3.11 == DOS 6.22


 
Piroxyline ©   (2006-12-24 12:29) [17]

iZEN ©   (24.12.06 11:58) [16]
А почему шестой, а не седьмой? Насколько мне известно, Вынь 3.1 можно запустить и на четвертом...


 
tesseract ©   (2006-12-24 12:41) [18]


> Piroxyline ©   (24.12.06 12:29) [17]


зачем если он входил в комплект поставки Win3.11 ?

7 DOS был урезан по самый command.com.


 
Чапаев ©   (2006-12-24 12:59) [19]

Если мне не изменяет склероз, седьмой ДОС появился в составе 95 винды.


 
Petr V. Abramov ©   (2006-12-24 17:04) [20]

> Чапаев ©   (24.12.06 10:57) [13]
[11]  тебя очень задело, но не можешь сформулировать, чем?


 
Чапаев ©   (2006-12-24 18:36) [21]

> [20] Petr V. Abramov ©   (24.12.06 17:04)
Полной бессмысленностью.


> и правильно матюгается
Юзер, который не знает, что сделал? Что правильного?


> нефиг людям такие ключи давать
Кто даёт? Твикер, я или виноват Микрософт, что такой ключ предусмотрел?


> появляются программы, которые по гигу жрут на приложение,
> которое по функционалу под ДОС пойдет, а по геморрою разработки
> - под вин 3.11
Например? Если Вася Пупкин написал приложение, которое гиг сжирает и ничего не делает, виноват опять МС? Или речь о каких-то реальных приложениях?


 
Vga ©   (2006-12-24 18:45) [22]

> [19] Чапаев ©   (24.12.06 12:59)

А еще помнится я где-то читал, что Win 3.11 с MS-DOS 7 не уживается.


 
Petr V. Abramov ©   (2006-12-24 19:04) [23]

> Чапаев ©   (24.12.06 18:36) [21]
> Кто даёт? Твикер, я или виноват Микрософт, что такой ключ предусмотрел?
конечно ты.
смотри на вещи проще и иногда улыбайся.


 
tesseract ©   (2006-12-24 19:58) [24]


> > нефиг людям такие ключи даватьКто даёт? Твикер, я или
> виноват Микрософт, что такой ключ предусмотрел?


Заметь он его только в MSDN опубликовал. Это недокументированная возможность.


 
ors_archangel ©   (2006-12-24 20:07) [25]


> ors_archangel ©   (24.12.06 05:25) [12]
> >  VirtualLock

Только чтобы ОС домустила "закрепление" всех страниц, сначала нужно ещё вызвать SetProcessWorkingSetSize.


 
ors_archangel ©   (2006-12-24 20:12) [26]

Например, чтобы выполнить закрепление страниц для процесса можно создать нить, подобную такой:

type
 status: (connectStatus, startStatus, restartStatus, runStatus, finishedStatus);
 pi: TProcessInformation;    
 dbg: TDebugEvent;  
 hp: THandle;               // process handle
 pid: dword;                // process id
 imagebase: dword;          // process image base
 primaryThread: THandle;    // primary thread handle
 primaryTID: dword;         // primary thread id
 context: TContext;         // primary thread context
 tid: dword;                // current thread id  
 ep: dword;                 // entry point (its really entry point only if we create process)
 code: array of byte;
 codeSize: integer;  
begin try
 result := 0;
 status := connectStatus;
 ...здесь подключаемся к процессу через CreateProcess или DebugActiveProcess...
 while WaitForDebugEvent(dbg, INFINITE) do with dbg do begin
   if dwDebugEventCode = CREATE_PROCESS_DEBUG_EVENT then begin
   { new process }
     pid := dwProcessID;
     primaryTID := dwThreadID;
     // если мы сами создали процесс, то получаем инфу о нём:
     hp := createProcessInfo.hProcess;
     primaryThread := createProcessInfo.hThread;
     context := GetFullThreadContext(primaryThread);
     ep := dword(createProcessInfo.lpStartAddress);
     imagebase := dword(createProcessInfo.lpBaseOfImage);
     ...иначе не писал, но то же, думаю, не сложно...
     Log("process: pid: %d tid: %d eip: %x",[pid,primaryTID,ep]);
     status := startStatus;
     if not ContinueDebugEvent(pid,dwThreadId, DBG_EXCEPTION_NOT_HANDLED) then break;
   end else begin
   { handle event }
     tid := dbg.dwThreadId;
     case dwDebugEventCode of
         CREATE_THREAD_DEBUG_EVENT: Log("%d create thread %d",[pid,tid]);
         EXCEPTION_DEBUG_EVENT:
           begin
             Log("%d.%d exception %s at %x",[pid,tid,ExceptionName(dbg), dword(exception.ExceptionRecord.ExceptionAddress)]);
             if (dwDebugEventCode = EXCEPTION_DEBUG_EVENT) and
               (Exception.ExceptionRecord.ExceptionCode = EXCEPTION_BREAKPOINT)
             then begin
               if (dwProcessId = pid) and (tid = primaryTID) then
               case status of
                 startStatus: // выполнение нашего кода
                 begin
                 { перед запуском процесса, но после загрузки всех библиотек,
                   либо сразу при подсключении к процессу с помощью DebugActiveProcess }

                   WriteCode(hp, ep, сode); // записываем код, кот-й хотим выполнить под процессом
                   FlushInstructionCache(hp, pointer(ep), codeSize);  // just in case
                   status := restartStatus;
                 end;
                 restartStatus: // восстановление оригинального кода
                 begin
                   RestoreCode(hp, ep, code);
                   SetFullThreadContext(primaryThread, context);
                   FlushInstructionCache(hp, pointer(ep), codeSize);
                   status := runStatus;
                 end;
               end;
               if not ContinueDebugEvent(pid,tid, DBG_CONTINUE) then break;
               continue;
             end;
           end;
         EXIT_PROCESS_DEBUG_EVENT:
           begin
             Log("%d.%d exit process",[pid,tid]);
             status := finishedStatus;
           end;
         EXIT_THREAD_DEBUG_EVENT: Log("%d.%d exit thread",[pid,tid]);
         LOAD_DLL_DEBUG_EVENT: Log("%d.%d load dll",[pid,tid]);
         UNLOAD_DLL_DEBUG_EVENT: Log("%d.%d unload dll",[pid,tid]);
     end;
     if not ContinueDebugEvent(pid,tid, DBG_EXCEPTION_NOT_HANDLED) then break;
   end;
 end;
 if (status > connectStatus) and (status < finishedStatus) then
   repeat
     TerminateProcess(hp, TERM_BY_DBGR);
     if not WaitForDebugEvent(dbg, INFINITE) then break;
   until not ContinueDebugEvent(pid, dbg.dwThreadId, DBG_CONTINUE);
 except
   on e: exception do begin
     ContinueDebugEvent(dbg.dwProcessId, dbg.dwThreadId, DBG_CONTINUE);
   { попытаемся прикончить процесс }
     repeat
       TerminateProcess(hp, TERM_BY_DBGR);
       if not WaitForDebugEvent(dbg, INFINITE) then break;
       if not ContinueDebugEvent(pid, dbg.dwThreadId, DBG_CONTINUE) then break;
     until not ProcessStillActive(hp);
     ExitThread(DBGR_ERREXIT);
   end;
 end;
end;

Здесь WriteCode, собственно записывает код, который нужно выполнить под другим процессом, в данном случае мы должны проVirtualQueryить память процесса, и VirtualLock"нуть commited-страницы, или что-то в этом духе.
Я писал для случая, когда мы сами CreateProcess, но не сложно будет переделать и на DebugActiveProcess, я надеюсь…


 
iZEN ©   (2006-12-25 10:52) [27]

А вот Linux и FreeBSD используют SWAP только при условии, когда весь объём свободного ОЗУ исчерпан. На гиге ОЗУ, если не используются приложения, работающие с большими файлами (GIMP, например, или CinePaint) можно вообще удалить строку автомонтирование раздела SWAP из /etc/fstab и использовать это пространство (после переформатирования) под обычную файловую систему с пользовательскими файлами. Нет SWAP - нет и подкачки.


 
Чапаев ©   (2006-12-25 10:53) [28]

Как ни удивительно, на Винде тоже можно запретить использование файла подкачки...


 
Anatoly Podgoretsky ©   (2006-12-25 12:18) [29]

> iZEN  (25.12.2006 10:52:27)  [27]

Про FreeBSD не знаю, но специалисты Линукс говорят об бредовости такой идеи как удаление СВОП и я согласен с их аргументами. Тоже относится и к Виндоус


 
iZEN ©   (2006-12-25 12:36) [30]


> Anatoly Podgoretsky ©   (25.12.06 12:18) [29]
>
> > iZEN  (25.12.2006 10:52:27)  [27]
>
> Про FreeBSD не знаю, но специалисты Линукс говорят об бредовости
> такой идеи как удаление СВОП и я согласен с их аргументами.
>  Тоже относится и к Виндоус

Безболезненно отключал SWAP в Linux, FreeBSD и задавал нулевой размер pagefile.sys в WindowsXP. Нормально. Вот только ни одной из систем ни тепло ни холодно от этого не становилось -- быстродействие не изменялось!! (ОЗУ=1ГБ)


 
Anatoly Podgoretsky ©   (2006-12-25 12:48) [31]

> iZEN  (25.12.2006 12:36:30)  [30]

Я не говорил, что это приведет к каким то болезням, я говорил об бредовости данной идеи, вместо того, что бы выбросить неиспользуемое из памяти в своп и освободить данную память для реальных задач, находятся люди которые готовы себе наносить вред, при том, как в Линукс, так и в Виндоус.
Если в Виндоус 95 это еще имело хоть какой то положительный эффект, но начиная с 98 потеряло всякий смысл.


 
Игорь Шевченко ©   (2006-12-25 12:52) [32]

tesseract ©   (21.12.06 17:46) [7]


> Сиситемная область ядра не выгружается. Выгружаються вроде
> только usermode части драйверов и др мусор.


Ты такую траву бльше не кури и пиво с коноплей не пей. Во-первых, у драйверов нету usermode частей, во-вторых, код ядра и драйверов прекрасно выгружается в своп, буде на то желание системы и драйвера. В-третьх, фамилия Дэвида пишется как Соломон, и в их с Руссиновичем книжке как написано подтверждение моим словам.

Для примера, такой драйвер, как подсистема Win32 (win32k.sys) в самом начале содержит вызов mmPageEntireDriver - догадайся, что она делает.


 
tesseract ©   (2006-12-25 12:57) [33]


> Игорь Шевченко ©   (25.12.06 12:52) [32]


Драйвера состоят из многих компонентов, фильтров и usermode api, мониторы и интерфейсы драйверов например работают в usermode или как сервисы попыка их выгрузить может привести к BSOD.


 
tesseract ©   (2006-12-25 12:58) [34]


>  буде на то желание системы и драйвера


Как правило оно нечасто появляеться :-)


 
BiN ©   (2006-12-25 13:02) [35]


> Игорь Шевченко ©   (25.12.06 12:52) [32]

Игорь, ты случайно не помнишь, где Руссинович/Соломон/Рихтер (?) говорил о неком флаге в PE-заголовке, влияющем на поведение деспетчера памяти при сворачивании окон процесса. Хоть убей, не могу найти название флага, но точно помню, что при его установке система начитнает активно сбрасывать страницы памяти "свернутого" процесса. Сдается мне, что это как раз сабжевый случай. (хотя, по-моему, решение сабжа уже никого не интересует...)


 
Игорь Шевченко ©   (2006-12-25 13:12) [36]

tesseract ©   (25.12.06 12:57) [33]


> Драйвера состоят из многих компонентов, фильтров и usermode
> api, мониторы и интерфейсы драйверов например работают в
> usermode


С этого места пожалуйста подробнее. В каком месте драйверы состоят из usermode api, мне крайне интересно.


 
_silver ©   (2006-12-25 13:12) [37]

>[33] tesseract(c) 25-Dec-2006, 12:57
>
>> Игорь Шевченко ©   (25.12.06 12:52) [32]
>
>
>Драйвера состоят из многих компонентов, фильтров и
>usermode api, мониторы и интерфейсы драйверов например
>работают в usermode или как сервисы попыка их выгрузить
>может привести к BSOD.

Попытка не приведёт ни к чему.
К бсоду может привести обращения к выгруженной памяти на уровне IRQL выше PASSIVE_LEVEL. На самом же PASSIVE_LEVEL ядро послушно загрузит выгруженные страницы.


 
Чапаев ©   (2006-12-25 13:14) [38]


> Вот только ни одной из систем ни тепло ни холодно от этого
> не становилось -- быстродействие не изменялось!
Говорят, фотошоп зверски тупит, если совсем отключить подкачку, для него надо оставлять хотя бы пять метров свопа. Сам не проверял.


 
Игорь Шевченко ©   (2006-12-25 13:17) [39]

BiN ©   (25.12.06 13:02) [35]

#define IMAGE_FILE_AGGRESIVE_WS_TRIM         0x0010  // Agressively trim working set


 
BiN ©   (2006-12-25 13:18) [40]


> Игорь Шевченко ©   (25.12.06 13:17) [39]
>
> BiN ©   (25.12.06 13:02) [35]
>
> #define IMAGE_FILE_AGGRESIVE_WS_TRIM         0x0010  //
> Agressively trim working set

О, спасибо!



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2007.01.14;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.015 c
11-1143587172
Fantasy
2006-03-29 03:06
2007.01.14
Служба


2-1166687132
Клара
2006-12-21 10:45
2007.01.14
DBChart


2-1166430158
Любитель
2006-12-18 11:22
2007.01.14
Как можно показать n кнопок на панеле


2-1166703886
Галинка
2006-12-21 15:24
2007.01.14
XML -> DataSet


15-1166563362
Knight
2006-12-20 00:22
2007.01.14
TListView должен автоматом прокручиваться...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский