/tools/kvm/kvm_stat/

.cs.unc.edu/cgit/cgit.cgi/litmus-rt.git' title='litmus-rt.git Git repository'/>
aboutsummaryrefslogblamecommitdiffstats
path: root/mm/memcontrol.c
blob: 8e4be9cb2a6a7642601516e3587d151dcea586f4 (plain) (tree)
1
2
3
4
5
6
7
8




                                                  


                                             













                                                                       
                     
                          
                      
                             
                              

                               
                        
                       


                           
                           
                          
                            
                              
                     
 

                        
                                                     
                                         
 







                                                                                
                                                                            
 
  







                                                                    

                                                                  








                                          
                                              




                                                                         
                                                                               

                                                        
                                












                                                             

                                             
                            


                                                  

                                                    

                                              












                                                            





                                                                              


                                                                     






                                                  
          



                                                     

                                                              
           
                                        
 




                                                 
                                                                    


                                                                     
                                                       

                                              



                                                                          
                                         
                               
 

                                   
          
                                                               

                                    

  


                                         
                                                                             
                                                                 
                                                                      


                       


                                          
                                         

                                     


                                                            
                      

  








                                                        
                                                                    
 


                                                                


                                                  
                                            
                            
 
                                      
                                
                                                                                
            
                                                                              

                   
                                                   

                                                                 
                                                   
                                                                  
                  

 
                                   

                                                             


                                                       
                                   




                                                
 


                            



                                                                        
                                                          










                                                                

 
                                                                   





                                                                         
                                                              
 







                                                             



                                                                       
























                                                                            












                                                                               
 




                                                                  
 
                                  


                                                   
                                                    
                       



                                                                               

                                      
                                       

                                

 
                                          
 

                                                      
 



                                                                     
 
                                  
                       
 
                                      



                                                                    





                                             

 
                                                                  
 

                                       
 
                                  

                                      



                                                                    

                                
                       
 
                                      
                                       

                                            
 
  




                                                                              
   
                                                                         
 











                                                                            

 













                                                                        


                                                                
                                  


                                            

 




                                                                              
                                                         



                          
  














                                                                          
 
  



                                                                    






                                              



                                                                           
                                            

                                              
                                              



                                                                             
                                            
                                      
                                              

 
                                                                                      


                               

                                     



                                                                         


























                                                                   




                         










                                                                              



















                                                                               







                                                                    






                                      




                                                                          
                                                             





                                   
                                     


                                         
                                               
 
                          
                                                     
                              
 

                                                             
                                       
                              

                                

                                                  
                                             
                                 
 
                       
                                                                




                                                   



                        




                                                                    
                                   

                          
                                                                                









                                                          


                                                                        




                                         

                                              






                                                                          


                                                                             









                                                                    








                                                                         
                                                     

                              
                                       

                      


                                                     
                                                       



                                                
                                                          






                                                                             


                          
                                

                                                                          
                                                    
              
                                                                  

     




                                            
                                                         
                                        

 











                                                                   















                                                            



















                                                                            
                                                                       
                                                                     
                                                   
                                                                    

                                     
 
                                                      

                                      
                                                       
                                                                      

                                 
                                                                               
                                                                             
                                                           
                                                                            
                                                              



                   















                                                                       


                                                                     
   
                                                        

                                                                  
 
                                                
                                                    
                                     






                                                     
          

                                                                      


                                                                       


                                                     
                             
                
                                   
         



                                               
 


                                    
 
                                                                          


                                             

                                                                        




                                                                   






                                                                               
                                             
                                   
 

                                                                               

                                 

                  




                                                                            
                  
                   

                                                                 

                                    
                                  
                                                            
                                                                                   
                                                              
                                                                           
                         
                                   
                 
         




                           
 
















                                                                              
  
                                                                               






                                                              


                                                                        




                                                           

                                                                     
                                   
                       
         
                             
                  
                                             
 
                                                    
 
                               
 
 






                                                            
                                                   














                                                                           
                              
                                     





                                                       








                                     



                                                              


                            

                                                   
                












                                                           
                                     


                                              





                               
 

                                           
 
                                                                      
                           

                           



                                          




                                     
 
                                                         
 


                               

                                                       
                         
         
 
       




                                               


                                                                


                   




















                                                                            
                                                                
                        


                                                   
                 

 

                                                                   
 
                                  
                         

                               










                                                                            
                                                           
                                                                     

 

                                                                    
 


                                      
                                  
                         

                               







                                                                               

                                                                          



                                       






                                               

                                 
                                       

         










                                                                 
                              
 

                                                                   
                                                                    

















                                                                     

 





                                                                          




                                                                     
                
 
                                  



                                   






                                                                           
                                                      

                                   
                   



                                                             





                                                            



                                                                               
                                  



                                      
                                                         
                                                                           
                                                        


                                                             


                                                                                
           
                                                     



                                                              




                                                                       
                                                            
 



                                                            
                                  



                                                   

                                                             



                           
  
                                 
   
                          
                                                                       
 
                               
                                      
                                       
 
                                  
                            
 
                                
                            
 
          
                                            
           

                                                 
                            
 
                             
 

                             
















                                                                       
         
 



                                                                         
                                                     
                                





                                                                              
 
                                      
                               
 


                                                                       
 
                   


                               
                    

 

                                                




                                             





                                                                          
                                 


                                                                         














                                                                        

                                     







                                                                  
 









                                                               
 
      
 
  

                                                                          
   
                                                                            

                               
                                      
                    
 
                                  

                         


                                      

                                     
         
                               
 
                  
                                                                             

                                   
                   
                   
 
 
                                                

                                                           
 























                                                             
                   


                                                            
          













                                                                          
           

                                                   
 
 
  



                                                                            


                                                 
 
                                      


                                               
                                  
                         



                                                              
                           
                         

            
                                                                                
                                                              







                                       

                                     
                                                            
                                                       



                                                     
                       

                    
                             



                                              









                                                                            

                              





                                                              

                                                                             

                                                              
 




































                                                                          
                                                                         

                                                                          




                                      
  
                                                                     

                                                                            
                                                              
                                                                     
 

                                       
                                      
                                  
                               
                    
 

                                                 
                               
 





                                                  
                                                          
                                       
                                                                       
                              




                                                                     
                                                                       

                                 
                                                               
 
                                                                  
                                   
                              






                                                                        
         
 


                                      





                                                        
                                                                        
 


                                                    
                                              
 
                           

                   


                                 
             
                                    
                             



                                                                            
                                 

                                                                       
                        
                                                          
                                                                          
                                                

                                                                              
                                                                      


                                                      
                         





                                                                    
                               




                           

            

                                                                                


                             

                                                                  



                                                  




                                              

                                                                            
                                
                                     


                                                               

         
                        




                                                                  

 





                                                                         





































                                                                              
                                                                   
 


















                                                                      
 



                                  

                                                                    
 
                                                              
                       


                               


                                          


                                                                        


                                 
                                                                  

                                                                        





                                                      

 



























                                                                               
                                                                    

                               
                       

                                         


                                   
                           



                                                           

                         



                                                               

                      
                 

 





                                                          

                                                           

  

                                                                         
 








                                                                  
                                                               
         

                                       

                                                         
                                          








                                                                     


                                                                         



                                                                           

                                                                     
         






                                                                              

                      
                                                                            


























                                                                             


                 











                                                                               
 






                                                    


                      

                                                                    

                                                                     
                               
         




                                                

                        


                 
 

                                           
                                         
                                                            
                                            

          
                                             
                                                                
                                            


                                            
                                         
                                                            
                                                 
                                            


                                  
                                                              
                                            
                                            
          
         
                               
                                                  
          



                                                        




                                                        




                                                         

  








































                                                                              


                                                                           
                                       
                        
                             







                                                                             


                                                        

                         
 

                                      


                                                     

                                                      
         


                 




                                                                           





                                                                           


                                                
                                     
 

                                                
            
                                    

                
                                     


                   







                                                                    


                                                                  
                                                     
 

                 


                                                         
                                          




                           






                                                  

                                                                   
                                       


                                               

 








                                                                               
 


                                           
                                                             







                                           
                                         

                                                                
                                        
                 
 


                                        
 


                                                              
                    
                                   
                                     
                              
                
                                                            

                                                           
 


                                                              






                                                                          



                                                    
                                       
                                                 
 

                                                         
                                    
                         
         
                               
                                

 



                                                            
                                           

 


                                                        







                                                                        




                                                        







                                                              

 




                                                          
                                    
          

                                                                      
           
                                      

 



                                          
                                              

                                        
                                       
                        
  









                                               
/* memcontrol.c - Memory Controller
 *
 * Copyright IBM Corporation, 2007
 * Author Balbir Singh <balbir@linux.vnet.ibm.com>
 *
 * Copyright 2007 OpenVZ SWsoft Inc
 * Author: Pavel Emelianov <xemul@openvz.org>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

#include <linux/res_counter.h>
#include <linux/memcontrol.h>
#include <linux/cgroup.h>
#include <linux/mm.h>
#include <linux/pagemap.h>
#include <linux/smp.h>
#include <linux/page-flags.h>
#include <linux/backing-dev.h>
#include <linux/bit_spinlock.h>
#include <linux/rcupdate.h>
#include <linux/mutex.h>
#include <linux/slab.h>
#include <linux/swap.h>
#include <linux/spinlock.h>
#include <linux/fs.h>
#include <linux/seq_file.h>
#include <linux/vmalloc.h>
#include <linux/mm_inline.h>
#include <linux/page_cgroup.h>
#include "internal.h"

#include <asm/uaccess.h>

struct cgroup_subsys mem_cgroup_subsys __read_mostly;
#define MEM_CGROUP_RECLAIM_RETRIES	5

#ifdef CONFIG_CGROUP_MEM_RES_CTLR_SWAP
/* Turned on only when memory cgroup is enabled && really_do_swap_account = 0 */
int do_swap_account __read_mostly;
static int really_do_swap_account __initdata = 1; /* for remember boot option*/
#else
#define do_swap_account		(0)
#endif

static DEFINE_MUTEX(memcg_tasklist);	/* can be hold under cgroup_mutex */

/*
 * Statistics for memory cgroup.
 */
enum mem_cgroup_stat_index {
	/*
	 * For MEM_CONTAINER_TYPE_ALL, usage = pagecache + rss.
	 */
	MEM_CGROUP_STAT_CACHE, 	   /* # of pages charged as cache */
	MEM_CGROUP_STAT_RSS,	   /* # of pages charged as rss */
	MEM_CGROUP_STAT_PGPGIN_COUNT,	/* # of pages paged in */
	MEM_CGROUP_STAT_PGPGOUT_COUNT,	/* # of pages paged out */

	MEM_CGROUP_STAT_NSTATS,
};

struct mem_cgroup_stat_cpu {
	s64 count[MEM_CGROUP_STAT_NSTATS];
} ____cacheline_aligned_in_smp;

struct mem_cgroup_stat {
	struct mem_cgroup_stat_cpu cpustat[0];
};

/*
 * For accounting under irq disable, no need for increment preempt count.
 */
static inline void __mem_cgroup_stat_add_safe(struct mem_cgroup_stat_cpu *stat,
		enum mem_cgroup_stat_index idx, int val)
{
	stat->count[idx] += val;
}

static s64 mem_cgroup_read_stat(struct mem_cgroup_stat *stat,
		enum mem_cgroup_stat_index idx)
{
	int cpu;
	s64 ret = 0;
	for_each_possible_cpu(cpu)
		ret += stat->cpustat[cpu].count[idx];
	return ret;
}

/*
 * per-zone information in memory controller.
 */
struct mem_cgroup_per_zone {
	/*
	 * spin_lock to protect the per cgroup LRU
	 */
	struct list_head	lists[NR_LRU_LISTS];
	unsigned long		count[NR_LRU_LISTS];

	struct zone_reclaim_stat reclaim_stat;
};
/* Macro for accessing counter */
#define MEM_CGROUP_ZSTAT(mz, idx)	((mz)->count[(idx)])

struct mem_cgroup_per_node {
	struct mem_cgroup_per_zone zoneinfo[MAX_NR_ZONES];
};

struct mem_cgroup_lru_info {
	struct mem_cgroup_per_node *nodeinfo[MAX_NUMNODES];
};

/*
 * The memory controller data structure. The memory controller controls both
 * page cache and RSS per cgroup. We would eventually like to provide