From dc9700c9fd71bff7ccb0e034f01f397e78d7ab39 Mon Sep 17 00:00:00 2001 From: Francis Deslauriers Date: Wed, 23 Nov 2016 11:11:50 -0500 Subject: [PATCH] Lava: Run kernel tests in KVM instance instead of baremetal Signed-off-by: Francis Deslauriers --- jobs/lttng-baremetal-tests.yaml | 25 ++++-- lava/baremetal-tests/failing-close.yml | 2 +- lava/baremetal-tests/failing-open-efault.yml | 2 +- lava/baremetal-tests/failing-open-enoent.yml | 2 +- lava/baremetal-tests/kernel-tests.yml | 6 +- .../check-build-needs.sh | 8 +- .../generate-properties-master.sh | 7 +- .../generate-properties-slave.sh | 5 +- scripts/lttng-baremetal-tests/lava-submit.py | 86 ++++++++++++++----- 9 files changed, 102 insertions(+), 41 deletions(-) diff --git a/jobs/lttng-baremetal-tests.yaml b/jobs/lttng-baremetal-tests.yaml index 9f6a664..894f9b9 100644 --- a/jobs/lttng-baremetal-tests.yaml +++ b/jobs/lttng-baremetal-tests.yaml @@ -36,12 +36,6 @@ - pollscm: cron: "@hourly" - properties: - - throttle: - max-total: 3 - option: 'category' - categories: - - 'baremetal-tests' publishers: - email: recipients: 'francis.deslauriers@efficios.com' @@ -52,6 +46,12 @@ description: | Runs baremetal kernel tests over different combination of kernel and lttng configurations. defaults: lttng-baremetal-tests + properties: + - throttle: + max-total: 2 + option: 'category' + categories: + - 'kvm-tests' wrappers: - workspace-cleanup - timestamps @@ -64,6 +64,7 @@ properties-content: | TOOLS_BRANCH={lttngversion} UST_BRANCH={lttngversion} + BUILD_DEVICE=kvm builders: - shell: !include-raw-escape: scripts/lttng-baremetal-tests/generate-properties-master.sh @@ -83,6 +84,12 @@ logrotate: numToKeep: 5 + properties: + - throttle: + max-total: 2 + option: 'category' + categories: + - 'baremetal-tests' scm: - git: url: git://git-mirror.internal.efficios.com/lttng/lttng-tools.git @@ -116,6 +123,9 @@ - text: credential-id: jenkins_lava_key variable: LAVA_FRDESO_TOKEN + - inject: + properties-content: | + BUILD_DEVICE=baremetal builders: - shell: !include-raw-escape: scripts/lttng-baremetal-tests/generate-properties-master.sh - trigger-builds: @@ -189,6 +199,9 @@ - string: name: 'STORAGE_LTTNG_MODULES' description: 'Path to store the LTTng Modules' + - string: + name: 'BUILD_DEVICE' + description: 'The target device. (kvm or baremetal)' ## Project - project: diff --git a/lava/baremetal-tests/failing-close.yml b/lava/baremetal-tests/failing-close.yml index ff872cc..99ebc37 100644 --- a/lava/baremetal-tests/failing-close.yml +++ b/lava/baremetal-tests/failing-close.yml @@ -20,7 +20,7 @@ install: - echo "$(pwd)/coredump/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern run: steps: - - source /tmp/virtenv/activate + - source /root/lttngvenv/activate - cd benchmarks - lava-test-case build-benchmarks --shell "make" - lava-test-case run-benchmarks --shell "./run.sh failing-close" diff --git a/lava/baremetal-tests/failing-open-efault.yml b/lava/baremetal-tests/failing-open-efault.yml index a05b1fd..ece0c8f 100644 --- a/lava/baremetal-tests/failing-open-efault.yml +++ b/lava/baremetal-tests/failing-open-efault.yml @@ -20,7 +20,7 @@ install: - echo "$(pwd)/coredump/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern run: steps: - - source /tmp/virtenv/activate + - source /root/lttngvenv/activate - cd benchmarks - lava-test-case build-benchmarks --shell "make" - lava-test-case run-benchmarks --shell "./run.sh failing-open-efault" diff --git a/lava/baremetal-tests/failing-open-enoent.yml b/lava/baremetal-tests/failing-open-enoent.yml index 980c72e..31c4a29 100644 --- a/lava/baremetal-tests/failing-open-enoent.yml +++ b/lava/baremetal-tests/failing-open-enoent.yml @@ -20,7 +20,7 @@ install: - echo "$(pwd)/coredump/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern run: steps: - - source /tmp/virtenv/activate + - source /root/lttngvenv/activate - cd benchmarks - lava-test-case build-benchmarks --shell "make" - lava-test-case run-benchmarks --shell "./run.sh failing-open-enoent" diff --git a/lava/baremetal-tests/kernel-tests.yml b/lava/baremetal-tests/kernel-tests.yml index a079a67..35ee979 100644 --- a/lava/baremetal-tests/kernel-tests.yml +++ b/lava/baremetal-tests/kernel-tests.yml @@ -11,11 +11,11 @@ install: - echo "$(pwd)/coredump/core.%e.%p.%h.%t" > /proc/sys/kernel/core_pattern run: steps: - - source /tmp/virtenv/activate - - cd /tmp/virtenv/src/lttng-tools + - source /root/lttngvenv/activate + - cd /root/lttngvenv/src/lttng-tools - lava-test-case build-test-suite --shell "make" - cd tests - - lava-test-case run-tests --shell "./run.sh root_regression" + - lava-test-case run-tests --shell "prove --verbose --merge --exec '' - < root_regression" - cd - tar czf coredump.tar.gz coredump - lava-test-case-attach run-benchmarks coredump.tar.gz diff --git a/scripts/lttng-baremetal-tests/check-build-needs.sh b/scripts/lttng-baremetal-tests/check-build-needs.sh index 52aea76..625047e 100644 --- a/scripts/lttng-baremetal-tests/check-build-needs.sh +++ b/scripts/lttng-baremetal-tests/check-build-needs.sh @@ -47,9 +47,13 @@ if [ $NEED_MODULES_BUILD -eq 1 ] || [ $NEED_KERNEL_BUILD -eq 1 ] ; then popd git clone https://github.com/lttng/lttng-ci "$LTTNG_CI_PATH" - cp "$LTTNG_CI_PATH"/lava/kernel/vanilla/x86_64_server.config "$LINUX_PATH"/.config - + cp "$LTTNG_CI_PATH"/lava/kernel/vanilla/x86_64_server.config "$LINUX_PATH/.config" make --directory="$LINUX_PATH" olddefconfig + + if [ $BUILD_DEVICE = 'kvm' ] ; then + make --directory="$LINUX_PATH" kvmconfig + fi + make --directory="$LINUX_PATH" modules_prepare fi diff --git a/scripts/lttng-baremetal-tests/generate-properties-master.sh b/scripts/lttng-baremetal-tests/generate-properties-master.sh index 74ce818..22111a8 100644 --- a/scripts/lttng-baremetal-tests/generate-properties-master.sh +++ b/scripts/lttng-baremetal-tests/generate-properties-master.sh @@ -48,8 +48,9 @@ echo "LTTNG_TOOLS_COMMIT_ID=$LTTNG_TOOLS_COMMIT_ID" >> properties.txt BASE_STORAGE_FOLDER="/storage/jenkins-lava/baremetal-tests" +echo "BUILD_DEVICE=$BUILD_DEVICE" >> properties.txt echo "KGITREPO=git://git-mirror.internal.efficios.com/git/linux-stable.git" >> properties.txt echo "STORAGE_KERNEL_FOLDER=$BASE_STORAGE_FOLDER/kernel" >> properties.txt -echo "STORAGE_KERNEL_IMAGE=$BASE_STORAGE_FOLDER/kernel/$KERNEL_COMMIT_ID.bzImage" >> properties.txt -echo "STORAGE_LINUX_MODULES=$BASE_STORAGE_FOLDER/modules/linux/$KERNEL_COMMIT_ID.linux.modules.tar.gz" >> properties.txt -echo "STORAGE_LTTNG_MODULES=$BASE_STORAGE_FOLDER/modules/lttng/$KERNEL_COMMIT_ID-$LTTNG_MODULES_COMMIT_ID.lttng.modules.tar.gz" >> properties.txt +echo "STORAGE_KERNEL_IMAGE=$BASE_STORAGE_FOLDER/kernel/$KERNEL_COMMIT_ID.$BUILD_DEVICE.bzImage" >> properties.txt +echo "STORAGE_LINUX_MODULES=$BASE_STORAGE_FOLDER/modules/linux/$KERNEL_COMMIT_ID.$BUILD_DEVICE.linux.modules.tar.gz" >> properties.txt +echo "STORAGE_LTTNG_MODULES=$BASE_STORAGE_FOLDER/modules/lttng/$KERNEL_COMMIT_ID-$LTTNG_MODULES_COMMIT_ID.$BUILD_DEVICE.lttng.modules.tar.gz" >> properties.txt diff --git a/scripts/lttng-baremetal-tests/generate-properties-slave.sh b/scripts/lttng-baremetal-tests/generate-properties-slave.sh index 449a9da..017f1f6 100644 --- a/scripts/lttng-baremetal-tests/generate-properties-slave.sh +++ b/scripts/lttng-baremetal-tests/generate-properties-slave.sh @@ -40,9 +40,10 @@ BUILD_NAME="$KERNEL_COMMIT_ID-$LTTNG_MODULES_COMMIT_ID" echo "KERNEL_COMMIT_ID=$KERNEL_COMMIT_ID" >> properties.txt echo "LTTNG_MODULES_COMMIT_ID=$LTTNG_MODULES_COMMIT_ID" >> properties.txt echo "BUILD_NAME=$BUILD_NAME" >> properties.txt +echo "BUILD_DEVICE=$BUILD_DEVICE" >> properties.txt -echo "STORAGE_KERNEL_MODULE_SYMVERS=$STORAGE_KERNEL_FOLDER/$KERNEL_COMMIT_ID.symvers" >>properties.txt -echo "STORAGE_KERNEL_CONFIG=$STORAGE_KERNEL_FOLDER/$KERNEL_COMMIT_ID.config" >> properties.txt +echo "STORAGE_KERNEL_MODULE_SYMVERS=$STORAGE_KERNEL_FOLDER/$KERNEL_COMMIT_ID.$BUILD_DEVICE.symvers" >>properties.txt +echo "STORAGE_KERNEL_CONFIG=$STORAGE_KERNEL_FOLDER/$KERNEL_COMMIT_ID.$BUILD_DEVICE.config" >> properties.txt echo "STORAGE_HOST=storage01.internal.efficios.com" >> properties.txt echo "STORAGE_USER=jenkins-lava" >> properties.txt diff --git a/scripts/lttng-baremetal-tests/lava-submit.py b/scripts/lttng-baremetal-tests/lava-submit.py index a0e3407..52bc4d7 100644 --- a/scripts/lttng-baremetal-tests/lava-submit.py +++ b/scripts/lttng-baremetal-tests/lava-submit.py @@ -90,15 +90,18 @@ def print_test_output(server, job): print('----- TEST SUITE OUTPUT END -----') break -def create_new_job(name): +def create_new_job(name, build_device): job = OrderedDict({ 'health_check': False, 'job_name': name, - 'device_type': 'x86', - 'tags': [ 'dev-sda1' ], + 'device_type':build_device, + 'tags': [ ], 'timeout': 18000, 'actions': [] }) + if build_device in 'x86': + job['tags'].append('dev-sda1') + return job def get_boot_cmd(): @@ -107,7 +110,7 @@ def get_boot_cmd(): }) return command -def get_config_cmd(): +def get_config_cmd(build_device): packages=['bsdtar', 'psmisc', 'wget', 'python3', 'python3-pip', \ 'libglib2.0-dev', 'libffi-dev', 'elfutils', 'libdw-dev', \ 'libelf-dev', 'libmount-dev', 'libxml2', 'python3-pandas', \ @@ -120,15 +123,21 @@ def get_config_cmd(): 'route -n', 'cat /etc/resolv.conf', 'echo nameserver 172.18.0.12 > /etc/resolv.conf', - 'mount /dev/sda1 /tmp', - 'rm -rf /tmp/*', - 'depmod -a', - 'locale-gen en_US.UTF-8', - 'apt-get update', - 'apt-get install -y {}'.format(' '.join(packages)), + 'groupadd tracing' ] } }) + if build_device in 'x86': + command['parameters']['commands'].extend([ + 'mount /dev/sda1 /tmp', + 'rm -rf /tmp/*']) + + command['parameters']['commands'].extend([ + 'depmod -a', + 'locale-gen en_US.UTF-8', + 'apt-get update', + 'apt-get install -y {}'.format(' '.join(packages)) + ]) return command def get_benchmarks_cmd(): @@ -183,7 +192,26 @@ def get_results_cmd(stream_name): command['parameters']['stream']='/anonymous/'+stream_name+'/' return command -def get_deploy_cmd(jenkins_job, kernel_path, linux_modules_path, lttng_modules_path, nb_iter=None): +def get_deploy_cmd_kvm(jenkins_job, kernel_path, linux_modules_path, lttng_modules_path): + command = OrderedDict({ + 'command': 'deploy_kernel', + 'metadata': {}, + 'parameters': { + 'customize': {}, + 'kernel': None, + 'rootfs': 'file:///var/lib/lava-server/default/media/images/trusty-grub.img.gz', + 'target_type': 'ubuntu' + } + }) + + command['parameters']['customize'][SCP_PATH+linux_modules_path]=['rootfs:/','archive'] + command['parameters']['customize'][SCP_PATH+lttng_modules_path]=['rootfs:/','archive'] + command['parameters']['kernel'] = str(SCP_PATH+kernel_path) + command['metadata']['jenkins_jobname'] = jenkins_job + + return command + +def get_deploy_cmd_x86(jenkins_job, kernel_path, linux_modules_path, lttng_modules_path, nb_iter=None): command = OrderedDict({ 'command': 'deploy_kernel', 'metadata': {}, @@ -198,14 +226,14 @@ def get_deploy_cmd(jenkins_job, kernel_path, linux_modules_path, lttng_modules_p command['parameters']['overlays'].append( str(SCP_PATH+linux_modules_path)) command['parameters']['overlays'].append( str(SCP_PATH+lttng_modules_path)) command['parameters']['kernel'] = str(SCP_PATH+kernel_path) - command['metadata']['jenkins_jobname'] = jenkins_job + command['metadata']['jenkins_jobname'] = jenkins_job if nb_iter is not None: command['metadata']['nb_iterations'] = nb_iter return command -def get_env_setup_cmd(lttng_tools_commit, lttng_ust_commit=None): +def get_env_setup_cmd(build_device, lttng_tools_commit, lttng_ust_commit=None): command = OrderedDict({ 'command': 'lava_command_run', 'parameters': { @@ -228,9 +256,18 @@ def get_env_setup_cmd(lttng_tools_commit, lttng_ust_commit=None): ' --override projects.lttng-ust.checkout='+lttng_ust_commit+ \ ' --profile lttng-ust-no-man-pages' - vlttng_cmd += " /tmp/virtenv" + virtenv_path = None + if build_device in 'kvm': + virtenv_path = '/root/virtenv' + else: + virtenv_path = '/tmp/virtenv' + + vlttng_cmd += ' '+virtenv_path command['parameters']['commands'].append(vlttng_cmd) + command['parameters']['commands'].append('ln -s '+virtenv_path+' /root/lttngvenv') + command['parameters']['commands'].append('sync') + return command def main(): @@ -246,12 +283,6 @@ def main(): parser.add_argument('-uc', '--ust-commit', required=False) args = parser.parse_args() - - j = create_new_job(args.jobname) - j['actions'].append(get_deploy_cmd(args.jobname, args.kernel, args.kmodule, args.lmodule)) - j['actions'].append(get_boot_cmd()) - j['actions'].append(get_config_cmd()) - if args.type in 'benchmarks': test_type = TestType.benchmarks elif args.type in 'tests': @@ -261,14 +292,25 @@ def main(): return -1 if test_type is TestType.benchmarks: - j['actions'].append(get_env_setup_cmd(args.tools_commit)) + j = create_new_job(args.jobname, build_device='x86') + j['actions'].append(get_deploy_cmd_x86(args.jobname, args.kernel, args.kmodule, args.lmodule)) + elif test_type is TestType.tests: + j = create_new_job(args.jobname, build_device='kvm') + j['actions'].append(get_deploy_cmd_kvm(args.jobname, args.kernel, args.kmodule, args.lmodule)) + + j['actions'].append(get_boot_cmd()) + + if test_type is TestType.benchmarks: + j['actions'].append(get_config_cmd('x86')) + j['actions'].append(get_env_setup_cmd('x86', args.tools_commit)) j['actions'].append(get_benchmarks_cmd()) j['actions'].append(get_results_cmd(stream_name='benchmark-kernel')) elif test_type is TestType.tests: if args.ust_commit is None: print('Tests runs need -uc/--ust-commit options. Exiting...') return -1 - j['actions'].append(get_env_setup_cmd(args.tools_commit, args.ust_commit)) + j['actions'].append(get_config_cmd('kvm')) + j['actions'].append(get_env_setup_cmd('kvm', args.tools_commit, args.ust_commit)) j['actions'].append(get_tests_cmd()) j['actions'].append(get_results_cmd(stream_name='tests-kernel')) else: -- 2.34.1