From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marcelo Tosatti Subject: Re: kvm-unit-tests: add tscdeadline-latency test Date: Thu, 11 Dec 2014 01:13:19 -0200 Message-ID: <20141211031319.GA7040@amt.cnet> References: <20141210202337.GA31837@amt.cnet> <5488C000.7010206@redhat.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="PNTmBPCT7hxwcZjr" Cc: kvm-devel To: Paolo Bonzini Return-path: Received: from mx1.redhat.com ([209.132.183.28]:46352 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933176AbaLKDNd (ORCPT ); Wed, 10 Dec 2014 22:13:33 -0500 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id sBB3DXqM007175 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL) for ; Wed, 10 Dec 2014 22:13:33 -0500 Content-Disposition: inline In-Reply-To: <5488C000.7010206@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: --PNTmBPCT7hxwcZjr Content-Type: text/plain; charset=us-ascii Content-Disposition: inline On Wed, Dec 10, 2014 at 10:49:52PM +0100, Paolo Bonzini wrote: > > > On 10/12/2014 21:23, Marcelo Tosatti wrote: > > > > To test latency between TSC deadline timer > > interrupt injection. > > > > Signed-off-by: Marcelo Tosatti > > > > Index: kvm-unit-tests/config/config-x86-common.mak > > =================================================================== > > --- kvm-unit-tests.orig/config/config-x86-common.mak 2014-06-27 13:43:43.694257143 -0300 > > +++ kvm-unit-tests/config/config-x86-common.mak 2014-12-10 16:10:41.715339378 -0200 > > @@ -69,6 +69,8 @@ > > > > $(TEST_DIR)/apic.elf: $(cstart.o) $(TEST_DIR)/apic.o > > > > +$(TEST_DIR)/tscdeadline-latency.elf: $(cstart.o) $(TEST_DIR)/tscdeadline-latency.o > > + > > $(TEST_DIR)/init.elf: $(cstart.o) $(TEST_DIR)/init.o > > > > $(TEST_DIR)/realmode.elf: $(TEST_DIR)/realmode.o > > Index: kvm-unit-tests/config/config-x86_64.mak > > =================================================================== > > --- kvm-unit-tests.orig/config/config-x86_64.mak 2014-12-10 16:03:20.609681443 -0200 > > +++ kvm-unit-tests/config/config-x86_64.mak 2014-12-10 16:10:25.172352577 -0200 > > @@ -9,5 +9,6 @@ > > $(TEST_DIR)/pcid.flat $(TEST_DIR)/debug.flat > > tests += $(TEST_DIR)/svm.flat > > tests += $(TEST_DIR)/vmx.flat > > +tests += $(TEST_DIR)/tscdeadline-latency.flat > > > > include config/config-x86-common.mak > > Index: kvm-unit-tests/x86/tscdeadline-latency.c > > =================================================================== > > --- /dev/null 1970-01-01 00:00:00.000000000 +0000 > > +++ kvm-unit-tests/x86/tscdeadline-latency.c 2014-12-10 18:21:38.151253344 -0200 > > @@ -0,0 +1,110 @@ > > +/* > > + * qemu command line | grep latency | cut -f 2 -d ":" > latency > > + * > > + * In octave: > > + * load latency > > + * min(list) > > + * max(list) > > + * mean(list) > > + * hist(latency, 50) > > + */ > > + > > +#include "libcflat.h" > > +#include "apic.h" > > +#include "vm.h" > > +#include "smp.h" > > +#include "desc.h" > > +#include "isr.h" > > +#include "msr.h" > > + > > +static void test_lapic_existence(void) > > +{ > > + u32 lvr; > > + > > + lvr = apic_read(APIC_LVR); > > + printf("apic version: %x\n", lvr); > > + report("apic existence", (u16)lvr == 0x14); > > +} > > + > > +#define TSC_DEADLINE_TIMER_MODE (2 << 17) > > +#define TSC_DEADLINE_TIMER_VECTOR 0xef > > +#define MSR_IA32_TSC 0x00000010 > > +#define MSR_IA32_TSCDEADLINE 0x000006e0 > > + > > +static int tdt_count; > > +u64 exptime; > > +int delta; > > +#define TABLE_SIZE 10000 > > +u64 table[TABLE_SIZE]; > > +volatile int table_idx; > > + > > +static void tsc_deadline_timer_isr(isr_regs_t *regs) > > +{ > > + u64 now = rdtsc(); > > + ++tdt_count; > > + > > + if (table_idx < TABLE_SIZE && tdt_count > 1) > > + table[table_idx++] = now - exptime; > > + > > + exptime = now+delta; > > + wrmsr(MSR_IA32_TSCDEADLINE, now+delta); > > + apic_write(APIC_EOI, 0); > > +} > > + > > +static void start_tsc_deadline_timer(void) > > +{ > > + handle_irq(TSC_DEADLINE_TIMER_VECTOR, tsc_deadline_timer_isr); > > + irq_enable(); > > + > > + wrmsr(MSR_IA32_TSCDEADLINE, rdmsr(MSR_IA32_TSC)+delta); > > + asm volatile ("nop"); > > +} > > + > > +static int enable_tsc_deadline_timer(void) > > +{ > > + uint32_t lvtt; > > + > > + if (cpuid(1).c & (1 << 24)) { > > + lvtt = TSC_DEADLINE_TIMER_MODE | TSC_DEADLINE_TIMER_VECTOR; > > + apic_write(APIC_LVTT, lvtt); > > + start_tsc_deadline_timer(); > > + return 1; > > + } else { > > + return 0; > > + } > > +} > > + > > +static void test_tsc_deadline_timer(void) > > +{ > > + if(enable_tsc_deadline_timer()) { > > + printf("tsc deadline timer enabled\n"); > > + } else { > > + printf("tsc deadline timer not detected\n"); > > + } > > +} > > + > > +int main() > > +{ > > + int i; > > + > > + setup_vm(); > > + smp_init(); > > + setup_idt(); > > + > > + test_lapic_existence(); > > + > > + mask_pic_interrupts(); > > + > > + delta = 200000; > > + test_tsc_deadline_timer(); > > + irq_enable(); > > + > > + do { > > + asm volatile("hlt"); > > + } while (table_idx < TABLE_SIZE); > > + > > + for (i = 0; i < TABLE_SIZE; i++) > > + printf("latency: %d\n", table[i]); > > + > > + return report_summary(); > > +} > > Index: kvm-unit-tests/x86/unittests.cfg > > =================================================================== > > --- kvm-unit-tests.orig/x86/unittests.cfg 2014-12-10 16:03:20.616681437 -0200 > > +++ kvm-unit-tests/x86/unittests.cfg 2014-12-10 16:15:23.145114609 -0200 > > @@ -161,3 +161,8 @@ > > [debug] > > file = debug.flat > > arch = x86_64 > > + > > +[tscdeadline_latency] > > +file = tscdeadline_latency.flat > > +extra_params = -cpu qemu64,+tsc-deadline > > +arch = x86_64 > > -- > > 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 > > > > Applied, thanks. Here is a script I use to run it: > > #! /bin/sh > time ./x86/run x86/tscdeadline-latency.flat -cpu host | sed -n 's/^latency: //p' > l.txt > time ./x86/run x86/tscdeadline-latency.flat -append '2000000 4000' -cpu host | sed -n 's/^latency: //p' > l2.txt > time ./x86/run x86/tscdeadline-latency.flat -append '4000000 2000' -cpu host | sed -n 's/^latency: //p' > l3.txt > > gnuplot << \EOF > hist(x,width)=width*floor(x/width) + binwidth/2.0 > > binwidth=500 > set xrange [0:50000] > set boxwidth binwidth > set term png size 1024,512 > set output "200000,10000.png" > plot 'l.txt' using (hist($1,binwidth)):(1.0/10000) smooth freq with boxes > > binwidth=3000 > set xrange [0:500000] > set boxwidth binwidth > set term png size 1024,512 > set output "2000000,4000.png" > plot 'l2.txt' using (hist($1,binwidth)):(1.0/4000) smooth freq with boxes > > binwidth=3000 > set xrange [0:500000] > set boxwidth binwidth > set term png size 1024,512 > set output "4000000,2000.png" > plot 'l3.txt' using (hist($1,binwidth)):(1.0/2000) smooth freq with boxes > EOF > > and I attach the plots I get with a non-realtime kernel. I'll try a > realtime kernel tomorrow; in the meanwhile, can you attach the three > plots you get on your machine too (RT), so that we can be sure we're > looking at the same thing? > > Paolo Attached. 3.10.0-rt kernel. --PNTmBPCT7hxwcZjr Content-Type: image/png Content-Disposition: attachment; filename="2000000,4000.png" Content-Transfer-Encoding: base64 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 mABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw AYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGAC AMEEAIIJAAQTAAgmABBMACCYAEAwAYBgnwhAW9VFc/nZnAQANvSJABRNe2rrZQEEAHbnEwE4 dydl/aM5CQBs6HP7AJZTFgDYnY8F4NL8aE4CABv6VADKuv3RnAQANvShAJTNcvkXANifzwTg +f1fAGCHPhKAteX/VPSW1woAbGN9iXyD1eXfGgDszycC8HwU4Os5CQBs6CNHAg7Kn8xJAGBD vgwEwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDB BACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJ AAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMA CCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQ TAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAINh7AtBWxXxCRe9HcxIA2NB7AlCfy4cA/HxO AgAbetsmgADA8QgABPtMAOqirsofzUkAYEMfCUDTnspz3f5kTgIAG/pIAHqX5idzEgDY0OcC UBbf3KEnALChXwzA2sEBAgAbWV8i/3pqyytsAsDuvTsA3Y/mUtoJCEfwngAU97WJ7r+28jEg HIIvA0EwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgA QDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGA YAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDB BACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJ AAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQ7CMBaKvieboCALvzkQDU51IA4AA+ tQkgAHAAAgDBBACCCQAEEwAIJgAQ7BcD0FteKwCwjfUl8l0T/8E1HQGADQkABPtIAIq1lQsB gN3xZSAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQT AAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYA EEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAg mABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw AYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwd4TgLIqiqqcJtr70ZwEADb0ngDU57I8 119PVABgd94SgHPVnVaXLycqALA7bwlA03anbfPlRAUAductAajL7rS8bwMUdVHPdgl8NScB gA29JQDFYlrXNYLyXLc/mZMAwIY+EoDepVm904IAwIY+sgnQKxeTFgDYnY/sBOw9BWDt4AAB gI2sL5F/Y/kxYM8mAOzeuw8E6qbXXEo7AeEI3n0ocDe9tvIxIByCLwNBMAGAYAIAwQQAggkA BBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAI JgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBM ACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgA QDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGA YBsG4H+94eyvjQKY2TIA9xMBgG0IAAQTAAj2kQCUVVFU5XdzEgDY2kcCUJ/L8lx/NycBgK19 IgDnqjutLt/MSQBga58IQNN2p23zzZwOEoDf20vyXgcd90GHbdwzddmdlottAAH4XQcd90GH bdzP0yxWr50IwEcddNwHHbZxP09TADZ10HEfdNjGPfMXmwDTUcG74zf7qw46bOOeebETENid DwRg/WNAIMPqgUBAhtVDgQEAAAAAAACAf8XODw1oq9sxkdNA186tX7mZtqqLZjji8kjj7oZd D+M+0rB7Zd2/UI417umg383GvfODA6/DK+7nxoGunVu/cjNF057a+vJqYHsdd3MpT2XbnF+M a6/D7jWX/oVyrHFPB/xvNe4DfD1geJKmga6dW79yO90iNHzt8ljj7nXJPdywr+MoTocb9z0A m417/QuCuzI8SdNA186tX7m1buQHHHcXrqMNu60P+XTfA7DZuNf/RMCuDE/SNNC1c+tXbuzS /ZaON+5+E+Bow67b4YVysHEXdVH3G/SbjXv9jwTtSjE77X6snVu/cltl96I82ri7fVLN6XDD rs6n1wPb8biv7+fXDfp2w3Hv43n40kEDUA4ra8cb96U+H23YwxrxAQPQ69YUNxv3PtaEvjT8 Ww+2bje+/x9v3Kdhe/pYwx4GUZyONu5Bt9N1s3HvY1/Il4YAHGzvzm35P9q4e8XRhj39Ga1j jXtQbvl87+PTkC8NATjW5zv35f9g4+51awAHHPYRPwbsdZsA2417F8dDfGnc3DnUER7N9As6 0ribtuz2AbQvxrXXYY/6F8qhxt0feHXe9vnexRGRr01/IfVQx3iOwy5Pxxp3fyhw1T6OZv/D HvUBONS4h+d7MZwDjBsAAAAAAAAAAAAAAAAAAAB45f+dLkzSvP295gAAAABJRU5ErkJggg== --PNTmBPCT7hxwcZjr Content-Type: image/png Content-Disposition: attachment; filename="200000,10000.png" Content-Transfer-Encoding: base64 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 oIQAkEkASggAmQSghACQSQBKCACZBKCEAJBJAEoIAJkEoIQAkEkASggAmQSghACQSQBKCACZ BKCEAJBJAEoIAJkEoIQAkEkASggAmWqm5cPfOD7c/vbxatECALtTMy2Htuva1Z9Fbld/JFUA YHdKpuV5rvfPf711/ZfQBQB2p2Ranv/g+jQ+fu75VtWa9koAyFQyLYduvuye9gFe/pq7AMDu lEzL5nVZ3fDFg/5MAkCmTwWgbz+ypr0SADJ9aBegO3+qfE17JQBk+tBBwPVrgIfr2QEVq9sh ASBO3Yx8fRnwdQPAFgDsT/WJQOflHdevAZataacEgEzVpwKflzdOr48RANgdbwYqIQBkEoAS AkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKA EgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQS gBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBk EoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEA ZBKAEgJAJgEoIQBkEoASAkAmASghAGSqmZZd3zR9d799HJrh+JE17ZQAkKlmWg5t17XD7WZ/ isE0fmRNOyUAZCqZlm0/X/bX5/yXuV+3pr0SADKVTMtxmi9v876fPramvRIAMpVMy6GbL7vr PsBwHJtmXFdAAGB3SqZl87ysZjh23XGY3j7ozyQAZPpIAJaDAcfx7YP+TAJApo/sApxvrhYt ALA7nzgIOHbz5UsAFhWr2yEBIE7djFy9DHi0CwAZqk8EWpY3OggIEapPBW7ONwcvA0IAbwYq IQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYB KCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAm ASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJA JgEoIQBkEoASAkAmASghAGQSgBICQCYBKCEAZBKAEgJAJgEoIQBkEoASAkAmASghAGQSgBIC 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 AAAASUVORK5CYII= --PNTmBPCT7hxwcZjr Content-Type: image/png Content-Disposition: attachment; filename="4000000,2000.png" Content-Transfer-Encoding: base64 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 AAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYA EEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAg mABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAw AYBgAgDBBACCCQAE+0oA2qp4nq8AwO58JQD1uRQAOIBv7QIIAByAAEAwAYBgAgDBBACCCQAE +8UA9GY3CABs6GmN/OjM398iALA1AYBgXwlAsbZxIQCwOz4MBMEEAIIJAAQTAAgmABBMACCY AEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDAB gGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIA wQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACC CQAEEwAIJgAQTAAgmABAsM8EoKyKoiqnmfbeLUkAYGufCUB9Lstz/fNMBQB25yMBOFfdZXX5 caYCALvzkQA0bXfZNj/OVABgdz4SgLrsLsv7PkBRF/XskMCLJQkAbO0jASgW87puEZTnun2z JAGArX0lAL1LszrRRABga1/ZBeiVi1kLAOzOVw4C9p4CsDw5QABgQ6un6/wry7cBe3YBYPc+ fSJQN7/mUjoICEfw6VOBu/m1lbcB4RB8GAiCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkA BBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBMACCYAEAwAYBgAgDBBACCCQAEEwAI JgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgAQDABgGACAMEEAIIJAAQTAAgmABBM ACCYAEAwAYBgAgDBBACCCQAEEwAIJgAQTAAgmABAMAGAYAIAwQQAggkABBMACCYAEEwAIJgA QDABgGBfCUBZFUVVvluSAMDWvhKA+lyW5/rdkgQAtvaNAJyr7rK6vFmSAMDWvhGApu0u2+bN kg4SgN87SvJZBx33QYdt3DN12V2Wi30AAfhdBx33QYdt3M/zLFZvnQjAVx103AcdtnE/z/NP AtD7wlA+wG/2Vx102MY98y93AQTgow467oMO27hnXhwEBHbnCwFYfxsQyLB6IhCQYfVUYAAA AAAAAADgb7HzUwPa6nZO5DTQtWvrN26mreqiGc64PNK4u2HXw7iPNOxeWfdPlGONezrpd7Nx 7/zkwOvwivu1caBr19Zv3EzRtKe2vrwa2F7H3VzKU9k25xfj2uuwe82lf6Ica9zTCf9bjfsA Hw8YfkjTQNeurd+4nW4VGj52eaxx97rkHm7Y13EUp8ON+x6Azca9/gHBXRl+SNNA166t37i1 buQHHHcXrqMNu60P+eO+B2Czca//iYBdGX5I00DXrq3fuLFL91s63rj7XYCjDbtuhyfKwcZd 1EXd79BvNu71PxK0K8Xssvuydm39xm2V3ZPyaOPujkk1p8MNuzqfXg9sx+O+vp5fd+jbDce9 j5/Djw4agHLYWDveuC/1+WjDHraIDxiAXreluNm497El9KPh33qwbbvx9f944z4N+9PHGvYw iOJ0tHEPuoOum417H8dCfjQE4GBHd27r/9HG3SuONuzpz2gda9yDcsuf9z7eDfnREIBjvb9z X/8PNu5etwVwwGEf8W3AXrcLsN24d3E+xI/G3Z1DneHRTL+gI427acvuGED7Ylx7Hfaof6Ic atz9iVfnbX/euzgj8rXpL6Qe6hzPcdjl6Vjj7k8FrtrH0ex/2KM+AIca9/DzXgznAOMGAAAA AAAAAAAAAAAAAAAAXvk//Jxos6SMd1sAAAAASUVORK5CYII= --PNTmBPCT7hxwcZjr--