Hello Cliff,
First, this patch should be divided into four patches as below:
1.
- get_mm_sparsemem(): reduce the number of entries...
2.
- shorten the executions of __exclude_unnecessary_pages()...
3.
- for testing: add option -a to use cyclic mode...
4.
- cosmetic: in cyclic mode count the number of cycles...
- cosmetic: let the prints of unnecessary page scans stop...
> + info->num_mem_map = valid_section_nr;
> + if (valid_section_nr < num_section) {
> + if (realloc(mem_sec, mem_section_size) != mem_sec) {
> + ERRMSG("mem_sec realloc failed\n");
> + exit(1);
> + };
> }
realloc can return a pointer which is different from mem_sec,
I think the code below is better.
info->num_mem_map = valid_section_nr;
if (valid_section_nr < num_section) {
mem_sec = realloc(mem_sec, mem_section_size);
if (!mem_sec) {
ERRMSG("mem_sec realloc failed\n");
return FALSE;
};
}
As for "1" and "2", the code looks no problem except the above,
so the effect of them is the important thing as HATAYAMA-san said.
I expect good results.
"3" should be removed since "use non-cyclic when possible"
was rejected.
Lastly, as for "4":
> Begin page counting phase.
> Scan cycle 1
> Excluding free pages : [100 %]
> Excluding unnecessary pages : [ 45 %]
> Scan cycle 2
> Excluding free pages : [ 87 %]
> Excluding unnecessary pages : [ 87 %]
> Scan cycle 3
> Excluding free pages : [100 %]
> Excluding unnecessary pages : [ 99 %]
> Scan cycle 4
Your code shows extra message, "Scan cycle 4"
is extra in this case.
> Scan-and-copy cycle 1/3
> Excluding free pages : [ 45 %]
> Excluding unnecessary pages : [ 45 %]
> Copying data : [ 44 %]
> Scan-and-copy cycle 2/3
> Excluding free pages : [ 87 %]
> Excluding unnecessary pages : [ 87 %]
> Copying data : [ 86 %]
> Scan-and-copy cycle 3/3
> Excluding free pages : [100 %]
> Excluding unnecessary pages : [ 99 %]
> Copying data : [100 %]
> Saving core complete
Thanks
Atsushi Kumagai
(2013/08/30 9:59), HATAYAMA Daisuke wrote:
> (2013/08/29 7:08), Cliff Wickman wrote:
>> From: Cliff Wickman <[email protected]>
>>
>> - get_mm_sparsemem(): reduce the number of entries in the mem_map[] by
>> recording only those sections which actually exist in memory
>
> I have missed this point. How much does this change speed up?
>
> In general, if you want to say your patch improves performance, it's better to
> demonstrate it in a measurable way such as benchmark.
>
>> - shorten the executions of __exclude_unnecessary_pages() by passing it only
>> the pfn's of the current cyclic area
>>
>
> I did try to similar kind of effort some months ago locally to figure out
> where
> to improve cyclic-mode. In case of me, I noticed possibility of unnecessary
> processing
> being performed out side the area of current cycle from the sanity check
> below:
>
> int
> set_bitmap_cyclic(char *bitmap, unsigned long long pfn, int val)
> {
> int byte, bit;
>
> if (pfn < info->cyclic_start_pfn || info->cyclic_end_pfn <= pfn)
> return FALSE;
> <cut>
>
> However, I didn't get distinguishable difference at that time. I ran the
> program
> relatively ordinary class of system with some gigabyte memory so I might not
> got
> distinguishable improvement.
>
> Anyway, I thought it was permissible at that time and I didn't continue that
> work more.
>
> But these days I have a machine with huge physical memory holes and on that
> system
> this improvement sounds work well. So I much want to try to benchmark this
> direction
> of your improvement patch set.
>
_______________________________________________
kexec mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/kexec