From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751357AbdKUUBc (ORCPT ); Tue, 21 Nov 2017 15:01:32 -0500 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:50312 "EHLO mx0b-00082601.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751067AbdKUUBa (ORCPT ); Tue, 21 Nov 2017 15:01:30 -0500 Date: Tue, 21 Nov 2017 19:59:54 +0000 From: Roman Gushchin To: Andrew Morton CC: , Michal Hocko , Johannes Weiner , Mike Kravetz , "Aneesh Kumar K.V" , Andrea Arcangeli , Dave Hansen , David Rientjes , , Subject: Re: [PATCH v2] mm: show total hugetlb memory consumption in /proc/meminfo Message-ID: <20171121195947.GA12709@castle> References: <20171115231409.12131-1-guro@fb.com> <20171120165110.587918bf75ffecb8144da66c@linux-foundation.org> <20171121151545.GA23974@castle> <20171121111907.6952d50adcbe435b1b6b4576@linux-foundation.org> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Disposition: inline In-Reply-To: <20171121111907.6952d50adcbe435b1b6b4576@linux-foundation.org> User-Agent: Mutt/1.9.1 (2017-09-22) X-Originating-IP: [2620:10d:c092:200::1:63d3] X-ClientProxiedBy: AM5PR0502CA0010.eurprd05.prod.outlook.com (2603:10a6:203:91::20) To CO1PR15MB1079.namprd15.prod.outlook.com (2a01:111:e400:7b66::9) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: fcd152a6-04ec-4629-80d0-08d5311a762b X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(22001)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(2017052603199);SRVR:CO1PR15MB1079; X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;3:pjO2sivUCKdkaRzxJTe/nRCqtV1cB0CyoqX9Pq9Iv8CzodTCTGftw4Qb73KAysfYv4M/FSMrjnRUO6xZmm5RTaZize+TGDlQiIPQGsGXBekxGVSlpgBRGOF4qqxqwPN+UNjK00NA9Q3vHxQAI63TY4VlwtICFnSoBYJmutsBdDB9tg+xWqJTXUxqwTzGoyYwVJBs1dpARCvm/7LVzcZIjBMH8puwbIvzqqiFGfeHcTUQ0EMNH1qVRoxX1wNR37YS;25:N2NGpF0grALcGmANVUTI0oXARMt7CwrF9xDadXC4Z9Pzc8OzWeBxjw46jUNiNzj19Nk/iPQu6oS5ewouS20JDQmjmsot35pFA6v++3aGKFbkHp17zKB/Welr1wWwgPgmoEIp/vnQ6WyxZScOf5ZigBJyVPsQNcoaqEMfgHe2b+hS1NvjV6LZVr9hmMDax1v8WJ94GfTyZuyE/ZtbQf1gMYbMW/rssJH4eOuwZjq5d2GmhI3sx3AkHyJqxY9P03ECXpVDyCHH4UBCAX2P6C7AbUqEmg8OwCCWRQIeWmmvnXrhGojoZLSH3M7HtHfc92u1QVDbIKZ/lx150bi7GrcW5w==;31:wBd3C+Dqy3G6AGyl8h1OGNtJ4+928dYRAkW4GY3gDxy9FehzuwYLVRHAaQ3H7oU/DMeuOAoS1lmzx5I1M9fr2qduBA5L+MTZE8q5cUvWeHHTvB3SySDV3LVtTEkebwio/C2KQtzEuxfp8ZuqeI+jieH0joOUmxPjRW9qI53LwO7m9kdYWTqrMzxIVkHe0Oe5iqJ214gYVARuNn28HK/YK5Fd8eleE3u4tDrKRfNrefE= X-MS-TrafficTypeDiagnostic: CO1PR15MB1079: X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:Ze3KeNmmAc9Ze965YZH7Zzd6eN8HIFQo7XFLZnUDPm81iNbN/NxB+1G6nB26t5ZuEqYrgxdWnKO+RQkxyGgn9Eddl+hVNc6VNb0ct5A7z9pNR0AtnqiPcj4czSPI4vAcTqosRy88+J4BtZgvp8dBVZ6HaKh2uN/OZ4XNRFA5WEFPtkJols5w+f55+tofeLAOSfXn9p+zcOHWrpmBiPX77U015xzdn+Qo6ODl/a4VIJVLMQ63BOx7cXFfhiUQng59p5caRQajlqSNkHLgjBxDBum9bL6vbgMRQ9rZauwr5eCldckt+9Cg48DapiIhM/3GKQ7f9g40yRxIDEZDeCHhS/GD5upOLanuOBXceM/OFsBer+5xbjVs134ByOIkNC+tqIZ7Two4tlFSq/+0i2v9eVrUXSdBft3Pn0e7Zpu92xiYsB+6Q8hXh1FbK65pvX+ZahZ4yY/mM135BUIdMzULQV5AG+6tRRINWP9lLESYTq2q4vgVvY8wYyA512aC5wMG;4:crPmcqBeMugx4P+t64zGQ87avsnKqRDIMx1HvgM5adUG6TMDt9yzeEPT64hQm+cnyWtyg9TRzrubni+cdMf9axTz0g0+bGtuEJRYyIuBk4Q8/rHEbSAFwzbPUFfh60AbGGVAvk6R44TII6ir6HPnMiU7AOVt+8QBViw/cT4ph1koydEoeeWcO5OPbWgoIaEBPdU8i/racLiaOwruasoX8vi4yB6hVWFrToqE5Ga+ztC8PdnratF9Fs17+XwqcmDTfJu2bkuA/K6+/6LZIRuVrGJDUrKWQOUHRKBnpdfGIjGcP6Wwt5n+k8FeVNAnt4KE X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(67672495146484); X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(11241501159)(6040450)(2401047)(5005006)(8121501046)(10201501046)(93006095)(93001095)(3002001)(100000703101)(100105400095)(3231022)(6041248)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123564025)(20161123562025)(20161123555025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:CO1PR15MB1079;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:CO1PR15MB1079; X-Forefront-PRVS: 049897979A X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(376002)(346002)(24454002)(189002)(199003)(189998001)(6116002)(9686003)(23726003)(1076002)(55016002)(81166006)(8676002)(6666003)(58126008)(86362001)(316002)(8936002)(54906003)(16586007)(81156014)(83506002)(52396003)(7736002)(97736004)(229853002)(2950100002)(33716001)(478600001)(93886005)(6496006)(305945005)(6916009)(105586002)(54356999)(4326008)(76176999)(50986999)(50466002)(106356001)(7416002)(5660300001)(53936002)(2906002)(25786009)(6246003)(68736007)(47776003)(33656002)(101416001)(18370500001)(42262002);DIR:OUT;SFP:1102;SCL:1;SRVR:CO1PR15MB1079;H:castle;FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;CO1PR15MB1079;23:oR/bzXz7ZUVcT1ZIkms8Q5aF3Q10cWSnC869jERi3?= =?us-ascii?Q?aFjiMNJ/kDioL5MpbZ9VPQPApUmMsVr1qQuj7u9kEfKSRkghdc96Khgp3X61?= =?us-ascii?Q?BJsfq2nUWmYbzMxtQHjtRt3D6aqOIOb3yH8jRBE7JZiHvTMhRIDd5Zb/xHXB?= =?us-ascii?Q?LUThn2yKCiE3hvIzYSlVOpsXwsjECZ7yKsSXQpoH7gUxB9KJJ0KDGTMHWPZX?= =?us-ascii?Q?9tXhJm/vPOqsHhC6b4mx0WXKYudyCNN3R6QDS6ckxji/hlEDehAqOGgb2u+z?= =?us-ascii?Q?pjL1ZinWLSkyW6/gRNnySY7thjKmXQ9gpTTs2PidxcLNcf3Chvw16lhIEBqi?= =?us-ascii?Q?xEyvUwUSAzU7IHTGYwjioR+5yCGZG0lOsbIK0rsFgYLmTZxRmptMPOHVRvZB?= =?us-ascii?Q?XPB0YmA6K7DTm1lBrxQaUkjS2S+bYn8dma2pSHFmtZg0kFk7PQJocojrqms5?= =?us-ascii?Q?bvqU3TYV0STDE0PezQ4SKC4W1H+UpFDsV4cj9kRyd0wwi4hh2sVKK5TJxxaB?= =?us-ascii?Q?A/RYCvoa98sDaHgFlftUAS0YPCg+zVOJwJfR20GvJ34oTM9/FJr9t4AHnuQP?= =?us-ascii?Q?FJUsttUfuIAkpm5M5wo1AYFPMNc6IaUe1JUlW9B4WqsZddNz6iYcd0CJW1D+?= =?us-ascii?Q?OWewYkCB7ulKqv6Lo8fHT5KbbLo5i2uY/Tqxpa4ctlNl264qvd4JWSUkPPTM?= =?us-ascii?Q?XeED+2ntJX2Mw7j1+6EvvC8EIYjeroVLp2SFmQ4Rh1AMEh6aj5at1E9uLXAd?= =?us-ascii?Q?JrbaKdUg/ae+hSpks3Jpxgqp+K9djcPUmCri7Ges4jOIpfxXbxAZQ8o9WfZI?= =?us-ascii?Q?h4pl4f9L0Z3dsEvF7wnSV4jxa5RGfD3ushkMoBwhO0M1tCUU2VkU29FXUixC?= =?us-ascii?Q?AjHJdZA4jWtfA/84UlpUVGpsWQSAYOtXPsYoF/fh3F/9T8UwRr/J+Cw3kWxr?= =?us-ascii?Q?QOCiGzpq/4Zw77gKenQu787zmTUaWU7svrndwhO2fLzGcrftdAIGw7uzDSwI?= =?us-ascii?Q?Go91jOsho25B6lem5qbZTyAFssrPzTsKcIZhSZnWWQRVVvOPycoXvjyrjYjh?= =?us-ascii?Q?Kw+AlV/F+3SuGtVtJhXeIUs6BQabISv2+yqUP3P7QpD1fUFH38pl0M/WEGZx?= =?us-ascii?Q?MikRjPkB0eT4Dgk28YxjNj7aBGbUKOyRypg/qnSMbc1+31LAmnA1yka8bpDW?= =?us-ascii?Q?EGgHn6iu2bH0IzeLkJxFPb9T9t9rPZpgfTZ6urODw5XADgByeZ58w0buQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;6:PomSzR5Dwkt2x5vFuT/MJoXrm2Nzzn7teQXx4WwgSRljXat6UbqIdu0eonaFiccSasRPf4NNSwNKIw1e6hpaKj4gSe/nOAgokeivzrjsoNSDuqvZ263ZMWGFFdlxkenx+3Sp6/RJ6lnZUpO2XTizJuDI5kPYqxCBwwhPmxVl1L4wsEPTDfhxk8tWtA1b71gNSDyM3RUsHg3ruPYO8BosSCPXc7mUHNYaWa1lKUDFeHoQjr/VsPwoFDBPhxC7tiEO/JPM94gwwHhGLHCP/VXNu5Z9ta6vJU+QH+HiAYASSZ0x3mJa5DPWvJOFJcw6Bg0vIE1IBL+uW/sqqm/ukJBPPet+ASXtwPU9p9cVJH5Yhss=;5:CQp5UGNUg2EkA5h6EYAixQ5z+pOcwSDBwX1/kbFw7lJu3QavrqnzEqiVaUfpJSk4bDqm9tO71lqf+bHhcWZcZvuj3suXCZfClI3UAgl5Czb9rGDU5KtQY6BFitg8zReCCtv2Uq5MP38ZJvQAAdQBdMGnylcc/q0Yb9VR1jVA9IU=;24:HjjkgFJM08X0QyOcbs8FaZUr2XVAubempxAVaLb7YLRa74mRNPSHbduSgwt2G/UXeKrGhjfJwp1fIck6tA7Vbr0JAdPCtfNSHXAEUbhmMCU=;7:VGOVAPQnt42vA2QPaT5isDtaXl5bJ7qKmewgdIrIG22/c1yyRN64xcFzvf8WakoRitshkLoYBHXj8RsAYaEacTwzO4AkaG0Ah/EGZZfpwu4PQuNxl2lalIGATb3eErjckwTXLLfzNMJnYsK2ZJwAGh0sxJSWPIlYFE8NuK9csRWc8qdBWuufLYAbdoiUcPql7PnnwbFtXD7nL2fAg6Hu13R6Dgi8N1cYNs3ROmd1p+sF/JDACVsF++Mi/MEuycDe SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;CO1PR15MB1079;20:0A2va5E8TnWUncuF/7pikcyZVDYOFwy24qlA7sGob+rJOZxnVTr+JA/3ZGAIYfR/J166xtLO3j8WvQ7ErSYACvEk/292lQKcyTJ4fk7MrVZtId4BETiAZy5fx9CIjm2x8Wf+0KG5Xb74gSBMyEvWdvbm0JHJdZUtkZF9TX/mScM= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Nov 2017 20:00:04.2234 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fcd152a6-04ec-4629-80d0-08d5311a762b X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR15MB1079 X-OriginatorOrg: fb.com X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-11-21_07:,, signatures=0 X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 21, 2017 at 11:19:07AM -0800, Andrew Morton wrote: > On Tue, 21 Nov 2017 15:15:55 +0000 Roman Gushchin wrote: > > > > > + > > > > + for_each_hstate(h) { > > > > + unsigned long count = h->nr_huge_pages; > > > > + > > > > + total += (PAGE_SIZE << huge_page_order(h)) * count; > > > > + > > > > + if (h == &default_hstate) > > > > > > I'm not understanding this test. Are we assuming that default_hstate > > > always refers to the highest-index hstate? If so why, and is that > > > valid? > > > > As Mike and Michal pointed, default_hstate is defined as > > #define default_hstate (hstates[default_hstate_idx]), > > where default_hstate_idx can be altered by a boot argument. > > > > We're iterating over all states to calculate total and also > > print some additional info for the default size. Having a single > > loop guarantees consistency of these numbers. > > > > OK, I misread the handling of `count' -> HugePages_Total. > > It seems unnecessarily obscure? > > for_each_hstate(h) { > unsigned long count = h->nr_huge_pages; > > total += (PAGE_SIZE << huge_page_order(h)) * count; > > if (h == &default_hstate) > seq_printf(m, > "HugePages_Total: %5lu\n" > "HugePages_Free: %5lu\n" > "HugePages_Rsvd: %5lu\n" > "HugePages_Surp: %5lu\n" > "Hugepagesize: %8lu kB\n", > count, > h->free_huge_pages, > h->resv_huge_pages, > h->surplus_huge_pages, > (PAGE_SIZE << huge_page_order(h)) / 1024); > } > > seq_printf(m, "Hugetlb: %8lu kB\n", total / 1024); > > > Why not > > seq_printf(m, > "HugePages_Total: %5lu\n" > "HugePages_Free: %5lu\n" > "HugePages_Rsvd: %5lu\n" > "HugePages_Surp: %5lu\n" > "Hugepagesize: %8lu kB\n", > h->nr_huge_pages, > h->free_huge_pages, > h->resv_huge_pages, > h->surplus_huge_pages, > 1UL << (huge_page_order(h) + PAGE_SHIFT - 10)); > > for_each_hstate(h) > total += (PAGE_SIZE << huge_page_order(h)) * h->nr_huge_pages; > seq_printf(m, "Hugetlb: %8lu kB\n", total / 1024); > > ? The idea was that the local variable guarantees the consistency between Hugetlb and HugePages_Total numbers. Otherwise we have to take hugetlb_lock. What we can do, is to rename "count" into "nr_huge_pages", like: for_each_hstate(h) { unsigned long nr_huge_pages = h->nr_huge_pages; total += (PAGE_SIZE << huge_page_order(h)) * nr_huge_pages; if (h == &default_hstate) seq_printf(m, "HugePages_Total: %5lu\n" "HugePages_Free: %5lu\n" "HugePages_Rsvd: %5lu\n" "HugePages_Surp: %5lu\n" "Hugepagesize: %8lu kB\n", nr_huge_pages, h->free_huge_pages, h->resv_huge_pages, h->surplus_huge_pages, (PAGE_SIZE << huge_page_order(h)) / 1024); } seq_printf(m, "Hugetlb: %8lu kB\n", total / 1024); But maybe taking a lock is not a bad idea, because it will also guarantee consistency between other numbers (like HugePages_Free) as well, which is not true right now. Thanks!