* [KVM_AUTOTEST] add kvm hugepage variant and test
@ 2009-07-09 9:24 Lukáš Doktor
2009-07-09 12:30 ` Michael Goldish
` (4 more replies)
0 siblings, 5 replies; 13+ messages in thread
From: Lukáš Doktor @ 2009-07-09 9:24 UTC (permalink / raw)
To: KVM list, Jason Wang
[-- Attachment #1: Type: text/plain, Size: 691 bytes --]
This patch adds kvm_hugepage variant. It prepares the host system and
start vm with -mem-path option. It does not clean after itself, because
it's impossible to unmount and free hugepages before all guests are
destroyed.
There is also added autotest.libhugetlbfs test.
I need to ask you what to do with change of qemu parameter. Newest
versions are using -mempath insted of -mem-path. This is impossible to
fix using current config file. I can see 2 solutions:
1) direct change in kvm_vm.py (parse output and try another param)
2) detect qemu capabilities outside and create additional layer (better
for future occurrence)
Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5
[-- Attachment #2: kvm_hugepage.patch --]
[-- Type: text/plain, Size: 3731 bytes --]
diff -Narup orig/client/tests/kvm/autotest_control/libhugetlbfs.control new/client/tests/kvm/autotest_control/libhugetlbfs.control
--- orig/client/tests/kvm/autotest_control/libhugetlbfs.control 1970-01-01 01:00:00.000000000 +0100
+++ new/client/tests/kvm/autotest_control/libhugetlbfs.control 2009-07-08 13:18:07.000000000 +0200
@@ -0,0 +1,13 @@
+AUTHOR = 'aganti@google.com (Ashwin Ganti)'
+TIME = 'MEDIUM'
+NAME = 'libhugetlbfs test'
+TEST_TYPE = 'client'
+TEST_CLASS = 'Kernel'
+TEST_CATEGORY = 'Functional'
+
+DOC = '''
+Tests basic huge pages functionality when using libhugetlbfs. For more info
+about libhugetlbfs see http://libhugetlbfs.ozlabs.org/
+'''
+
+job.run_test('libhugetlbfs', dir='/mnt')
diff -Narup orig/client/tests/kvm/kvm_tests.cfg.sample new/client/tests/kvm/kvm_tests.cfg.sample
--- orig/client/tests/kvm/kvm_tests.cfg.sample 2009-07-08 13:18:07.000000000 +0200
+++ new/client/tests/kvm/kvm_tests.cfg.sample 2009-07-09 10:15:58.000000000 +0200
@@ -79,6 +79,9 @@ variants:
- bonnie:
test_name = bonnie
test_control_file = bonnie.control
+ - libhugetlbfs:
+ test_name = libhugetlbfs
+ test_control_file = libhugetlbfs.control
- linux_s3: install setup
type = linux_s3
@@ -546,6 +549,12 @@ variants:
only default
image_format = raw
+variants:
+ - @kvm_smallpages:
+ - kvm_hugepages:
+ pre_command = "/bin/bash scripts/hugepage.sh /mnt/hugepage"
+ extra_params += " -mem-path /mnt/hugepage"
+
variants:
- @basic:
@@ -559,6 +568,7 @@ variants:
only Fedora.8.32
only install setup boot shutdown
only rtl8139
+ only kvm_smallpages
- @sample1:
only qcow2
only ide
diff -Narup orig/client/tests/kvm/kvm_vm.py new/client/tests/kvm/kvm_vm.py
--- orig/client/tests/kvm/kvm_vm.py 2009-07-08 13:18:07.000000000 +0200
+++ new/client/tests/kvm/kvm_vm.py 2009-07-09 10:05:19.000000000 +0200
@@ -400,6 +400,13 @@ class VM:
self.destroy()
return False
+ if output:
+ logging.debug("qemu produced some output:\n%s", output)
+ if "alloc_mem_area" in output:
+ logging.error("Could not allocate hugepage memory"
+ " -- qemu command:\n%s", qemu_command)
+ return False
+
logging.debug("VM appears to be alive with PID %d", self.pid)
return True
diff -Narup orig/client/tests/kvm/scripts/hugepage.sh new/client/tests/kvm/scripts/hugepage.sh
--- orig/client/tests/kvm/scripts/hugepage.sh 1970-01-01 01:00:00.000000000 +0100
+++ new/client/tests/kvm/scripts/hugepage.sh 2009-07-09 09:47:14.000000000 +0200
@@ -0,0 +1,38 @@
+#!/bin/bash
+# Alocates enaugh hugepages for $1 memory and mount hugetlbfs to $2.
+if [ $# -ne 1 ]; then
+ echo "USAGE: $0 mem_path"
+ exit 1
+fi
+
+Hugepagesize=$(grep Hugepagesize /proc/meminfo | cut -d':' -f 2 | \
+ xargs | cut -d' ' -f1)
+VMS=$(expr $(echo $KVM_TEST_vms | grep -c ' ') + 1)
+VMSM=$(expr $(expr $VMS \* $KVM_TEST_mem) + $(expr $VMS \* 64 ))
+TARGET=$(expr $VMSM \* 1024 \/ $Hugepagesize)
+
+NR=$(cat /proc/sys/vm/nr_hugepages)
+while [ "$NR" -ne "$TARGET" ]; do
+ NR_="$NR";echo $TARGET > /proc/sys/vm/nr_hugepages
+ sleep 5s
+ NR=$(cat /proc/sys/vm/nr_hugepages)
+ if [ "$NR" -eq "$NR_" ] ; then
+ echo "Can not alocate $TARGET of hugepages"
+ exit 2
+ fi
+done
+
+if [ ! "$(mount | grep /mnt/hugepage |grep hugetlbfs)" ]; then
+ mkdir -p $1
+ mount -t hugetlbfs none $1 || \
+ (echo "Can not mount hugetlbfs filesystem to $1"; exit 3)
+else
+ echo "hugetlbfs filesystem already mounted"
+fi
^ permalink raw reply [flat|nested] 13+ messages in thread* Re: [KVM_AUTOTEST] add kvm hugepage variant and test 2009-07-09 9:24 [KVM_AUTOTEST] add kvm hugepage variant and test Lukáš Doktor @ 2009-07-09 12:30 ` Michael Goldish 2009-07-09 12:55 ` Lukáš Doktor 2009-07-10 4:38 ` sudhir kumar ` (3 subsequent siblings) 4 siblings, 1 reply; 13+ messages in thread From: Michael Goldish @ 2009-07-09 12:30 UTC (permalink / raw) To: Lukáš Doktor; +Cc: KVM list, Jason Wang I don't think you need to explicitly check for a memory allocation failure in VM.create() ("qemu produced some output ..."). VM.create() already makes sure the VM is started successfully, and prints informative failure messages if there's any problem. ----- "Lukáš Doktor" <ldoktor@redhat.com> wrote: > This patch adds kvm_hugepage variant. It prepares the host system and > start vm with -mem-path option. It does not clean after itself, > because > it's impossible to unmount and free hugepages before all guests are > destroyed. > > There is also added autotest.libhugetlbfs test. > > I need to ask you what to do with change of qemu parameter. Newest > versions are using -mempath insted of -mem-path. This is impossible to > fix using current config file. I can see 2 solutions: > 1) direct change in kvm_vm.py (parse output and try another param) > 2) detect qemu capabilities outside and create additional layer > (better > for future occurrence) I'll have to think about this a little before answering. > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add kvm hugepage variant and test 2009-07-09 12:30 ` Michael Goldish @ 2009-07-09 12:55 ` Lukáš Doktor 0 siblings, 0 replies; 13+ messages in thread From: Lukáš Doktor @ 2009-07-09 12:55 UTC (permalink / raw) To: Michael Goldish; +Cc: KVM list, Jason Wang Hi Michael, actually it's necessarily. qemu-kvm only put this message into the output and continue booting the guest without hugepage support. Autotest than runs all the test. Later in the output is no mention about this. You have to predict that this happend and look at debug output of all particular tests to see if qemu didn't produced this message. Using this check if qemu-kvm can't allocate the hugepage memory it fails this test, log this information and continue with next variant. Dne 9.7.2009 14:30, Michael Goldish napsal(a): > I don't think you need to explicitly check for a memory allocation > failure in VM.create() ("qemu produced some output ..."). > VM.create() already makes sure the VM is started successfully, and > prints informative failure messages if there's any problem. > > ----- "Lukáš Doktor"<ldoktor@redhat.com> wrote: > >> This patch adds kvm_hugepage variant. It prepares the host system and >> start vm with -mem-path option. It does not clean after itself, >> because >> it's impossible to unmount and free hugepages before all guests are >> destroyed. >> >> There is also added autotest.libhugetlbfs test. >> >> I need to ask you what to do with change of qemu parameter. Newest >> versions are using -mempath insted of -mem-path. This is impossible to >> fix using current config file. I can see 2 solutions: >> 1) direct change in kvm_vm.py (parse output and try another param) >> 2) detect qemu capabilities outside and create additional layer >> (better >> for future occurrence) > > I'll have to think about this a little before answering. > >> Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add kvm hugepage variant and test 2009-07-09 9:24 [KVM_AUTOTEST] add kvm hugepage variant and test Lukáš Doktor 2009-07-09 12:30 ` Michael Goldish @ 2009-07-10 4:38 ` sudhir kumar 2009-07-10 6:48 ` Lukáš Doktor 2009-07-10 8:03 ` Lukáš Doktor ` (2 subsequent siblings) 4 siblings, 1 reply; 13+ messages in thread From: sudhir kumar @ 2009-07-10 4:38 UTC (permalink / raw) To: Lukáš Doktor; +Cc: KVM list, Jason Wang Why do you want to use a control file and put the libhugetlbfs as a variant of autotest in kvm? Just keeping the kvm_hugepages variant will not serve the same purpose ? I have been using hugetlbfs variant for a long but yes without pre script(I have done that manually)? Am I missing something here? Rest all looks fine to me except you need somewhere s/enaugh/enough 2009/7/9 Lukáš Doktor <ldoktor@redhat.com>: > This patch adds kvm_hugepage variant. It prepares the host system and start > vm with -mem-path option. It does not clean after itself, because it's > impossible to unmount and free hugepages before all guests are destroyed. > > There is also added autotest.libhugetlbfs test. > > I need to ask you what to do with change of qemu parameter. Newest versions > are using -mempath insted of -mem-path. This is impossible to fix using > current config file. I can see 2 solutions: > 1) direct change in kvm_vm.py (parse output and try another param) > 2) detect qemu capabilities outside and create additional layer (better for > future occurrence) > > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 > -- Sudhir Kumar ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add kvm hugepage variant and test 2009-07-10 4:38 ` sudhir kumar @ 2009-07-10 6:48 ` Lukáš Doktor 0 siblings, 0 replies; 13+ messages in thread From: Lukáš Doktor @ 2009-07-10 6:48 UTC (permalink / raw) To: sudhir kumar; +Cc: KVM list, Jason Wang - kvm_hugepages variant enables us to test if (host) kvm use of hugepages works - libhugetlbfs test inside of guest prove, that (guest) system is able to handle hugepages (independently of whether guest uses hugepages). This function is necessarily eg. if you want to run Oracle server inside the guest. So basically this are 2 independent things, but somehow connected. If you want I can split the patches. Dne 10.7.2009 06:38, sudhir kumar napsal(a): > Why do you want to use a control file and put the libhugetlbfs as a > variant of autotest in kvm? Just keeping the kvm_hugepages variant > will not serve the same purpose ? I have been using hugetlbfs variant > for a long but yes without pre script(I have done that manually)? Am I > missing something here? > Rest all looks fine to me except you need somewhere s/enaugh/enough > > 2009/7/9 Lukáš Doktor<ldoktor@redhat.com>: >> This patch adds kvm_hugepage variant. It prepares the host system and start >> vm with -mem-path option. It does not clean after itself, because it's >> impossible to unmount and free hugepages before all guests are destroyed. >> >> There is also added autotest.libhugetlbfs test. >> >> I need to ask you what to do with change of qemu parameter. Newest versions >> are using -mempath insted of -mem-path. This is impossible to fix using >> current config file. I can see 2 solutions: >> 1) direct change in kvm_vm.py (parse output and try another param) >> 2) detect qemu capabilities outside and create additional layer (better for >> future occurrence) >> >> Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 >> > > > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add kvm hugepage variant and test 2009-07-09 9:24 [KVM_AUTOTEST] add kvm hugepage variant and test Lukáš Doktor 2009-07-09 12:30 ` Michael Goldish 2009-07-10 4:38 ` sudhir kumar @ 2009-07-10 8:03 ` Lukáš Doktor 2009-07-10 10:01 ` [KVM_AUTOTEST] add kvm hugepage variant Lukáš Doktor 2009-07-10 10:04 ` [KVM_AUTOTEST] add autotest.libhugetlbfs test Lukáš Doktor 4 siblings, 0 replies; 13+ messages in thread From: Lukáš Doktor @ 2009-07-10 8:03 UTC (permalink / raw) To: KVM list, Jason Wang [-- Attachment #1: Type: text/plain, Size: 933 bytes --] I'm sorry this patch has a bug. hugepage variant doesn't allocate enough memory with stress_boot (stress_boot uses different method to define VMS). Attached the fixed patch. Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): > This patch adds kvm_hugepage variant. It prepares the host system and > start vm with -mem-path option. It does not clean after itself, because > it's impossible to unmount and free hugepages before all guests are > destroyed. > > There is also added autotest.libhugetlbfs test. > > I need to ask you what to do with change of qemu parameter. Newest > versions are using -mempath insted of -mem-path. This is impossible to > fix using current config file. I can see 2 solutions: > 1) direct change in kvm_vm.py (parse output and try another param) > 2) detect qemu capabilities outside and create additional layer (better > for future occurrence) > > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 [-- Attachment #2: kvm_hugepage2.patch --] [-- Type: text/plain, Size: 3840 bytes --] diff -Narup orig/client/tests/kvm/autotest_control/libhugetlbfs.control new/client/tests/kvm/autotest_control/libhugetlbfs.control --- orig/client/tests/kvm/autotest_control/libhugetlbfs.control 1970-01-01 01:00:00.000000000 +0100 +++ new/client/tests/kvm/autotest_control/libhugetlbfs.control 2009-07-08 13:18:07.000000000 +0200 @@ -0,0 +1,13 @@ +AUTHOR = 'aganti@google.com (Ashwin Ganti)' +TIME = 'MEDIUM' +NAME = 'libhugetlbfs test' +TEST_TYPE = 'client' +TEST_CLASS = 'Kernel' +TEST_CATEGORY = 'Functional' + +DOC = ''' +Tests basic huge pages functionality when using libhugetlbfs. For more info +about libhugetlbfs see http://libhugetlbfs.ozlabs.org/ +''' + +job.run_test('libhugetlbfs', dir='/mnt') diff -Narup orig/client/tests/kvm/kvm_tests.cfg.sample new/client/tests/kvm/kvm_tests.cfg.sample --- orig/client/tests/kvm/kvm_tests.cfg.sample 2009-07-08 13:18:07.000000000 +0200 +++ new/client/tests/kvm/kvm_tests.cfg.sample 2009-07-09 10:15:58.000000000 +0200 @@ -79,6 +79,9 @@ variants: - bonnie: test_name = bonnie test_control_file = bonnie.control + - libhugetlbfs: + test_name = libhugetlbfs + test_control_file = libhugetlbfs.control - linux_s3: install setup type = linux_s3 @@ -546,6 +549,12 @@ variants: only default image_format = raw +variants: + - @kvm_smallpages: + - kvm_hugepages: + pre_command = "/bin/bash scripts/hugepage.sh /mnt/hugepage" + extra_params += " -mem-path /mnt/hugepage" + variants: - @basic: @@ -559,6 +568,7 @@ variants: only Fedora.8.32 only install setup boot shutdown only rtl8139 + only kvm_smallpages - @sample1: only qcow2 only ide diff -Narup orig/client/tests/kvm/kvm_vm.py new/client/tests/kvm/kvm_vm.py --- orig/client/tests/kvm/kvm_vm.py 2009-07-08 13:18:07.000000000 +0200 +++ new/client/tests/kvm/kvm_vm.py 2009-07-09 10:05:19.000000000 +0200 @@ -400,6 +400,13 @@ class VM: self.destroy() return False + if output: + logging.debug("qemu produced some output:\n%s", output) + if "alloc_mem_area" in output: + logging.error("Could not allocate hugepage memory" + " -- qemu command:\n%s", qemu_command) + return False + logging.debug("VM appears to be alive with PID %d", self.pid) return True diff -Narup orig/client/tests/kvm/scripts/hugepage.sh new/client/tests/kvm/scripts/hugepage.sh --- orig/client/tests/kvm/scripts/hugepage.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/client/tests/kvm/scripts/hugepage.sh 2009-07-09 09:47:14.000000000 +0200 @@ -0,0 +1,38 @@ +#!/bin/bash +# Alocates enaugh hugepages for $1 memory and mount hugetlbfs to $2. +if [ $# -ne 1 ]; then + echo "USAGE: $0 mem_path" + exit 1 +fi + +Hugepagesize=$(grep Hugepagesize /proc/meminfo | cut -d':' -f 2 | \ + xargs | cut -d' ' -f1) +VMS=$(expr $(echo $KVM_TEST_vms | grep -c ' ') + 1) +if [ "$KVM_TEST_max_vms" ] && [ "$VMS" -lt "$KVM_TEST_max_vms" ]; then + VMS="$KVM_TEST_max_vms" +fi +VMSM=$(expr $(expr $VMS \* $KVM_TEST_mem) + $(expr $VMS \* 64 )) +TARGET=$(expr $VMSM \* 1024 \/ $Hugepagesize) + +NR=$(cat /proc/sys/vm/nr_hugepages) +while [ "$NR" -ne "$TARGET" ]; do + NR_="$NR";echo $TARGET > /proc/sys/vm/nr_hugepages + sleep 5s + NR=$(cat /proc/sys/vm/nr_hugepages) + if [ "$NR" -eq "$NR_" ] ; then + echo "Can not alocate $TARGET of hugepages" + exit 2 + fi +done + +if [ ! "$(mount | grep /mnt/hugepage |grep hugetlbfs)" ]; then + mkdir -p $1 + mount -t hugetlbfs none $1 || \ + (echo "Can not mount hugetlbfs filesystem to $1"; exit 3) +else + echo "hugetlbfs filesystem already mounted" +fi ^ permalink raw reply [flat|nested] 13+ messages in thread
* [KVM_AUTOTEST] add kvm hugepage variant 2009-07-09 9:24 [KVM_AUTOTEST] add kvm hugepage variant and test Lukáš Doktor ` (2 preceding siblings ...) 2009-07-10 8:03 ` Lukáš Doktor @ 2009-07-10 10:01 ` Lukáš Doktor 2009-07-20 12:58 ` Lucas Meneghel Rodrigues 2009-07-10 10:04 ` [KVM_AUTOTEST] add autotest.libhugetlbfs test Lukáš Doktor 4 siblings, 1 reply; 13+ messages in thread From: Lukáš Doktor @ 2009-07-10 10:01 UTC (permalink / raw) To: KVM list, Jason Wang, Lucas Meneghel Rodrigues, Michael Goldish [-- Attachment #1: Type: text/plain, Size: 1380 bytes --] After discussion I split the patches. This patch adds kvm_hugepage variant. It prepares the host system and start vm with -mem-path option. It does not clean after itself, because it's impossible to unmount and free hugepages before all guests are destroyed. I need to ask you what to do with change of qemu parameter. Newest versions are using -mempath insted of -mem-path. This is impossible to fix using current config file. I can see 2 solutions: 1) direct change in kvm_vm.py (parse output and try another param) 2) detect qemu capabilities outside and create additional layer (better for future occurrence) Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): > This patch adds kvm_hugepage variant. It prepares the host system and > start vm with -mem-path option. It does not clean after itself, because > it's impossible to unmount and free hugepages before all guests are > destroyed. > > There is also added autotest.libhugetlbfs test. > > I need to ask you what to do with change of qemu parameter. Newest > versions are using -mempath insted of -mem-path. This is impossible to > fix using current config file. I can see 2 solutions: > 1) direct change in kvm_vm.py (parse output and try another param) > 2) detect qemu capabilities outside and create additional layer (better > for future occurrence) > > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 [-- Attachment #2: kvm_hugepage.patch --] [-- Type: text/plain, Size: 2787 bytes --] diff -Narup orig/client/tests/kvm/kvm_tests.cfg.sample new/client/tests/kvm/kvm_tests.cfg.sample --- orig/client/tests/kvm/kvm_tests.cfg.sample 2009-07-08 13:18:07.000000000 +0200 +++ new/client/tests/kvm/kvm_tests.cfg.sample 2009-07-09 10:15:58.000000000 +0200 @@ -546,6 +549,12 @@ variants: only default image_format = raw +variants: + - @kvm_smallpages: + - kvm_hugepages: + pre_command = "/bin/bash scripts/hugepage.sh /mnt/hugepage" + extra_params += " -mem-path /mnt/hugepage" + variants: - @basic: @@ -559,6 +568,7 @@ variants: only Fedora.8.32 only install setup boot shutdown only rtl8139 + only kvm_smallpages - @sample1: only qcow2 only ide diff -Narup orig/client/tests/kvm/kvm_vm.py new/client/tests/kvm/kvm_vm.py --- orig/client/tests/kvm/kvm_vm.py 2009-07-08 13:18:07.000000000 +0200 +++ new/client/tests/kvm/kvm_vm.py 2009-07-09 10:05:19.000000000 +0200 @@ -400,6 +400,13 @@ class VM: self.destroy() return False + if output: + logging.debug("qemu produced some output:\n%s", output) + if "alloc_mem_area" in output: + logging.error("Could not allocate hugepage memory" + " -- qemu command:\n%s", qemu_command) + return False + logging.debug("VM appears to be alive with PID %d", self.pid) return True diff -Narup orig/client/tests/kvm/scripts/hugepage.sh new/client/tests/kvm/scripts/hugepage.sh --- orig/client/tests/kvm/scripts/hugepage.sh 1970-01-01 01:00:00.000000000 +0100 +++ new/client/tests/kvm/scripts/hugepage.sh 2009-07-09 09:47:14.000000000 +0200 @@ -0,0 +1,34 @@ +#!/bin/bash +# Alocates enough hugepages and mount hugetlbfs to $1. +if [ $# -ne 1 ]; then + echo "USAGE: $0 mem_path" + exit 1 +fi + +Hugepagesize=$(grep Hugepagesize /proc/meminfo | cut -d':' -f 2 | \ + xargs | cut -d' ' -f1) +VMS=$(expr $(echo $KVM_TEST_vms | grep -c ' ') + 1) +if [ "$KVM_TEST_max_vms" ] && [ "$VMS" -lt "$KVM_TEST_max_vms" ]; then + VMS="$KVM_TEST_max_vms" +fi +VMSM=$(expr $(expr $VMS \* $KVM_TEST_mem) + $(expr $VMS \* 64 )) +TARGET=$(expr $VMSM \* 1024 \/ $Hugepagesize) + +NR=$(cat /proc/sys/vm/nr_hugepages) +while [ "$NR" -ne "$TARGET" ]; do + NR_="$NR";echo $TARGET > /proc/sys/vm/nr_hugepages + sleep 5s + NR=$(cat /proc/sys/vm/nr_hugepages) + if [ "$NR" -eq "$NR_" ] ; then + echo "Can not alocate $TARGET of hugepages" + exit 2 + fi +done + +if [ ! "$(mount | grep /mnt/hugepage |grep hugetlbfs)" ]; then + mkdir -p $1 + mount -t hugetlbfs none $1 || \ + (echo "Can not mount hugetlbfs filesystem to $1"; exit 3) +else + echo "hugetlbfs filesystem already mounted" +fi ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add kvm hugepage variant 2009-07-10 10:01 ` [KVM_AUTOTEST] add kvm hugepage variant Lukáš Doktor @ 2009-07-20 12:58 ` Lucas Meneghel Rodrigues 2009-07-21 16:04 ` Lukáš Doktor 0 siblings, 1 reply; 13+ messages in thread From: Lucas Meneghel Rodrigues @ 2009-07-20 12:58 UTC (permalink / raw) To: Lukáš Doktor Cc: KVM list, Jason Wang, Michael Goldish, Autotest mailing list On Fri, 2009-07-10 at 12:01 +0200, Lukáš Doktor wrote: > After discussion I split the patches. Hi Lukáš, sorry for the delay answering your patch. Looks good to me in general, I have some remarks to make: 1) When posting patches to the autotest kvm tests, please cross post the autotest mailing list (autotest@test.kernel.org) and the KVM list. 2) About scripts to prepare the environment to perform tests - we've had some discussion about including shell scripts on autotest. Bottom line, autotest has a policy of not including non python code when possible [1]. So, would you mind re-creating your hugepage setup code in python and re-sending it? Thanks for your contribution, looking forward getting it integrated to our tests. [1] Unless when it is not practical for testing purposes - writing tests in C is just fine, for example. > This patch adds kvm_hugepage variant. It prepares the host system and > start vm with -mem-path option. It does not clean after itself, because > it's impossible to unmount and free hugepages before all guests are > destroyed. > > I need to ask you what to do with change of qemu parameter. Newest > versions are using -mempath insted of -mem-path. This is impossible to > fix using current config file. I can see 2 solutions: > 1) direct change in kvm_vm.py (parse output and try another param) > 2) detect qemu capabilities outside and create additional layer (better > for future occurrence) > > Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): > > This patch adds kvm_hugepage variant. It prepares the host system and > > start vm with -mem-path option. It does not clean after itself, because > > it's impossible to unmount and free hugepages before all guests are > > destroyed. > > > > There is also added autotest.libhugetlbfs test. > > > > I need to ask you what to do with change of qemu parameter. Newest > > versions are using -mempath insted of -mem-path. This is impossible to > > fix using current config file. I can see 2 solutions: > > 1) direct change in kvm_vm.py (parse output and try another param) > > 2) detect qemu capabilities outside and create additional layer (better > > for future occurrence) > > > > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 > ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add kvm hugepage variant 2009-07-20 12:58 ` Lucas Meneghel Rodrigues @ 2009-07-21 16:04 ` Lukáš Doktor 2009-07-22 5:57 ` [Autotest] " sudhir kumar 2009-07-27 21:05 ` Lucas Meneghel Rodrigues 0 siblings, 2 replies; 13+ messages in thread From: Lukáš Doktor @ 2009-07-21 16:04 UTC (permalink / raw) To: Lucas Meneghel Rodrigues Cc: KVM list, Jason Wang, Michael Goldish, Autotest mailing list [-- Attachment #1: Type: text/plain, Size: 2535 bytes --] Well, thank you for notifications, I'll keep them in my mind. Also the problem with mempath vs. mem-path is solved. It was just a misspell in one version of KVM. * fixed patch attached Dne 20.7.2009 14:58, Lucas Meneghel Rodrigues napsal(a): > On Fri, 2009-07-10 at 12:01 +0200, Lukáš Doktor wrote: >> After discussion I split the patches. > > Hi Lukáš, sorry for the delay answering your patch. Looks good to me in > general, I have some remarks to make: > > 1) When posting patches to the autotest kvm tests, please cross post the > autotest mailing list (autotest@test.kernel.org) and the KVM list. > > 2) About scripts to prepare the environment to perform tests - we've had > some discussion about including shell scripts on autotest. Bottom line, > autotest has a policy of not including non python code when possible > [1]. So, would you mind re-creating your hugepage setup code in python > and re-sending it? > > Thanks for your contribution, looking forward getting it integrated to > our tests. > > [1] Unless when it is not practical for testing purposes - writing tests > in C is just fine, for example. > >> This patch adds kvm_hugepage variant. It prepares the host system and >> start vm with -mem-path option. It does not clean after itself, because >> it's impossible to unmount and free hugepages before all guests are >> destroyed. >> >> I need to ask you what to do with change of qemu parameter. Newest >> versions are using -mempath insted of -mem-path. This is impossible to >> fix using current config file. I can see 2 solutions: >> 1) direct change in kvm_vm.py (parse output and try another param) >> 2) detect qemu capabilities outside and create additional layer (better >> for future occurrence) >> >> Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): >>> This patch adds kvm_hugepage variant. It prepares the host system and >>> start vm with -mem-path option. It does not clean after itself, because >>> it's impossible to unmount and free hugepages before all guests are >>> destroyed. >>> >>> There is also added autotest.libhugetlbfs test. >>> >>> I need to ask you what to do with change of qemu parameter. Newest >>> versions are using -mempath insted of -mem-path. This is impossible to >>> fix using current config file. I can see 2 solutions: >>> 1) direct change in kvm_vm.py (parse output and try another param) >>> 2) detect qemu capabilities outside and create additional layer (better >>> for future occurrence) >>> >>> Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 > [-- Attachment #2: kvm_hugepage.patch --] [-- Type: text/plain, Size: 3315 bytes --] diff --git a/client/tests/kvm/kvm_tests.cfg.sample b/client/tests/kvm/kvm_tests.cfg.sample index 5bd6eb8..70e290d 100644 --- a/client/tests/kvm/kvm_tests.cfg.sample +++ b/client/tests/kvm/kvm_tests.cfg.sample @@ -555,6 +555,13 @@ variants: only default image_format = raw +variants: + - @kvm_smallpages: + - kvm_hugepages: + hugepage_path = /mnt/hugepage + pre_command = "/usr/bin/python scripts/hugepage.py" + extra_params += " -mem-path /mnt/hugepage" + variants: - @basic: @@ -568,6 +575,7 @@ variants: only Fedora.8.32 only install setup boot shutdown only rtl8139 + only kvm_smallpages - @sample1: only qcow2 only ide diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py index 48f2916..2b97ccc 100644 --- a/client/tests/kvm/kvm_vm.py +++ b/client/tests/kvm/kvm_vm.py @@ -412,6 +412,13 @@ class VM: self.destroy() return False + if output: + logging.debug("qemu produced some output:\n%s", output) + if "alloc_mem_area" in output: + logging.error("Could not allocate hugepage memory" + " -- qemu command:\n%s", qemu_command) + return False + logging.debug("VM appears to be alive with PID %d", self.pid) return True diff -Narup a/client/tests/kvm/scripts/hugepage.py b/client/tests/kvm/scripts/ hugepage.py --- a/client/tests/kvm/scripts/hugepage.py 1970-01-01 01:00:00.000000000 +0100 +++ a/client/tests/kvm/scripts/hugepage.py 2009-07-21 16:47:00.000000000 +0200 @@ -0,0 +1,63 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Alocates enough hugepages and mount hugetlbfs +import os, sys, time + +# Variables check & set +vms = os.environ['KVM_TEST_vms'].split().__len__() +try: + max_vms = int(os.environ['KVM_TEST_max_vms']) +except KeyError: + max_vms = 0 +mem = int(os.environ['KVM_TEST_mem']) +hugepage_path = os.environ['KVM_TEST_hugepage_path'] + +fmeminfo = open("/proc/meminfo", "r") +while fmeminfo: + line = fmeminfo.readline() + if line.startswith("Hugepagesize"): + dumm, hp_size, dumm = line.split() + break +fmeminfo.close() + +if not hp_size: + print "Could not get Hugepagesize from /proc/meminfo file" + raise ValueError + +if vms < max_vms: + vms = max_vms + +vmsm = ((vms * mem) + (vms * 64)) +target = (vmsm * 1024 / int(hp_size)) + +# Iteratively set # of hugepages +fhp = open("/proc/sys/vm/nr_hugepages", "r+") +hp = fhp.readline() +while int(hp) < target: + hp_ = hp + fhp.write(target.__str__()) + fhp.flush() + time.sleep(5) + fhp.seek(0) + hp = int(fhp.readline()) + if hp_ == hp: + raise MemoryError +fhp.close() + +# Mount hugepage filesystem, if necessarily +fmount = open("/proc/mounts", "r") +mount = 1 +line = fmount.readline() +while line: + if line.split()[1] == os.environ['KVM_TEST_hugepage_path']: + mount = 0 + break + line = fmount.readline() +fmount.close() + +if mount: + if not os.path.exists(hugepage_path): + os.makedirs(hugepage_path) + cmd = "mount -t hugetlbfs none %s" % (hugepage_path) + if os.system(cmd): + raise OSError ^ permalink raw reply related [flat|nested] 13+ messages in thread
* Re: [Autotest] [KVM_AUTOTEST] add kvm hugepage variant 2009-07-21 16:04 ` Lukáš Doktor @ 2009-07-22 5:57 ` sudhir kumar 2009-07-27 21:05 ` Lucas Meneghel Rodrigues 1 sibling, 0 replies; 13+ messages in thread From: sudhir kumar @ 2009-07-22 5:57 UTC (permalink / raw) To: Lukáš Doktor Cc: Lucas Meneghel Rodrigues, Autotest mailing list, Jason Wang, KVM list The patch looks to be pretty clean to me. I was running a small hugetlbfs script doing the same, but its good now as the script is being incorporated in the test. On Tue, Jul 21, 2009 at 9:34 PM, Lukáš Doktor<ldoktor@redhat.com> wrote: > Well, thank you for notifications, I'll keep them in my mind. > > Also the problem with mempath vs. mem-path is solved. It was just a misspell > in one version of KVM. > > * fixed patch attached > > Dne 20.7.2009 14:58, Lucas Meneghel Rodrigues napsal(a): >> >> On Fri, 2009-07-10 at 12:01 +0200, Lukáš Doktor wrote: >>> >>> After discussion I split the patches. >> >> Hi Lukáš, sorry for the delay answering your patch. Looks good to me in >> general, I have some remarks to make: >> >> 1) When posting patches to the autotest kvm tests, please cross post the >> autotest mailing list (autotest@test.kernel.org) and the KVM list. >> >> 2) About scripts to prepare the environment to perform tests - we've had >> some discussion about including shell scripts on autotest. Bottom line, >> autotest has a policy of not including non python code when possible >> [1]. So, would you mind re-creating your hugepage setup code in python >> and re-sending it? >> >> Thanks for your contribution, looking forward getting it integrated to >> our tests. >> >> [1] Unless when it is not practical for testing purposes - writing tests >> in C is just fine, for example. >> >>> This patch adds kvm_hugepage variant. It prepares the host system and >>> start vm with -mem-path option. It does not clean after itself, because >>> it's impossible to unmount and free hugepages before all guests are >>> destroyed. >>> >>> I need to ask you what to do with change of qemu parameter. Newest >>> versions are using -mempath insted of -mem-path. This is impossible to >>> fix using current config file. I can see 2 solutions: >>> 1) direct change in kvm_vm.py (parse output and try another param) >>> 2) detect qemu capabilities outside and create additional layer (better >>> for future occurrence) >>> >>> Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): >>>> >>>> This patch adds kvm_hugepage variant. It prepares the host system and >>>> start vm with -mem-path option. It does not clean after itself, because >>>> it's impossible to unmount and free hugepages before all guests are >>>> destroyed. >>>> >>>> There is also added autotest.libhugetlbfs test. >>>> >>>> I need to ask you what to do with change of qemu parameter. Newest >>>> versions are using -mempath insted of -mem-path. This is impossible to >>>> fix using current config file. I can see 2 solutions: >>>> 1) direct change in kvm_vm.py (parse output and try another param) >>>> 2) detect qemu capabilities outside and create additional layer (better >>>> for future occurrence) >>>> >>>> Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 >> > > > _______________________________________________ > Autotest mailing list > Autotest@test.kernel.org > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest > > -- Sudhir Kumar ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [Autotest] [KVM_AUTOTEST] add kvm hugepage variant 2009-07-21 16:04 ` Lukáš Doktor 2009-07-22 5:57 ` [Autotest] " sudhir kumar @ 2009-07-27 21:05 ` Lucas Meneghel Rodrigues 1 sibling, 0 replies; 13+ messages in thread From: Lucas Meneghel Rodrigues @ 2009-07-27 21:05 UTC (permalink / raw) To: Lukáš Doktor; +Cc: Autotest mailing list, Jason Wang, KVM list On Tue, Jul 21, 2009 at 1:04 PM, Lukáš Doktor<ldoktor@redhat.com> wrote: > Well, thank you for notifications, I'll keep them in my mind. Ok Lukáš, I have reviewed your patch and have some comments to make: diff --git a/client/tests/kvm/kvm_tests.cfg.sample b/client/tests/kvm/kvm_tests.cfg.sample index 5bd6eb8..70e290d 100644 --- a/client/tests/kvm/kvm_tests.cfg.sample +++ b/client/tests/kvm/kvm_tests.cfg.sample @@ -555,6 +555,13 @@ variants: only default image_format = raw +variants: + - @kvm_smallpages: + - kvm_hugepages: + hugepage_path = /mnt/hugepage + pre_command = "/usr/bin/python scripts/hugepage.py" + extra_params += " -mem-path /mnt/hugepage" Here, I don't think it's necessary to pass /mnt/hugepage as a parameter to the script. We can rather choose a default sensible value and built into the script. variants: - @basic: @@ -568,6 +575,7 @@ variants: only Fedora.8.32 only install setup boot shutdown only rtl8139 + only kvm_smallpages - @sample1: only qcow2 only ide diff --git a/client/tests/kvm/kvm_vm.py b/client/tests/kvm/kvm_vm.py index 48f2916..2b97ccc 100644 --- a/client/tests/kvm/kvm_vm.py +++ b/client/tests/kvm/kvm_vm.py @@ -412,6 +412,13 @@ class VM: self.destroy() return False + if output: + logging.debug("qemu produced some output:\n%s", output) + if "alloc_mem_area" in output: + logging.error("Could not allocate hugepage memory" + " -- qemu command:\n%s", qemu_command) + return False Here seems unnecessary to log every occasion qemu produces output, we should log it only if it contains the pattern we're looking for. Also, with kvm_subprocess recent commits, there's no more output defined. I had to change that. logging.debug("VM appears to be alive with PID %d", self.pid) return True diff -Narup a/client/tests/kvm/scripts/hugepage.py b/client/tests/kvm/scripts/ hugepage.py --- a/client/tests/kvm/scripts/hugepage.py 1970-01-01 01:00:00.000000000 +0100 +++ a/client/tests/kvm/scripts/hugepage.py 2009-07-21 16:47:00.000000000 +0200 @@ -0,0 +1,63 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# Alocates enough hugepages and mount hugetlbfs +import os, sys, time + +# Variables check & set +vms = os.environ['KVM_TEST_vms'].split().__len__() +try: + max_vms = int(os.environ['KVM_TEST_max_vms']) +except KeyError: + max_vms = 0 +mem = int(os.environ['KVM_TEST_mem']) +hugepage_path = os.environ['KVM_TEST_hugepage_path'] + +fmeminfo = open("/proc/meminfo", "r") +while fmeminfo: + line = fmeminfo.readline() + if line.startswith("Hugepagesize"): + dumm, hp_size, dumm = line.split() + break +fmeminfo.close() + +if not hp_size: + print "Could not get Hugepagesize from /proc/meminfo file" + raise ValueError Here, is allways good to put the failure reason as one of the parameters to be passed to the exception class constructor, something like: raise ValueError("Could not get Hugepagesize from /proc/meminfo file") + +if vms < max_vms: + vms = max_vms + +vmsm = ((vms * mem) + (vms * 64)) +target = (vmsm * 1024 / int(hp_size)) + +# Iteratively set # of hugepages +fhp = open("/proc/sys/vm/nr_hugepages", "r+") +hp = fhp.readline() +while int(hp) < target: + hp_ = hp + fhp.write(target.__str__()) + fhp.flush() + time.sleep(5) + fhp.seek(0) + hp = int(fhp.readline()) + if hp_ == hp: + raise MemoryError +fhp.close() I liked the above approach to set the hugepage number. +# Mount hugepage filesystem, if necessarily +fmount = open("/proc/mounts", "r") +mount = 1 +line = fmount.readline() +while line: + if line.split()[1] == os.environ['KVM_TEST_hugepage_path']: + mount = 0 + break + line = fmount.readline() +fmount.close() In the above block, it looks to me that we are more interested if we do have a hugetlbfs mount rather than checking if our defined mountpoint is mounted. We need to check in /proc/mounts whether we have a hugetlbfs mount or not instead. +if mount: + if not os.path.exists(hugepage_path): + os.makedirs(hugepage_path) + cmd = "mount -t hugetlbfs none %s" % (hugepage_path) + if os.system(cmd): + raise OSError Same as the above comment when raising exceptions. I think it's better to have our own Error class defined for the script. Since I started fixing the original patch to fit the recent kvm_subprocess commits, I ended up re-creating the patch. I will send it to the mailing list, you tell me what you think. Thanks! Lucas ^ permalink raw reply related [flat|nested] 13+ messages in thread
* [KVM_AUTOTEST] add autotest.libhugetlbfs test 2009-07-09 9:24 [KVM_AUTOTEST] add kvm hugepage variant and test Lukáš Doktor ` (3 preceding siblings ...) 2009-07-10 10:01 ` [KVM_AUTOTEST] add kvm hugepage variant Lukáš Doktor @ 2009-07-10 10:04 ` Lukáš Doktor 2009-07-10 10:37 ` sudhir kumar 4 siblings, 1 reply; 13+ messages in thread From: Lukáš Doktor @ 2009-07-10 10:04 UTC (permalink / raw) To: KVM list, Jason Wang, Lucas Meneghel Rodrigues, Michael Goldish [-- Attachment #1: Type: text/plain, Size: 952 bytes --] After discussion I split the patches. this patch adds autotest.libhugetlbfs test which tests hugepage support inside of kvm guest. Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): > This patch adds kvm_hugepage variant. It prepares the host system and > start vm with -mem-path option. It does not clean after itself, because > it's impossible to unmount and free hugepages before all guests are > destroyed. > > There is also added autotest.libhugetlbfs test. > > I need to ask you what to do with change of qemu parameter. Newest > versions are using -mempath insted of -mem-path. This is impossible to > fix using current config file. I can see 2 solutions: > 1) direct change in kvm_vm.py (parse output and try another param) > 2) detect qemu capabilities outside and create additional layer (better > for future occurrence) > > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 [-- Attachment #2: libhugetlbfs.patch --] [-- Type: text/plain, Size: 1300 bytes --] diff -Narup orig/client/tests/kvm/autotest_control/libhugetlbfs.control new/client/tests/kvm/autotest_control/libhugetlbfs.control --- orig/client/tests/kvm/autotest_control/libhugetlbfs.control 1970-01-01 01:00:00.000000000 +0100 +++ new/client/tests/kvm/autotest_control/libhugetlbfs.control 2009-07-08 13:18:07.000000000 +0200 @@ -0,0 +1,13 @@ +AUTHOR = 'aganti@google.com (Ashwin Ganti)' +TIME = 'MEDIUM' +NAME = 'libhugetlbfs test' +TEST_TYPE = 'client' +TEST_CLASS = 'Kernel' +TEST_CATEGORY = 'Functional' + +DOC = ''' +Tests basic huge pages functionality when using libhugetlbfs. For more info +about libhugetlbfs see http://libhugetlbfs.ozlabs.org/ +''' + +job.run_test('libhugetlbfs', dir='/mnt') diff -Narup orig/client/tests/kvm/kvm_tests.cfg.sample new/client/tests/kvm/kvm_tests.cfg.sample --- orig/client/tests/kvm/kvm_tests.cfg.sample 2009-07-08 13:18:07.000000000 +0200 +++ new/client/tests/kvm/kvm_tests.cfg.sample 2009-07-09 10:15:58.000000000 +0200 @@ -79,6 +79,9 @@ variants: - bonnie: test_name = bonnie test_control_file = bonnie.control + - libhugetlbfs: + test_name = libhugetlbfs + test_control_file = libhugetlbfs.control - linux_s3: install setup type = linux_s3 ^ permalink raw reply [flat|nested] 13+ messages in thread
* Re: [KVM_AUTOTEST] add autotest.libhugetlbfs test 2009-07-10 10:04 ` [KVM_AUTOTEST] add autotest.libhugetlbfs test Lukáš Doktor @ 2009-07-10 10:37 ` sudhir kumar 0 siblings, 0 replies; 13+ messages in thread From: sudhir kumar @ 2009-07-10 10:37 UTC (permalink / raw) To: Lukáš Doktor Cc: KVM list, Jason Wang, Lucas Meneghel Rodrigues, Michael Goldish This looks pretty clear now as the two patches do two different things. The guest large pages support is completely independent of the host support of large pages for the guest. patches look good to me. thanks for splitting them. 2009/7/10 Lukáš Doktor <ldoktor@redhat.com>: > After discussion I split the patches. > > this patch adds autotest.libhugetlbfs test which tests hugepage support > inside of kvm guest. > > Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 > > Dne 9.7.2009 11:24, Lukáš Doktor napsal(a): >> >> This patch adds kvm_hugepage variant. It prepares the host system and >> start vm with -mem-path option. It does not clean after itself, because >> it's impossible to unmount and free hugepages before all guests are >> destroyed. >> >> There is also added autotest.libhugetlbfs test. >> >> I need to ask you what to do with change of qemu parameter. Newest >> versions are using -mempath insted of -mem-path. This is impossible to >> fix using current config file. I can see 2 solutions: >> 1) direct change in kvm_vm.py (parse output and try another param) >> 2) detect qemu capabilities outside and create additional layer (better >> for future occurrence) >> >> Tested by:ldoktor@redhat.com on RHEL5.4 with kvm-83-72.el5 > > > -- Sudhir Kumar ^ permalink raw reply [flat|nested] 13+ messages in thread
end of thread, other threads:[~2009-07-27 21:05 UTC | newest] Thread overview: 13+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2009-07-09 9:24 [KVM_AUTOTEST] add kvm hugepage variant and test Lukáš Doktor 2009-07-09 12:30 ` Michael Goldish 2009-07-09 12:55 ` Lukáš Doktor 2009-07-10 4:38 ` sudhir kumar 2009-07-10 6:48 ` Lukáš Doktor 2009-07-10 8:03 ` Lukáš Doktor 2009-07-10 10:01 ` [KVM_AUTOTEST] add kvm hugepage variant Lukáš Doktor 2009-07-20 12:58 ` Lucas Meneghel Rodrigues 2009-07-21 16:04 ` Lukáš Doktor 2009-07-22 5:57 ` [Autotest] " sudhir kumar 2009-07-27 21:05 ` Lucas Meneghel Rodrigues 2009-07-10 10:04 ` [KVM_AUTOTEST] add autotest.libhugetlbfs test Lukáš Doktor 2009-07-10 10:37 ` sudhir kumar
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).