From patchwork Tue Oct 8 22:37:47 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zi Yan X-Patchwork-Id: 13827085 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 18774CF042C for ; Tue, 8 Oct 2024 22:38:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4D03F6B0095; Tue, 8 Oct 2024 18:38:01 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 480B26B0096; Tue, 8 Oct 2024 18:38:01 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 284C86B0098; Tue, 8 Oct 2024 18:38:01 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 089C76B0095 for ; Tue, 8 Oct 2024 18:38:01 -0400 (EDT) Received: from smtpin11.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 57B48140C94 for ; Tue, 8 Oct 2024 22:37:59 +0000 (UTC) X-FDA: 82651899120.11.51E2372 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2089.outbound.protection.outlook.com [40.107.223.89]) by imf06.hostedemail.com (Postfix) with ESMTP id 050FD18000A for ; Tue, 8 Oct 2024 22:37:57 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=guqdgYE5; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf06.hostedemail.com: domain of ziy@nvidia.com designates 40.107.223.89 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1728426943; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:in-reply-to: references:dkim-signature; bh=H6WCnoEIqSYQbubOcNssCApo3QS+5U4vCZcGxPQnwXE=; b=J3P82UdIaw/Nh/gnMoopS1HRYjaHV0VBbNWCI2/eNBiQ/jZONFKwejVqPlfSTZ1dr80PsT Hgt5uIY9LYUSi6PrLLb7oq9G/65f35Ik0v/VAoxYXdyqXbqpC56bfOEIIezItNQlXhn19+ io9Da2aHHLAsDmnT1WqoYxDX6CYN+/g= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1728426943; a=rsa-sha256; cv=pass; b=JXBJ1y4o5ca6otTyj0oq2ew5M8veYjx7U/lEHHbvgRUuQXWrFtOcw4+AxGxaYGU3dHgnMh Np4ithyM+sAA85nNKL+SDGevDpycBQRNTyPGW1CW8THVxWv+4kR24QQy2SBW5v/5Dos+0X 6TnEOkrCnRu0Tx01yb606ynGeJ4f1bs= ARC-Authentication-Results: i=2; imf06.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=guqdgYE5; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf06.hostedemail.com: domain of ziy@nvidia.com designates 40.107.223.89 as permitted sender) smtp.mailfrom=ziy@nvidia.com; dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=x2kVbvINNM+pb9P5uFZ6s5CVUCBjC31U8L1Y0nWxNGWijTCfkuwHW1QIrl6ZHR3gjVnzK2VqpVRdNJQNVv1jN5RDV6YaHyOCldSOITLVr/qtUiKYDTm8NryO/XXf2z1TRZ5CGSbhjHBYe+czAZMxct1t10bh3SpLbGzGGHV2+yjF0a5zobTJFzWKWCAa5IkDSzvNe/RQ+ooS9hCrvVM/r6QRKTCPPck7Ie+uPUykcpJESIJSUpVcBQ4gadkCKuMe6ZqLI+9RsBZvnXbvQ48MvfGBtVJ+1cKTUM5W/OPenj52RxdIyTmWKBkUvw04oWRm+mIoBW5gyshasTcaPhV0nA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=H6WCnoEIqSYQbubOcNssCApo3QS+5U4vCZcGxPQnwXE=; b=QPGCoe5+Vfo2AtVHUq5fmvX+LjYkpd4XYxjtghrXYHuIk7x0DP2vc1vZRD5rWBsCGPLIWe05p9QmU0di4B7UxBTkAQdtUVYIdP+VidmwiKMDMT4f4NsyR1WpZxzyRfQIKfeqdGb7Dk6JOPwDWX/tsTnVDR6V0Ik4vbwxb5mRPQP4gF6DsthgDcm1IGv041KvTpc7oN9RbRQA9r4SjAPTcUBt8P5BWrSSNMH0tMGoKCTdurIEt29NQvMPEKsuj+fQvgplD1xTy32hJ5e+h0sf1DGvNbwdqqptnrIHGSORJrbIkRRzLTvo++H1/n3znU3p0syHbYdZtqAh4jN6uVLbQw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=H6WCnoEIqSYQbubOcNssCApo3QS+5U4vCZcGxPQnwXE=; b=guqdgYE5SDPGIUc5P+bKdfV6xFj0PjIS9/SbB1su8AIoF2CfAX3k1STtFGAmiMzt+Qj5uk1yP+ue+lXlcy++bsLEpguoVimnduxfhck6ri8UWy9P5RZ8fk+nUsg0EfWEtipzUsmKZB3azsZhhY9N/WqXqqVEtWTLGkH/vr461Ziumoe6mdgSXA7MCPZRg25VvNN+GLlrGSEq61KSTFNztaIl0iMpKGvu4MryajyTvvoKZvMPoXru5RyY6g8hvKsa+Sdyezn7d8ZZ7UHGi/V5ztYclqbSGbmCZFqb/xCvTB7GAlr1IN95DYV0Iw2p8nVA79RBFPTxgJNUi64kUjmF7w== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by CY5PR12MB6322.namprd12.prod.outlook.com (2603:10b6:930:21::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8026.23; Tue, 8 Oct 2024 22:37:52 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%6]) with mapi id 15.20.8048.007; Tue, 8 Oct 2024 22:37:51 +0000 From: Zi Yan To: linux-mm@kvack.org, "Matthew Wilcox (Oracle)" Cc: Ryan Roberts , Hugh Dickins , "Kirill A . Shutemov" , David Hildenbrand , Yang Shi , Miaohe Lin , Kefeng Wang , Yu Zhao , John Hubbard , linux-kernel@vger.kernel.org, Zi Yan Subject: [RFC PATCH 0/1] Buddy allocator like folio split Date: Tue, 8 Oct 2024 18:37:47 -0400 Message-ID: <20241008223748.555845-1-ziy@nvidia.com> X-Mailer: git-send-email 2.45.2 X-ClientProxiedBy: MN2PR11CA0009.namprd11.prod.outlook.com (2603:10b6:208:23b::14) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|CY5PR12MB6322:EE_ X-MS-Office365-Filtering-Correlation-Id: cdb624c0-a59f-424e-4e8f-08dce7e9d7fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014; X-Microsoft-Antispam-Message-Info: FOuc9XxB5kVczqj/Ee5rPrrWSQJDAMU1lWNBePcgXRLzAvcqoe52jhoHYE2K8T//K5BRgGUfZcROghy0i0cQMR3EFAhbd+tBfsh3to0Q6QAcPpw/D08OYg+1Qb7npwiwMUiiFvkphB0VUvdHvbo5cAh4ujoMm/CKgTYbTGDZIu7TXW5vae5lochg0Pe8l5Bu+gXpS26ZoNB/ZaP6yzblHdf9Rg1H5LRpthKq1x1PL8cVG2+pulBqdrKJ/uPC7eHIfI+A0drndkn8tis2W6EO/r8W8x8iEgSwIGs6kl2s+GRKtSuC1OtahtsHb04n3kNSVuHH2j72cJQloSLWCvZtpXTy2elRMxLjw0Uqg520HF2rmsHI3tcrqnZNTu12pZvtYqEJ1cT7zAP5/bkHj3SeqP2Jp85qggGrJdd0k7h4Lpz8tbdYlCTL9TdNlU+WuUTwyy51v+r6Iqk1mahyfobpcyholTaxyxs2JmKcG4vq/8lKw4CdU/KfeGH/Pv8he/TXkw13LmlPBgwu672NG5+zg3uth1cBEtTV/FUtVK8hZPZt7GcKMF4LeUX4IKd8w4P9S/UGUYLjPscyZHYxKfAVQPivdHKXNIkwhFRrO1E/Us90us7yPF3q2jAdJ9tZH7UVVVpbdIL4pqUMWe5FIbO/MdpCfYL6RDKicauCSvZ77v26B7Hq8F4pqZy7lP+cgXYkprEqmwmQB4F/nb+RcwSvO7N/3CAoRmZR7AIM+WWGpIJTDX+VkpvMvHjK7oglJkoltbTR2wEU5NM6mj7ncmct5H+vg6d95YoSG+l9hMGnSeg+QiUaENVL7N3VwkCj6hRcJlhYgqIb5hETz/9p0CY+i4m51vIeP4N8xfhVME6/dyyizhqoq77M3SEoj7bsQ0y9hPfLcANwM1W5UoPcLzsTx8T1dEUE2ZyjaPSu7fxmaWrknG1UgOKQPi8YiyAx9Y7S4dn7CJzysYdVhLFVsZS0XCUs0QwW2Ko3GMLbxHX1kA1ZHnlE6G/XA2FzC7bu+8ZhMlX3u0RzmtZ6MI0RvCQuzV2LN3CiC8ZcEPMQue+OWU2+JUYyrJ1Y0NGuM9sqtoMIFb0hdHz1ANIQwXvTGJejmToUsMzcOOc00jyrA9KD7NeQHC+EcZs38+LpjjhpblmAoErdjpHKfm16gQOEYaHMrVJaCJDh58bGiDsmV8UyVOEWTgh1wFELAgizxMsyDPOoL68nhrE6wP2yNn1sS4rytSY6wLbRnPToJ0KOguP8407xZtbI/lJRcUAc0BOve7z2yqyKwhXCVzJ94kOGZXWzPg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mCMwUw825M/nCeEmHoS7uuYG565N/9kQ5Sh0C1XUDFq0ntReQIy1Pm9qEntVtW2czcKhAc0I7e9d2iAL2hDPCtiZzwChXV6+24wdYBdUj5RO53dLeGEzd3gmEtb72GSHVHggZTBeSZZhnjjnBR8HXBopfqrDmn0AZaCnmfQeco56y/ZrL0G/sVJJkbd9dk25SbszW1eJ05Gv/MpxrMkPM9yMIn5KwTCx5jMkHKr/UGbvMYyGSzTXoTOpqKlOSCoSUWpJCW6sCIcJ1WrykJ6l3YdH0dtvgeF+O79kiHWEoY2uodawWopdN0rgI+1/b/4qLeKILMTHM372YOnSEvIfXox+KLlEfwjZ4sW5CTEcg53yOESSCGnUp+iBPSmgFh7gUFk0RKydpcZYHHh07iJ0g+kyEiV9ocUogDjC6S4YD40w0UbAdPH2pv5Yc3HvN2kmYFg7rGpt1DjtlptT0yhyXZevD91t2Yh8WtPpJEGKf6cI4JTWbQFnvwsQ+j7s50mCeIT8ImcrFT+rb3UTxrX8mop85cAmd44+HvXxtQcFFOIlRf5goBLq24UT94/c5m25ZFMREnkNH2q9D1n5gUnELoMMNZFdSe+ODhzeHiRzSLu8VZjJ+RVKFhgpaRUHj//i8UHq5D3m+1pqdmJixnQkK5msPr0gLAeQ5BY07Lk9ayf11Lo7IHCx5r8YS4b0GNUIPeu2wTt7NqP8cPGgdd2sZz6TxfjU/XTLwEOE4tQO0YdltBzUZz3+xtt0tJPKdRDiOICFIAGaeBXA7WfTcYRghn7r2cFx7Ma3xyCeSl9PqMivoHekrjZsWm0xAIMZRFagccfBQ1U6UhD9JUv2itqKDWHN73dqhmMUO1p1g+pn2aKGNyL6SvhZSiaJgmpVbVbrFk56fZf2DiaPMXkP79rAY7GBNBIOvY64Y7GJ1dGrfbX4cHbIaopnxtEthh8j0FRUVthZK7XgKmCAUnQeXk1/rN/NXibvFrRPGPSjx3rNTkisc84GndeZI9+etnwNlJky+Ak+Ts5H9p51z8aI6gNrGHBag+bhtYLJ4MZPCbx9S2lbOltf9QBbIYVDvti6Vn8/xDwPUggs1vnI6qaLKXIu6rXvtY06kDoP0Z7mSnzZmDQYAcbqLYWM4ox2J+3GAx4gtKGtHvy9+BUKfejDXRX4htGmhi8WYsb0AWGp4fv6rW321G9DGXTeW6NGypxV4vpIIr4uTD4TwEx0brOj8wK7i4obKE9zqt97kbCPMVEnAzDieBNMrEeVVYXRc51vZK9sArSlr1oazeabkgWJfeWevRiNKpGEZQurOpe3fedIzYg+hhkVFgfAS9gIQyHJZLhWKMJzgLeDeXi2MXKJD9xI/HBEX8MfX8U6Quf+IvIxrGdAQd7nRcDyO7+jUfU0Jq6lXGCL0mh+4CPBK9/clpU45rodhmAczZ2otk8duXxQJpBuF9ZvlYDKJUYE8dSW2ghFX1V0lPSTC+NSwgU3PSeaD2yEbkIx+ZBvlB7y9BoEbzExhgGhS0a/FAD6aqdix46sIOmuuu9ZVVjUKeXX/u+L+YkvOtKD0h+47rB8u+pxRNc= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: cdb624c0-a59f-424e-4e8f-08dce7e9d7fd X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Oct 2024 22:37:51.8574 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: /PEIIbmQChBKGbw4lQj3BQPOxhLYN5vgTxQrVyzvGYEYF+Ra6IqmxDdd2gFT06ek X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY5PR12MB6322 X-Rspamd-Queue-Id: 050FD18000A X-Stat-Signature: pap4k3z7osz6t7byetom1uigx8wx3zqk X-Rspamd-Server: rspam09 X-Rspam-User: X-HE-Tag: 1728427077-775325 X-HE-Meta: U2FsdGVkX1/gN9Bv2a/YMs2aN0w6aRPlMkCkg4+UJOigcLXB5dz7l4LKXDh9n4jJ8QfP2XG037SP/9P4iKAzlDMoYKw18MHqhluT1a+Cxd3tjM4L0BLiqTxx5CPf9kENxyTm53fjntdYgW5UYNNrA2OPhDr1p09fI0h0tdNTY1wptvmIfxmt4I3ccodCpzZIG1fqJOb9V4F+ClJtbB+aB42WIzwE9DR7vHl8GxGleMPVjL7pGN0Aa42W9v4mwy+ts0l8I+SJLjXoF+XNG6sBx7r+ytiE6FxEAVqIwIGAkAXcgsnRTRTje1sSI9TqqLhlxj9KaLPYWLyd77qDcyvofUgLvIfdcSNrmMGzcIwcpMQWdZ/sUoxiQP+nnV1BMyHn1s5A8+NZjCV2g01/wkrtiGqpPZ6cH8grobXysgMTrRJ44R3dejoOHJOqwkl2yIfab1yP6amiynKWzWg5cCK7DiK3uNEVIhhlxnA0ucORKDD4h7Yj9tWTIsnRmPz8rW+X1c6P/kmaJe8YbOqpB1jEIL4hYDbRJIzWpHppDc6o0FPmnIFE6LfaS+lD8UqJA42BRqyigZXnS1MuKaaBnjDJevkq/Zr+6TSyRS3DITmSRTRmCXzfMsKW7KxbSejlrjf4271Gd4NIxzhfsoKVr8KqTd2eqkPlt00315c2duElx/aejwhe9ezk5vDl4x+9Hj3SRE6+RQD64i69w1jpucAu7vtZ81pDXiLzoVqS8OY3Tl7MvDCmT1q5eWkllYcA7pwojXnYa+agXNUn56UrryP8QLUK2SBzziyzb+uOY3YCgUkBX02qHqys7t59zf+xr9nh8Rlj3+1M2R2U/GZ3ESW3iDMAACX0+Zpc/iS/tZczlBbeoDTCOdgLU5YT6gsiDVpk7sV2SweZnRltEc+sGdwDyxF1ztZ3x2g7lKs9kPxFdsFvY7C6Qk98HN9oHgf5QCLRvJfW/OwqDwiSZM3ZmB6 iI2QqO6D KAMOBbNSQD2q42JfcMX6POvK02DMqdt/mdQ3m4hQngcfdBMJstbvf9sMrREL3fTLh442ez+ZfWGIA1HNV99MzsJUpqQm2JoOVqc4ci+6MYLeB2Y+MwzPrvrM8BxdX+eDRGyYX8bv4Z4wJ4hyIhDQPyh2ap9JiIrKFuh1HGpyOLlI0oHaioI/sCgakxOj9lL7hovfEH0j+UECdmv2az6LeZopgbBzjRVA9WyRGD6osv2RJGeAvGCa7PvRMj6bxz/ocP7+UzXqX2nJh1RWwIIGKvCaKrShhMiQojk0uM3hY+PHdRmoCerjKpsnqNbCmtAfhKPdVnUuPpj9pz0QD/w3RE0juCnjxOjdW3YnsXcUYuRzjDWVwAQZhgeqN5p4XgnIrTllL X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi all, Matthew and I have discussed about a different way of splitting large folios. Instead of split one folio uniformly into the same order smaller ones, doing buddy allocator like split can reduce the total number of resulting folios, the amount of memory needed for multi-index xarray split, and keep more large folios after a split. In addition, both Hugh[1] and Ryan[2] had similar suggestions before. The patch is an initial implementation. It passes simple order-9 to lower order split tests for anonymous folios and pagecache folios. There are still a lot of TODOs to make it upstream. But I would like to gather feedbacks before that. Design === folio_split() splits a large folio in the same way as buddy allocator splits a large free page for allocation. The purpose is to minimize the number of folios after the split. For example, if user wants to free the 3rd subpage in a order-9 folio, folio_split() will split the order-9 folio as: O-0, O-0, O-0, O-0, O-2, O-3, O-4, O-5, O-6, O-7, O-8 if it is anon O-1, O-0, O-0, O-2, O-3, O-4, O-5, O-6, O-7, O-9 if it is pagecache Since anon folio does not support order-1 yet. The split process is similar to existing approach: 1. Unmap all page mappings (split PMD mappings if exist); 2. Split meta data like memcg, page owner, page alloc tag; 3. Copy meta data in struct folio to sub pages, but instead of spliting the whole folio into multiple smaller ones with the same order in a shot, this approach splits the folio iteratively. Taking the example above, this approach first splits the original order-9 into two order-8, then splits left part of order-8 to two order-7 and so on; 4. Post-process split folios, like write mapping->i_pages for pagecache, adjust folio refcounts, add split folios to corresponding list; 5. Remap split folios 6. Unlock split folios. TODOs === 1. For anon folios, the code needs to check enabled mTHP orders and only split a large folios to enabled orders. But this might be up to debate since if no mTHP order is enabled, the folio will be split to order-0 ones. 2. Use xas_nomem() instead of xas_split_alloc() as Matthew suggested. The issue I am having is that when I use xas_set_order(), xas_store(), xas_nomem(), xas_split() pattern, xas->xa_alloc is NULL instead of some allocated memory. I must get something wrong and need some help from Matthew about it. 3. Use folio_split() in pagecache truncate and do more testing. 4. Need to add shmem support if this is needed. 5. Currently, the inputs of folio_split() are original folio, new order, and a page pointer that tells where to split to new order. For truncate, better inputs might be two page pointers on the start and end of the split and the folio_split() figures out the new order. Any comments and/or suggestions are welcome. Thanks. [1] https://lore.kernel.org/linux-mm/9dd96da-efa2-5123-20d4-4992136ef3ad@google.com/ [2] https://lore.kernel.org/linux-mm/cbb1d6a0-66dd-47d0-8733-f836fe050374@arm.com/ Zi Yan (1): mm/huge_memory: buddy allocator like folio_split() mm/huge_memory.c | 648 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 647 insertions(+), 1 deletion(-)