Как заставить держать систему буфер в памяти
От: begger Украина  
Дата: 20.01.02 16:50
Оценка:
Hallo.
Есть проблема.
Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.
Re: Как заставить держать систему буфер в памяти
От: Кривенко Антон Владимирович  
Дата: 20.01.02 16:55
Оценка:
Здравствуйте begger, Вы писали:

B>Hallo.

B>Есть проблема.
B>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.

VirtualLock для NT. GlobalLock для 9x/NT.
Re[2]: Как заставить держать систему буфер в памяти
От: IT Россия linq2db.com
Дата: 20.01.02 17:08
Оценка:
Здравствуйте Кривенко Антон Владимирович, Вы писали:

B>>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.


КАВ>VirtualLock для NT. GlobalLock для 9x/NT.


Можно ещё попрообовать флаг PAGE_NOCACHE при вызове VirtualAlloc.
Если нам не помогут, то мы тоже никого не пощадим.
Re[3]: Как заставить держать систему буфер в памяти
От: Alex Fedotov США  
Дата: 20.01.02 20:16
Оценка:
Здравствуйте IT, Вы писали:

B>>>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.


КАВ>>VirtualLock для NT. GlobalLock для 9x/NT.


IT>Можно ещё попрообовать флаг PAGE_NOCACHE при вызове VirtualAlloc.


VirtualLock.

Ни GlobalLock, ни PAGE_NOCACHE не имеют никакого отношения к страничному обмену.
-- Alex Fedotov
Re[4]: Да, с GlobalLock я ошибся (+)
От: Кривенко Антон Владимирович  
Дата: 20.01.02 21:45
Оценка:
Здравствуйте Alex Fedotov, Вы писали:

AF>Здравствуйте IT, Вы писали:


B>>>>Создается в приложении буфер определенного размера из которого далее вычитываются данные. Вычитка чувствительна к запаздыванию, если не успеть вычитать то это есть очень плохо. Как заставить систему не скидывать буфер в свап, а держать постоянно в памяти, есть ли способы.


КАВ>>>VirtualLock для NT. GlobalLock для 9x/NT.


IT>>Можно ещё попрообовать флаг PAGE_NOCACHE при вызове VirtualAlloc.


AF>VirtualLock.


AF>Ни GlobalLock, ни PAGE_NOCACHE не имеют никакого отношения к страничному обмену.


по причине лихорадочного вспоминания локов под 9x. Так что в 9x как память залочить (не в драйвере)?
Re[5]: Да, с GlobalLock я ошибся (+)
От: Alex Fedotov США  
Дата: 20.01.02 23:18
Оценка:
Здравствуйте Кривенко Антон Владимирович, Вы писали:

КАВ>по причине лихорадочного вспоминания локов под 9x. Так что в 9x как память залочить (не в драйвере)?


Ничего. Впрочем, и в NT VirtualLock не гарантирует, что страницы не будут выгружаться на диск.

Q94996 INFO: VirtualLock() Only Locks Pages into Working Set
http://support.microsoft.com/support/kb/arcticles/Q94/9/96.asp

Так что реально зафиксировать страницы в памяти можно только в драйвере. Если изначальная задача связана с работой с каким-то устройством (что очень похоже), то лучше переместить критичный код в драйвер.
-- Alex Fedotov
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.