From: Atsushi Kumagai <[email protected]>
Date: Thu, 23 Aug 2012 17:54:16 +0900
Subject: [PATCH 09/16] [PATCH v3 9/12] Enabling --split option with cyclic mode.

This patch enable cyclic mode to split the dump data to multiple dumpfiles.
At this time, the buffer of partial bitmap is prepared for each child process,
you need to consider the amount of memory usage.

This patch split the dump data based on only max_mapnr and num_dumpfile,
so the size of each split dumpfiles will be different by excluding
unnecessary pages.

Signed-off-by: Atsushi Kumagai <[email protected]>
---
 makedumpfile.c |   42 +++++++++++++++++++++++++++++-------------
 1 file changed, 29 insertions(+), 13 deletions(-)

diff --git a/makedumpfile.c b/makedumpfile.c
index 1f499bb..6dfd397 100644
--- a/makedumpfile.c
+++ b/makedumpfile.c
@@ -5445,6 +5445,13 @@ write_kdump_pages_cyclic(struct cache_data *cd_header, 
struct cache_data *cd_pag
        start_pfn = info->cyclic_start_pfn;
        end_pfn   = info->cyclic_end_pfn;
 
+       if (info->flag_split) {
+               if (start_pfn < info->split_start_pfn)
+                       start_pfn = info->split_start_pfn;
+               if (end_pfn > info->split_end_pfn)
+                       end_pfn = info->split_end_pfn;
+       }
+
        for (pfn = start_pfn; pfn < end_pfn; pfn++) {
 
                if ((num_dumped % per) == 0)
@@ -6730,22 +6737,31 @@ setup_splitting(void)
        if (info->num_dumpfile <= 1)
                return FALSE;
 
-       initialize_2nd_bitmap(&bitmap2);
+       if (info->flag_cyclic) {
+               for (i = 0; i < info->num_dumpfile; i++) {
+                       SPLITTING_START_PFN(i) = divideup(info->max_mapnr, 
info->num_dumpfile) * i;
+                       SPLITTING_END_PFN(i)   = divideup(info->max_mapnr, 
info->num_dumpfile) * (i + 1);
+               }
+               if (SPLITTING_END_PFN(i-1) > info->max_mapnr)
+                       SPLITTING_END_PFN(i-1) = info->max_mapnr;
+        } else {
+               initialize_2nd_bitmap(&bitmap2);
 
-       pfn_per_dumpfile = num_dumpable / info->num_dumpfile;
-       start_pfn = end_pfn = 0;
-       for (i = 0; i < info->num_dumpfile; i++) {
-               start_pfn = end_pfn;
-               if (i == (info->num_dumpfile - 1)) {
-                       end_pfn  = info->max_mapnr;
-               } else {
-                       for (j = 0; j < pfn_per_dumpfile; end_pfn++) {
-                               if (is_dumpable(&bitmap2, end_pfn))
-                                       j++;
+               pfn_per_dumpfile = num_dumpable / info->num_dumpfile;
+               start_pfn = end_pfn = 0;
+               for (i = 0; i < info->num_dumpfile; i++) {
+                       start_pfn = end_pfn;
+                       if (i == (info->num_dumpfile - 1)) {
+                               end_pfn  = info->max_mapnr;
+                       } else {
+                               for (j = 0; j < pfn_per_dumpfile; end_pfn++) {
+                                       if (is_dumpable(&bitmap2, end_pfn))
+                                               j++;
+                               }
                        }
+                       SPLITTING_START_PFN(i) = start_pfn;
+                       SPLITTING_END_PFN(i)   = end_pfn;
                }
-               SPLITTING_START_PFN(i) = start_pfn;
-               SPLITTING_END_PFN(i)   = end_pfn;
        }
 
        return TRUE;
-- 
1.7.9.2

_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to