Re: [KVM-AUTOTEST][PATCH] timedrift support

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Bear,

Some comments below.

On Wed, May 06, 2009 at 12:02:21PM +0800, Bear Yang wrote:
> Hello everyone,
>
> I like to submit patch to add a new function for 'time drift check' for  
> guest running on KVM.
>
> The TimeDrift design logic is below:
> 1. Set the host as the NTP server
> 2. Guest only sync it's clock with host *once* when it booted up.
> * if the offset value of ntpdate large than 1 sec, the guest will sync  
> the clock with host.
> * if the offset value of ntpdate less than 1 sec, the guest doesn't need  
> sync it's clock with host.
>
> 3. Then the cpu stress testing will running on guest.
> * a C program will give the real load to guest cpu
> 4.when the cpustress testing finished. running the commandline <ntpdate  
> -q host-ip> totally 20 times on guest to query the time from host and  
> judge whether the guest clock has drift or not.
>
> The details of my patch is attached.
>
> thanks.
>
> Bear.

> diff -urN kvm_runtest_2.bak/cpu_stress.c kvm_runtest_2/cpu_stress.c
> --- kvm_runtest_2.bak/cpu_stress.c	1969-12-31 19:00:00.000000000 -0500
> +++ kvm_runtest_2/cpu_stress.c	2009-05-05 22:35:34.000000000 -0400
> @@ -0,0 +1,61 @@
> +#define _GNU_SOURCE
> +#include <stdio.h>
> +#include <pthread.h>
> +#include <sched.h>
> +#include <stdlib.h>
> +#include <fcntl.h>
> +#include <math.h>
> +#include <unistd.h>
> +
> +#define MAX_CPUS 256
> +#define BUFFSIZE 1024
> +
> +
> +void worker_child(int cpu)
> +{
> +	int cur_freq;
> +	int min_freq;
> +	int max_freq;
> +	int last_freq;
> +	cpu_set_t mask;
> +	int i;
> +	double x;
> +        int d = 0;
> +	/*
> +	 * bind this thread to the specified cpu 
> +	 */
> +	CPU_ZERO(&mask);
> +	CPU_SET(cpu, &mask);
> +	sched_setaffinity(0, CPU_SETSIZE, &mask);
> +
> +	while (d++ != 500000) {
> +			for (i=0; i<100000; i++)
> +				x = sqrt(x);
> +	}
> +
> +	_exit(0);
> +
> +}
> +
> +
> +main() {
> +	cpu_set_t mask;
> +	int i;
> +	int code;
> +
> +	if (sched_getaffinity(0, CPU_SETSIZE, &mask) < 0){
> +		perror ("sched_getaffinity");
> +		exit(1);
> +	}
> +
> +	for (i=0; i<CPU_SETSIZE; i++)
> +		if (CPU_ISSET(i, &mask)){
> +			printf ("CPU%d\n",i);
> +			if (fork() == 0)
> +				worker_child(i);
> +		}
> +
> +
> +	wait(&code);
> +	exit (WEXITSTATUS(code));
> +}
> diff -urN kvm_runtest_2.bak/kvm_runtest_2.py kvm_runtest_2/kvm_runtest_2.py
> --- kvm_runtest_2.bak/kvm_runtest_2.py	2009-04-29 06:17:29.000000000 -0400
> +++ kvm_runtest_2/kvm_runtest_2.py	2009-04-29 08:06:32.000000000 -0400
> @@ -36,6 +36,8 @@
>                  "autotest":     test_routine("kvm_tests",           "run_autotest"),
>                  "kvm_install":  test_routine("kvm_install",         "run_kvm_install"),
>                  "linux_s3":     test_routine("kvm_tests",           "run_linux_s3"),
> +                "ntp_server_setup": test_routine("kvm_tests",       "run_ntp_server_setup"),
> +                "timedrift":    test_routine("kvm_tests",           "run_timedrift"),
>                  }
>  
>          # Make it possible to import modules from the test's bindir
> diff -urN kvm_runtest_2.bak/kvm_tests.cfg.sample kvm_runtest_2/kvm_tests.cfg.sample
> --- kvm_runtest_2.bak/kvm_tests.cfg.sample	2009-04-29 06:17:29.000000000 -0400
> +++ kvm_runtest_2/kvm_tests.cfg.sample	2009-04-29 08:09:36.000000000 -0400
> @@ -81,6 +81,10 @@
>      - linux_s3:      install setup
>          type = linux_s3
>  
> +    - ntp_server_setup:
> +        type = ntp_server_setup
> +    - timedrift:      ntp_server_setup
> +        type = timedrift
>  # NICs
>  variants:
>      - @rtl8139:
> diff -urN kvm_runtest_2.bak/kvm_tests.py kvm_runtest_2/kvm_tests.py
> --- kvm_runtest_2.bak/kvm_tests.py	2009-04-29 06:17:29.000000000 -0400
> +++ kvm_runtest_2/kvm_tests.py	2009-05-05 23:45:57.000000000 -0400
> @@ -394,3 +394,235 @@
>      kvm_log.info("VM resumed after S3")
>  
>      session.close()
> +
> +def run_ntp_server_setup(test, params, env):
> +    
> +    """NTP server configuration and related network file modification
> +    """
> +    kvm_log.debug("run ntp server setup")
> +    status = 1
> +    # stop firewall for NTP server if it is running.
> +    status = os.system("/etc/init.d/iptables status")
> +    if status == 0:
> +        os.system("/etc/init.d/iptables stop")
> +        status = 1
> +
> +    # prevent dhcp client modify the ntp.conf
> +    kvm_log.info("prevent dhcp client modify the ntp.conf")
> +
> +    config_file = "/etc/sysconfig/network"
> +    network_file = open("/etc/sysconfig/network", "a")
> +    string = "PEERNTP=no"
> +
> +    if os.system("grep %s %s" % (string, config_file)):
> +        network_file.writelines(str(string)+'\n')
> +    
> +    network_file.close()
> +  
> +    # start ntp server on host
> +    kvm_log.info("backup ntp config file")
> +
> +    ntp_filename = os.path.expanduser("/etc/ntp.conf")
> +    # backup ntp config file
> +    backup_bootloader_filename = ntp_filename + "_backup"
> +    if os.path.exists(ntp_filename):
> +        os.rename(ntp_filename, backup_bootloader_filename)
> +    
> +    status = os.system("/etc/init.d/ntpd status")
> +    if status == 0:
> +        os.system("/etc/init.d/ntpd stop")
> +        status = 1    
> +
> +    kvm_log.info("start ntp server on host")
> +
> +    ntp_cmd = '''
> +        echo "restrict default kod nomodify notrap nopeer noquery" >> /etc/ntp.conf;\
> +        echo "restrict 127.0.0.1" >> /etc/ntp.conf;\
> +        echo "driftfile /var/lib/ntp/drift" >> /etc/ntp.conf;\
> +        echo "keys /etc/ntp/keys" >> /etc/ntp.conf;\
> +        echo "server 127.127.1.0" >> /etc/ntp.conf;\
> +        echo "fudge 127.127.1.0 stratum 1" >> /etc/ntp.conf;\
> +        service ntpd start;
> +        '''

I think it would be better to copy /etc/ntp.conf to a temporary file,
modify that, and start ntpd with the -c option.

After the test is finished, restart ntpd with the default config (if it
was running) via service ntpd restart.

Also I don't see whether your script reports the content of

/sys/devices/system/clocksource/clocksource0/current_clocksource

On the guest? Its important that information is displayed on the test
report.

Looks fine to me other than that, but the kvm-autotest guys probably
have more comments.

Thanks
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux