From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753478AbbFDM7l (ORCPT ); Thu, 4 Jun 2015 08:59:41 -0400 Received: from szxga01-in.huawei.com ([58.251.152.64]:7677 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751955AbbFDM7i (ORCPT ); Thu, 4 Jun 2015 08:59:38 -0400 Message-ID: <55704A7E.5030507@huawei.com> Date: Thu, 4 Jun 2015 20:54:22 +0800 From: Xishi Qiu User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:12.0) Gecko/20120428 Thunderbird/12.0.1 MIME-Version: 1.0 To: Andrew Morton , , Yinghai Lu , "H. Peter Anvin" , "Thomas Gleixner" , , Xiexiuqi , Hanjun Guo , "Luck, Tony" CC: Xishi Qiu , Linux MM , LKML Subject: [RFC PATCH 00/12] mm: mirrored memory support for page buddy allocations Content-Type: text/plain; charset="ISO-8859-1" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.177.25.179] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Intel Xeon processor E7 v3 product family-based platforms introduces support for partial memory mirroring called as 'Address Range Mirroring'. This feature allows BIOS to specify a subset of total available memory to be mirrored (and optionally also specify whether to mirror the range 0-4 GB). This capability allows user to make an appropriate tradeoff between non-mirrored memory range and mirrored memory range thus optimizing total available memory and still achieving highly reliable memory range for mission critical workloads and/or kernel space. Tony has already send a patchset to supprot this feature at boot time. https://lkml.org/lkml/2015/5/8/521 This patchset can support the feature after boot time. It introduces mirror_info to save the mirrored memory range. Then use __GFP_MIRROR to allocate mirrored pages. I think add a new migratetype is btter and easier than a new zone, so I use MIGRATE_MIRROR to manage the mirrored pages. However it changed some code in the core file, please review and comment, thanks. TBD: 1) call add_mirror_info() to fill mirrored memory info. 2) add compatibility with memory online/offline. 3) add more interface? others? Xishi Qiu (12): mm: add a new config to manage the code mm: introduce mirror_info mm: introduce MIGRATE_MIRROR to manage the mirrored pages mm: add mirrored pages to buddy system mm: introduce a new zone_stat_item NR_FREE_MIRROR_PAGES mm: add free mirrored pages info mm: introduce __GFP_MIRROR to allocate mirrored pages mm: use mirrorable to switch allocate mirrored memory mm: enable allocate mirrored memory at boot time mm: add the buddy system interface mm: add the PCP interface mm: let slab/slub/slob use mirrored memory arch/x86/mm/numa.c | 3 ++ drivers/base/node.c | 17 ++++--- fs/proc/meminfo.c | 6 +++ include/linux/gfp.h | 5 +- include/linux/mmzone.h | 23 +++++++++ include/linux/vmstat.h | 2 + kernel/sysctl.c | 9 ++++ mm/Kconfig | 8 +++ mm/page_alloc.c | 134 ++++++++++++++++++++++++++++++++++++++++++++++--- mm/slab.c | 3 +- mm/slob.c | 2 +- mm/slub.c | 2 +- mm/vmstat.c | 4 ++ 13 files changed, 202 insertions(+), 16 deletions(-) -- 2.0.0