[PATCH v2 1/5] Add support for splitblock

HATAYAMA Daisuke d.hatayama at jp.fujitsu.com
Mon Oct 27 23:30:28 PDT 2014


From: Zhou Wenjian <zhouwj-fnst at cn.fujitsu.com>
Subject: [PATCH v2 1/5] Add support for splitblock
Date: Mon, 13 Oct 2014 17:34:22 +0800

> When --split option is specified, fair I/O workloads shoud be assigned
> for each process. So the start and end pfn of each dumpfile should be
> calculated with excluding unnecessary pages. However, it costs a lot of
> time to execute excluding for the whole memory. That is why struct
> SplitBlock exists. Struct SplitBlock is designed to manage memory, mainly
> for recording the number of dumpable pages. We can use the number of
> dumpable pages to calculate start and end pfn instead of execute excluding
> for the whole memory.
> 
> The char array *table in struct SplitBlock is used to record the number of
> dumpable pages.
> The table entry size is calculated as
> 			divideup(log2(splitblock_size / page_size), 8) bytes
> The table entry size is calculated, so that the
> space table taken will be small enough. And the code will also have a
> good performence when the number of pages in one splitblock is big enough.
> 
> Signed-off-by: Qiao Nuohan <qiaonuohan at cn.fujitsu.com>
> Signed-off-by: Zhou Wenjian <zhouwj-fnst at cn.fujitsu.com>
> ---
>  makedumpfile.c |   23 +++++++++++++++++++++++
>  makedumpfile.h |   14 ++++++++++++++
>  2 files changed, 37 insertions(+), 0 deletions(-)
> 
> diff --git a/makedumpfile.c b/makedumpfile.c
> index b4d43d8..95d553c 100644
> --- a/makedumpfile.c
> +++ b/makedumpfile.c
> @@ -34,6 +34,7 @@ struct srcfile_table	srcfile_table;
>  
>  struct vm_table		vt = { 0 };
>  struct DumpInfo		*info = NULL;
> +struct SplitBlock		*splitblock = NULL;
>  
>  char filename_stdout[] = FILENAME_STDOUT;
>  
> @@ -5685,6 +5686,28 @@ out:
>  	return ret;
>  }
>  
> +/*
> + * cyclic_split mode:
> + *	manage memory by splitblocks,
> + *	divide memory into splitblocks
> + *	use splitblock_table to record numbers of dumpable pages in each splitblock
> + */
> +
> +//calculate entry size based on the amount of pages in one splitblock

Please use /* */ style in comment just as other parts of makedumpfile
source codes.

> +int
> +calculate_entry_size(void){

Please add linebreak.

calculate_entry_size(void)
{

> +	int entry_num = 1, count = 1;
> +	int entry_size;

Please add linebreak.

> +	while (entry_num < splitblock->page_per_splitblock){
> +		entry_num = entry_num << 1;
> +		count++;
> +	}
> +	entry_size = count/BITPERBYTE;
> +	if (count %BITPERBYTE)
> +		entry_size++;
> +	return entry_size;
> +}
> +
>  mdf_pfn_t
>  get_num_dumpable(void)
>  {
> diff --git a/makedumpfile.h b/makedumpfile.h
> index 96830b0..98b8404 100644
> --- a/makedumpfile.h
> +++ b/makedumpfile.h
> @@ -1168,10 +1168,24 @@ struct DumpInfo {
>  	 */
>  	int (*page_is_buddy)(unsigned long flags, unsigned int _mapcount,
>  			     unsigned long private, unsigned int _count);
> +	/*
> +	 *for cyclic_splitting mode, setup splitblock_size
> +	 */
> +	long long splitblock_size;
>  };
>  extern struct DumpInfo		*info;
>  
>  /*
> + *for cyclic_splitting mode,Manage memory by splitblock
> + */
> +struct SplitBlock{
> +        char *table;
> +        long long num;
> +        long long page_per_splitblock;
> +        int entry_size;                 //counted by byte

Please use /* */.

> +};
> +
> +/*
>   * kernel VM-related data
>   */
>  struct vm_table {
> -- 
> 1.7.1
> 
> 
> _______________________________________________
> kexec mailing list
> kexec at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/kexec
--
Thanks.
HATAYAMA, Daisuke




More information about the kexec mailing list