[LTP] [PATCH] swapping: replace mem_free by mem_available

Li Wang liwang@redhat.com
Mon Aug 1 08:43:19 CEST 2016


On Thu, Jul 28, 2016 at 07:28:26AM -0400, Jan Stancek wrote:
> 
> 
> > @@ -108,17 +108,17 @@ int main(int argc, char *argv[])
> >  static void init_meminfo(void)
> >  {
> >  	swap_free_init = read_meminfo("SwapFree:");
> > -	mem_free_init = read_meminfo("MemFree:");
> > -	mem_over = mem_free_init * COE_SLIGHT_OVER;
> > -	mem_over_max = mem_free_init * COE_DELTA;
> > -
> > -	/* at least 10MB free physical memory needed */
> > -	if (mem_free_init < 10240) {
> > -		sleep(5);
> > -		if (mem_free_init < 10240)
> > +	if (!FILE_LINES_SCANF(cleanup, "/proc/meminfo", "MemAvailable: %ld",
> > +				&mem_available_init))
> > +		mem_available_init = read_meminfo("MemFree:") + read_meminfo("Cached:");
> > +	mem_over = mem_available_init * COE_SLIGHT_OVER;
> > +	mem_over_max = mem_available_init * COE_DELTA;
> > +
> > +	/* at least 10MB available physical memory needed */
> > +	if (mem_available_init < 10240)
> >  			tst_brkm(TCONF, cleanup,
> > -				 "Not enough free memory to test.");
> > -	}
> > +				 "Not enough avalable memory to test.");
> > +
> >  	if (swap_free_init < mem_over)
> >  		tst_brkm(TCONF, cleanup, "Not enough swap space to test.");
> 
> Hi,
> 
> check_swapping() compares swap increase to mem_over_max. Is bad kernel
> really using that much swap? If so, then condition above looks
> wrong, since it doesn't check that we can fit so much into swap.

Good catch! If the total swap size is smaller than mem_over_max, there
seems no need to run this case, because theoretically it'll always get
PASS on bad kernel.

I'd like to add additional check:

	if (swap_total < mem_over_max)
		tst_brkm(TCONF, cleanup, "swap size is not fit to test");

> 
> >  }
> > @@ -128,8 +128,8 @@ static void do_alloc(void)
> >  	long mem_count;
> >  	void *s;
> >  
> > -	tst_resm(TINFO, "free physical memory: %ld MB", mem_free_init / 1024);
> > -	mem_count = mem_free_init + mem_over;
> > +	tst_resm(TINFO, "available physical memory: %ld MB", mem_available_init /
> > 1024);
> > +	mem_count = mem_available_init + mem_over;
> >  	tst_resm(TINFO, "try to allocate: %ld MB", mem_count / 1024);
> >  	s = malloc(mem_count * 1024);
> >  	if (s == NULL)
> > @@ -160,7 +160,7 @@ static void check_swapping(void)
> >  			tst_brkm(TFAIL, cleanup, "heavy swapping detected: "
> >  				 "%ld MB swapped.", swapped / 1024);
> >  		}
> > -		sleep(1);
> > +		usleep(100000);
> 
> The original code appears to check multiple times to be sure that
> writes to swap have settled. Did you test if shortened delay can still
> detect bug on bad kernel?

I didn't test it with bad kernel. But your worries are necessary, the swap
checker probably spend a long time on big RAM box.

> 
> I was thinking we break the loop if we see no change in swap usage
> for certain period:

Agreed, this method looks more stable. Just have a little query of that.

> 
> i = 0;
> while (i < X) {

How much should the X defined?

>   i++;
>   swapped = read_meminfo("SwapFree:");
>   sleep(1);
>   if (abs(swapped - read_meminfo("SwapFree:")) < 512)

Why set the limitation as 512?  why not 1024 or others?

>     break;
> }
> 
> if (swapped > mem_over_max) {
>   FAIL
> }

Regards,
Li Wang


More information about the ltp mailing list