Если NT не хватает памяти (некоторый процесс активно растет в памяти а другие процессы 'спят') и она решает что надо выгрузить страничку в pagefile,
то
1. Как она выбирает процесс-жертву ?
2. У жертвы как она выбирает страницу ?
Спасибо
Вопрос о виртуальной памяти
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Вопрос о виртуальной памяти
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 3459
- Joined: 29 Oct 2002 20:08
- Location: US
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dngenlib/html/msdn_ntvmm.asp
Managing a Working Set of Pages for Each Process
Another part of the VMM gets pages into the transitional state. The thread that gets transitional pages must continually decide what data is most deserving of replacement on a process-by-process basis. The algorithm for deciding which page to replace is typically based on predicting the page that is least likely to be needed next. This prediction is influenced by factors such as what page was accessed least often and what page was accessed the longest time ago. In Windows NT, the component responsible for making these predictions is called the working-set manager.
When a process starts, the VMM assigns it a default working set that indicates the minimum number of pages necessary for the process to operate efficiently (that is, the least amount of paging possible to fulfill the needs of the process without starving the needs of other processes). The working-set manager periodically tests this quota by stealing Valid pages of memory from a process. If the process continues to execute without generating a page fault for this page, the working set is reduced by one, and the page is made available to the system. This test is performed indiscriminately to all processes in the system, providing the basis for the free pool of pages described above. All processes benefit from this pool by being able to allocate from it on demand.
The act of stealing a page from a process actually occurs in two stages. First, the working-set manager changes the PTE for the page to indicate an invalid page in transition. Second, the working-set manager also updates the page-frame database entry for the physical page, marking it as either Modified or Standby, depending on whether the page is dirty or not.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Таким образом в стабильной системе (сервис который работает с неким буфером постоянного очень долго) система будет пытаться это буфер украсть, даже если памяти до хрена ?
Вот к чему это приводит. Есть процесс (SQL server) который выполняет запросы
Он набирает кэш и раздувается в памяти
Потом weekend его никто не трогает
Он сдувается хотя памяти до хрена
Запускаем кверь в поенедьник - timeout от http
Лечится похоже AWE memory, но все равно нехорошо
Нет ли способа пометить процесс как неподчиняющийся этому правилу ?
Вот к чему это приводит. Есть процесс (SQL server) который выполняет запросы
Он набирает кэш и раздувается в памяти
Потом weekend его никто не трогает
Он сдувается хотя памяти до хрена
Запускаем кверь в поенедьник - timeout от http
Лечится похоже AWE memory, но все равно нехорошо
Нет ли способа пометить процесс как неподчиняющийся этому правилу ?
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Уже с Приветом
- Posts: 3459
- Joined: 29 Oct 2002 20:08
- Location: US
Dmitry67 wrote:Таким образом в стабильной системе (сервис который работает с неким буфером постоянного очень долго) система будет пытаться это буфер украсть, даже если памяти до хрена ?
Вот к чему это приводит. Есть процесс (SQL server) который выполняет запросы
Он набирает кэш и раздувается в памяти
Потом weekend его никто не трогает
Он сдувается хотя памяти до хрена
Запускаем кверь в поенедьник - timeout от http
Лечится похоже AWE memory, но все равно нехорошо
Нет ли способа пометить процесс как неподчиняющийся этому правилу ?
Программно в рамках Win32 API не трудно пометить страницы как невыгружаемые - VirtualLock. Если разработчики SQL Server этого не сделали по какой опции, то это можно сделать самому, написав extended stored procedure на си.
Как вариант - на сервере уменьшить pagefiles до минимума. Тогда останется только своппинг страниц кода, что выключается опцией в registry:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\DisablePagingExecutive (что всегда, ИМХО, полезно с современными объемами памяти).
-
- Уже с Приветом
- Posts: 3459
- Joined: 29 Oct 2002 20:08
- Location: US
-
- Уже с Приветом
- Posts: 1976
- Joined: 08 Jun 1999 09:01
- Location: SPb -> SFBA -> Beaverton, OR
Народ, я тут работу ищу, и вчера мне предложили пройти некий quiz, где, в частности, был вопрос по virtual memory. Я этот quiz успешно прошел, но "мучают смутные сомнения"(С) по поводу правильности ответа на этот вопрос. У кого какие мысли ( желательно с комментарием )?
Вот, собственно, вопрос:
============================================
Consider a virtual memory with M resident pages and a page reference sequence
p1, p2, . . ., pN
of N distinct requests. Assume that physical memory is initially filled with unrelated pages, N = 2M, and a FIFO page replacement algorithm is used. If the access pattern is p1, p2, . . ., pN repeated three times, then the number of page faults is
(A) N/2 (B) N (C) N + 3 (D) 2N (E) 3N
=============================================
Вот, собственно, вопрос:
============================================
Consider a virtual memory with M resident pages and a page reference sequence
p1, p2, . . ., pN
of N distinct requests. Assume that physical memory is initially filled with unrelated pages, N = 2M, and a FIFO page replacement algorithm is used. If the access pattern is p1, p2, . . ., pN repeated three times, then the number of page faults is
(A) N/2 (B) N (C) N + 3 (D) 2N (E) 3N
=============================================
-
- Уже с Приветом
- Posts: 990
- Joined: 27 Mar 2002 10:01
- Location: Palo Alto, CA
-
- Уже с Приветом
- Posts: 4468
- Joined: 21 Sep 2000 09:01
- Location: Sammamish, WA
шпиён wrote:Программно в рамках Win32 API не трудно пометить страницы как невыгружаемые - VirtualLock.
Это всё не так просто как кажется - во-первых, есть предел на максимальное количество страниц, заблокированных в памяти, который по умолчанию не очень велик; во-вторых, если ОС не в состоянии обеспечить заказанное количество заблокированных страниц, то working set процесса в один прекрасный момент может оказаться полностью выгруженным, причём в ситуации, когда на самом деле обошлось бы выгрузкой нескольких страниц. Так что, к сожалению, простого решения нет.
Для SQL Server в качестве костылей можно, например, вдобавок к обычной для выходных активности (full backup, DBCC REINDEX, DBCC INDEXDEFRAG и пр.) соорудить job для агента, который в случае отсутствия других активных задач периодически делал бы неблокирующие онлайновые операции, скажем, DBCC SHOWCONTIG.
Cheers
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
tengiz wrote:Для SQL Server в качестве костылей можно, например, вдобавок к обычной для выходных активности (full backup, DBCC REINDEX, DBCC INDEXDEFRAG и пр.) соорудить job для агента, который в случае отсутствия других активных задач периодически делал бы неблокирующие онлайновые операции, скажем, DBCC SHOWCONTIG.
Спасибо
Забавно конечно
"Прогрев" SQL server перед работой... Ладно, задумал ряд экспериментов... О результатах доложу...
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014
-
- Posts: 14
- Joined: 04 Jun 2001 09:01
- Location: Pandora's box
Я прошу прощения за столь наивный вопрос, но чекбокс Reserve physical memory for SQL Server не решает проблемы? Мне казалось, он именно для этого и предназначен.
SQL Server Properties (Memory Tab)
Use this tab to view or specify the following options.
Options
Dynamically configure SQL Server memory
Specify that Microsoft® SQL Server™ memory be configured immediately after you make changes to the server properties.
Use a fixed memory size
Specify a fixed memory size for SQL Server.
Reserve physical memory for SQL Server
Reserve physical memory space for SQL Server equal to the memory setting. This means Microsoft Windows NT® 4.0 or Windows® 2000 does not swap out SQL Server's pages even if the pages can be used more readily when SQL Server is idle.
SQL Server Properties (Memory Tab)
Use this tab to view or specify the following options.
Options
Dynamically configure SQL Server memory
Specify that Microsoft® SQL Server™ memory be configured immediately after you make changes to the server properties.
Use a fixed memory size
Specify a fixed memory size for SQL Server.
Reserve physical memory for SQL Server
Reserve physical memory space for SQL Server equal to the memory setting. This means Microsoft Windows NT® 4.0 or Windows® 2000 does not swap out SQL Server's pages even if the pages can be used more readily when SQL Server is idle.
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
-
- Уже с Приветом
- Posts: 28294
- Joined: 29 Aug 2000 09:01
- Location: SPB --> Gloucester, MA, US --> SPB --> Paris
Короче проблема обнаружилась и была совсем не там
При создании теста была залита таблица с 100 MLN записями
Чтобы было быстрее индексы убрали
А потом после заливки создали
Но не все
В итоге время от времени проходил (незаметно так как это был из BizTalk) один большой толстый и страшный TABLE SCAN
И он полностью 'выбивал' кэш из под системы.
Кстати жаль что в SQL server нельзя это контролировать (кеши)
При создании теста была залита таблица с 100 MLN записями
Чтобы было быстрее индексы убрали
А потом после заливки создали
Но не все
В итоге время от времени проходил (незаметно так как это был из BizTalk) один большой толстый и страшный TABLE SCAN
И он полностью 'выбивал' кэш из под системы.
Кстати жаль что в SQL server нельзя это контролировать (кеши)
Зарегистрированный нацпредатель, удостоверение N 19719876044787 от 22.09.2014