US 9,811,281 B2
Multi-tenant memory service for memory pool architectures
John Alan Bivens, Ossining, NY (US); Koushik K. Das, New York, NY (US); Min Li, San Jose, CA (US); Ruchi Mahindru, Elmsford, NY (US); Harigovind V. Ramasamy, Ossining, NY (US); Yaoping Ruan, White Plains, NY (US); Valentina Salapura, Chappaqua, NY (US); and Eugen Schenfeld, South Brunswick, NJ (US)
Assigned to International Business Machines Corporation, Armonk, NY (US)
Filed by International Business Machines Corporation, Armonk, NY (US)
Filed on Apr. 7, 2016, as Appl. No. 15/92,699.
Prior Publication US 2017/0293447 A1, Oct. 12, 2017
Int. Cl. G06F 12/00 (2006.01); G06F 12/08 (2016.01); G06F 3/06 (2006.01); G06F 12/0808 (2016.01)
CPC G06F 3/0631 (2013.01) [G06F 3/064 (2013.01); G06F 3/065 (2013.01); G06F 3/067 (2013.01); G06F 3/0619 (2013.01); G06F 3/0653 (2013.01); G06F 12/0808 (2013.01); G06F 2212/62 (2013.01)] 19 Claims
OG exemplary drawing
 
1. A method of managing memory in a multi-tenant compute environment, comprising
providing a memory resource pool;
for a given workload, allocating memory resources from the memory resource pool to a set of processors;
organizing data for the given workload in the allocated memory resources according to a data structure; and
determining whether re-organization of the data in the data structure for the given workload would increase performance of the data structure or conserve memory used by the data structure; and
upon a determination that re-organization would increase performance or conserve memory, taking a given action to manage the data, wherein the given action detects data similarity or duplicates and, in response thereto, eliminates given data from the allocated memory resources;
wherein data similarity or duplicates are detected by:
identifying data blocks that are common to multiple tenants or multiple processes;
upon identifying common data blocks, determining whether the common data blocks are stable according to a configurable threshold;
upon a determination that the common data blocks are stable, eliminating duplicate common data blocks;
associating an instance of the common data blocks as a shared common data block; and
providing the multiple tenants or multiple processes a pointer to the shared common data block.