In short, my understanding is Virtual Memory is combined with Physical Memory and page files on disk. Committed Memory, also called committed virtual memory, is used or allocated Virtual Memory.
The amount of committed virtual memory for all the active processes is called the current commit charge. When a process commits a region of virtual memory, the operating system guarantees that it can maintain all the data the process stores in the memory either in physical memory or on disk. That means that a process can run up against another limit: the commit limit.
I suggest reading the following article, especially the «Committed Memory» section.
Pushing the Limits of Windows: Virtual Memory
http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx
Thanks.
This posting is provided «AS IS» with no warranties, and confers no rights.
The commit charge corresponds to virtual memory architecuture.There are tons of info on web regarding the virtual memory architecture, and unless you code the virtual memory / debug it you will not be able to understand many concepts of virtual memory such as ( pages, pagetable, Transaction look aside buffer , page fault etcc. )
Also you have to understand the process architecture ( not processor ) along with thread architecuture ( major ones are understanding process control block and thread control block.)
But i would like to simplify the concepts and try to give out my best.
windows operating system uses 2 major memory models
a) main memory model
b) virtual memroy model
many users have a knowledge about RAM / main memory , but to understand virtual memory a user / programer need to understand many terms memory architecutre.
virtual memroy is nothing but using the disk space to provide applicatoins a feel of using contiguous memory address space. windows OS has 4GB reserved for user mode and 4GB for kernel mode.
to simplify you need to understand major concepts like
page : A page is a ocntiguous block of address space / virtual memory they are divided into 4kbytes. So internally applications are divided into pages in a broader picture.
By said this there is a corresponding page table which is a datastructure which stores logical to physical address mappings ( virtual memory to physical memory )
So now commit charge is nothing but total amount of virtual address space and in other words you can think of commit charge as maximum pagefile usage.
when you open any application the commit charge increases and closed it decreases because its just the usage of the total pagefile.
some of the important issue which one might look with respect to commit charge is
a) commit charge keeps increasing but not decreasing even when applications are opened or closed.
b) commit charge increases and decreases with only some applications installed
at this point you need to check how the page file is configured.
is there any issue with the process / application which might not close the handles etc.
hope this info is useful.
Sainath IRP_MJ_CREATE
Thx for answer.
I know about virtual memory of course 🙂 And about «pages, tables, page file» and so on too. I read , David Solomon\Mark Russinovich’s book «Microsoft Windows Internals».
But there are nothing about commit memory. I have not casually given the reference to article http://blogs.msdn.com/ntdebugging/archive/2007/10/10/the-memory-shell-game.aspx because there is a definition of the term «commit memory». But it’s not clear too.
«Committed Memory – When an application touches a virtual memory page (reads/write/programmatically commits) the page becomes a committed page. It is now backed by a physical memory page. This will usually be a physical RAM page, but could eventually be a page in the page file on the hard disk, or it could be a page in a memory mapped file on the hard disk. The memory manager handles the translations from the virtual memory page to the physical page. A virtual page could be in located in physical RAM, while the page next to it could be on the hard drive in the page file.»
But is lower in comments David Solomon gives the corrections:
Committed Memory – «When an application touches a virtual memory page the page becomes a committed page. It is now backed by a physical memory page»
Not quite: a page becomes a «committed page» when an application commits virtual memory. At that time, the Memory Manager deducts from the system commit limit and charges it to the Commit Charge Total. If and when it is actually touched, then the memory manager backs it with a physical page (that part you had correctly).
Now I have completely got confused 🙂 What is commit memory? Just virtual memory? These two terms are equivalent? And «total commit memory» == «total virtual memory» of all app and OS which now in use? But by screenshot from my server it not so. (http://img38.imageshack.us/img38/3619/commitcharge2.gif)
You said «commit charge is nothing but total amount of virtual address space» — adress space of all app and OS? Or what? I think «no» anyway — If you sum all virtual memory of all applications and OS (like «paged kernel memory») it will not equivalent «commit charge». (look to my screenshot)
(But certainly that we name virtual memory? In task manager and process explorer it’s two different terms.)
More logical definition gives in the WiKi:
«commit charge is a term used in Microsoft Windows operating systems to describe the total amount of virtual address space for which the backing store is the pagefile»
Ah! May be commit memory is just piece of virtual memory for which the backing store is the pagefile? (but it’s strange def. too -> if app has real representation in real memory like hard drive -> it’s now must be «real memory». not «part of virtual»).
We can try to consider it from other point of view. There are another term in task manager (it really «cool» app) — «commit charge limit» -> It is the sum of total amount of real memory and size of a page file. I am right? This term suggests that «total commit memory» (or total commit charge) is the sum of used memory — as «real memory» and «virtual memory in a page file»? But it besides will not be coordinated to my screenshot 🙁
What ideas? I will be glad to any explanations.
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
In short, my understanding is Virtual Memory is combined with Physical Memory and page files on disk. Committed Memory, also called committed virtual memory, is used or allocated Virtual Memory.
The amount of committed virtual memory for all the active processes is called the current commit charge. When a process commits a region of virtual memory, the operating system guarantees that it can maintain all the data the process stores in the memory either in physical memory or on disk. That means that a process can run up against another limit: the commit limit.
I suggest reading the following article, especially the «Committed Memory» section.
Pushing the Limits of Windows: Virtual Memory
http://blogs.technet.com/markrussinovich/archive/2008/11/17/3155406.aspx
Thanks.
This posting is provided «AS IS» with no warranties, and confers no rights.
The commit charge corresponds to virtual memory architecuture.There are tons of info on web regarding the virtual memory architecture, and unless you code the virtual memory / debug it you will not be able to understand many concepts of virtual memory such as ( pages, pagetable, Transaction look aside buffer , page fault etcc. )
Also you have to understand the process architecture ( not processor ) along with thread architecuture ( major ones are understanding process control block and thread control block.)
But i would like to simplify the concepts and try to give out my best.
windows operating system uses 2 major memory models
a) main memory model
b) virtual memroy model
many users have a knowledge about RAM / main memory , but to understand virtual memory a user / programer need to understand many terms memory architecutre.
virtual memroy is nothing but using the disk space to provide applicatoins a feel of using contiguous memory address space. windows OS has 4GB reserved for user mode and 4GB for kernel mode.
to simplify you need to understand major concepts like
page : A page is a ocntiguous block of address space / virtual memory they are divided into 4kbytes. So internally applications are divided into pages in a broader picture.
By said this there is a corresponding page table which is a datastructure which stores logical to physical address mappings ( virtual memory to physical memory )
So now commit charge is nothing but total amount of virtual address space and in other words you can think of commit charge as maximum pagefile usage.
when you open any application the commit charge increases and closed it decreases because its just the usage of the total pagefile.
some of the important issue which one might look with respect to commit charge is
a) commit charge keeps increasing but not decreasing even when applications are opened or closed.
b) commit charge increases and decreases with only some applications installed
at this point you need to check how the page file is configured.
is there any issue with the process / application which might not close the handles etc.
hope this info is useful.
Sainath IRP_MJ_CREATE
Thx for answer.
I know about virtual memory of course 🙂 And about «pages, tables, page file» and so on too. I read , David Solomon\Mark Russinovich’s book «Microsoft Windows Internals».
But there are nothing about commit memory. I have not casually given the reference to article http://blogs.msdn.com/ntdebugging/archive/2007/10/10/the-memory-shell-game.aspx because there is a definition of the term «commit memory». But it’s not clear too.
«Committed Memory – When an application touches a virtual memory page (reads/write/programmatically commits) the page becomes a committed page. It is now backed by a physical memory page. This will usually be a physical RAM page, but could eventually be a page in the page file on the hard disk, or it could be a page in a memory mapped file on the hard disk. The memory manager handles the translations from the virtual memory page to the physical page. A virtual page could be in located in physical RAM, while the page next to it could be on the hard drive in the page file.»
But is lower in comments David Solomon gives the corrections:
Committed Memory – «When an application touches a virtual memory page the page becomes a committed page. It is now backed by a physical memory page»
Not quite: a page becomes a «committed page» when an application commits virtual memory. At that time, the Memory Manager deducts from the system commit limit and charges it to the Commit Charge Total. If and when it is actually touched, then the memory manager backs it with a physical page (that part you had correctly).
Now I have completely got confused 🙂 What is commit memory? Just virtual memory? These two terms are equivalent? And «total commit memory» == «total virtual memory» of all app and OS which now in use? But by screenshot from my server it not so. (http://img38.imageshack.us/img38/3619/commitcharge2.gif)
You said «commit charge is nothing but total amount of virtual address space» — adress space of all app and OS? Or what? I think «no» anyway — If you sum all virtual memory of all applications and OS (like «paged kernel memory») it will not equivalent «commit charge». (look to my screenshot)
(But certainly that we name virtual memory? In task manager and process explorer it’s two different terms.)
More logical definition gives in the WiKi:
«commit charge is a term used in Microsoft Windows operating systems to describe the total amount of virtual address space for which the backing store is the pagefile»
Ah! May be commit memory is just piece of virtual memory for which the backing store is the pagefile? (but it’s strange def. too -> if app has real representation in real memory like hard drive -> it’s now must be «real memory». not «part of virtual»).
We can try to consider it from other point of view. There are another term in task manager (it really «cool» app) — «commit charge limit» -> It is the sum of total amount of real memory and size of a page file. I am right? This term suggests that «total commit memory» (or total commit charge) is the sum of used memory — as «real memory» and «virtual memory in a page file»? But it besides will not be coordinated to my screenshot 🙁
What ideas? I will be glad to any explanations.