Re: TCP/IP-мост, VirtualLock, SetProcessWorkingSetSize

Posted by Аркадий Водяник ( on June 23, 2001 at 23:30:33:

In Reply to: без темы posted by Vitaly V. Bursov on June 23, 2001 at 18:12:33:


: 2. а если каталог обмена заменить сокетами?
: а там уж и SSL рядом... ;)

А вот и работа для заинтересованных лиц:
напишите, Виталий, TCP/IP-мост между каталогами
обмена на разных машинах. То есть для ФБП:Клиента
его сторона моста будет выглядеть как локальный
ФБП:Сервер, а для ФБП:Сервера - его сторона моста -
как локальный ФБП:клиент.
Уверен: такой мост может и должен пользоваться успехом.

: 3. и опять про WinAPI. Есть некий VirtualAlloc/Free
: Не Global/Local, а Virtual. С многообещающими
: флажками...

Для исключения (или значительного уменьшения) свопинга
ФБП:Сервер использует SetProcessWorkingSetSize.
(см 1667, 1831)
Дело в том, что VirtualAlloc + VirtualLock не могут
зафиксировать в памяти требуемое количество страниц.
Фрагменты из документации по WinAPI:

The working set of a process is the set of memory pages
currently visible to the process in physical RAM memory.
These pages are resident and available for an application
to use without triggering a page fault.
Using the SetProcessWorkingSetSize function to set
an application's minimum and maximum working set sizes
does not guarantee that the requested memory will be
reserved, or that it will remain resident at all times.
When the application is idle, or a low-memory situation
causes a demand for memory, the operating system can reduce
the application's working set. An application can use
the VirtualLock function to lock ranges of the application's
virtual address space in memory; however, that can
potentially degrade the performance of the system.
Для VirtualLock: Locking pages into memory may degrade the
performance of the system by reducing the available RAM and
forcing the system to swap out other critical pages to the
paging file. The limit on the number of pages that can be
locked is 30 pages.

На самом деле, не 30, а 40 (в примере ниже для страницы
4096 байт число 163840 - предельное):


void main()
int *p;
p = VirtualAlloc(NULL, 100000000,
printf("%i\n", p);
printf("%i\n", VirtualLock(p, 163840));

Но что такое эти 163840 байт по сравнению с типичным
размером контекста ФБП:Сервера ?!

Пpишедшие ответы: