mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-31 11:03:14 +00:00 
			
		
		
		
	 9564e138b1
			
		
	
	
		9564e138b1
		
	
	
	
	
		
			
			Changes since V3: - Do not do endian conversions as they will be done in the host - Report stats that reference a quantity of memory in bytes - Minor coding style updates Changes since V2: - Increase stat field size to 64 bits - Report all sizes in kb (not pages) - Drop anon_pages stat and fix endianness conversion Changes since V1: - Use a virtqueue instead of the device config space When using ballooning to manage overcommitted memory on a host, a system for guests to communicate their memory usage to the host can provide information that will minimize the impact of ballooning on the guests. The current method employs a daemon running in each guest that communicates memory statistics to a host daemon at a specified time interval. The host daemon aggregates this information and inflates and/or deflates balloons according to the level of host memory pressure. This approach is effective but overly complex since a daemon must be installed inside each guest and coordinated to communicate with the host. A simpler approach is to collect memory statistics in the virtio balloon driver and communicate them directly to the hypervisor. This patch enables the guest-side support by adding stats collection and reporting to the virtio balloon driver. Signed-off-by: Adam Litke <agl@us.ibm.com> Cc: Anthony Liguori <anthony@codemonkey.ws> Cc: virtualization@lists.linux-foundation.org Signed-off-by: Rusty Russell <rusty@rustcorp.com.au> (minor fixes)
		
			
				
	
	
		
			37 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			37 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_VIRTIO_BALLOON_H
 | |
| #define _LINUX_VIRTIO_BALLOON_H
 | |
| /* This header is BSD licensed so anyone can use the definitions to implement
 | |
|  * compatible drivers/servers. */
 | |
| #include <linux/virtio_ids.h>
 | |
| #include <linux/virtio_config.h>
 | |
| 
 | |
| /* The feature bitmap for virtio balloon */
 | |
| #define VIRTIO_BALLOON_F_MUST_TELL_HOST	0 /* Tell before reclaiming pages */
 | |
| #define VIRTIO_BALLOON_F_STATS_VQ	1 /* Memory Stats virtqueue */
 | |
| 
 | |
| /* Size of a PFN in the balloon interface. */
 | |
| #define VIRTIO_BALLOON_PFN_SHIFT 12
 | |
| 
 | |
| struct virtio_balloon_config
 | |
| {
 | |
| 	/* Number of pages host wants Guest to give up. */
 | |
| 	__le32 num_pages;
 | |
| 	/* Number of pages we've actually got in balloon. */
 | |
| 	__le32 actual;
 | |
| };
 | |
| 
 | |
| #define VIRTIO_BALLOON_S_SWAP_IN  0   /* Amount of memory swapped in */
 | |
| #define VIRTIO_BALLOON_S_SWAP_OUT 1   /* Amount of memory swapped out */
 | |
| #define VIRTIO_BALLOON_S_MAJFLT   2   /* Number of major faults */
 | |
| #define VIRTIO_BALLOON_S_MINFLT   3   /* Number of minor faults */
 | |
| #define VIRTIO_BALLOON_S_MEMFREE  4   /* Total amount of free memory */
 | |
| #define VIRTIO_BALLOON_S_MEMTOT   5   /* Total amount of memory */
 | |
| #define VIRTIO_BALLOON_S_NR       6
 | |
| 
 | |
| struct virtio_balloon_stat {
 | |
| 	u16 tag;
 | |
| 	u64 val;
 | |
| } __attribute__((packed));
 | |
| 
 | |
| #endif /* _LINUX_VIRTIO_BALLOON_H */
 |