From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: Re: kvm-unit-tests: add tscdeadline-latency test Date: Wed, 10 Dec 2014 22:49:52 +0100 Message-ID: <5488C000.7010206@redhat.com> References: <20141210202337.GA31837@amt.cnet> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------040604000801040501040609" To: Marcelo Tosatti , kvm-devel Return-path: Received: from mail-wg0-f52.google.com ([74.125.82.52]:55607 "EHLO mail-wg0-f52.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932582AbaLJVt6 (ORCPT ); Wed, 10 Dec 2014 16:49:58 -0500 Received: by mail-wg0-f52.google.com with SMTP id x12so4790972wgg.25 for ; Wed, 10 Dec 2014 13:49:56 -0800 (PST) In-Reply-To: <20141210202337.GA31837@amt.cnet> Sender: kvm-owner@vger.kernel.org List-ID: This is a multi-part message in MIME format. --------------040604000801040501040609 Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit 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 --------------040604000801040501040609 Content-Type: image/png; name="200000,10000.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="200000,10000.png" iVBORw0KGgoAAAANSUhEUgAABAAAAAIACAMAAAArE+6LAAABMlBMVEX///8AAACgoKD/AAAA wAAAgP/AAP8A7u7AQADIyABBaeH/wCAAgEDAgP8wYICLAABAgAD/gP9//9SlKir//wBA4NAA AAAaGhozMzNNTU1mZmZ/f3+ZmZmzs7PAwMDMzMzl5eX////wMjKQ7pCt2ObwVfDg///u3YL/ tsGv7u7/1wAA/wAAZAAA/38iiyIui1cAAP8AAIsZGXAAAIAAAM2HzusA////AP8AztH/FJP/ f1DwgID/RQD6gHLplnrw5oy9t2u4hgv19dyggCD/pQDugu6UANPdoN2QUEBVay+AFACAFBSA QBSAQICAYMCAYP+AgAD/gED/oED/oGD/oHD/wMD//4D//8DNt57w//Cgts3B/8HNwLB8/0Cg /yC+vr7f399fX18fHx+fn58/Pz+/v7+xCHffAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAU00lE QVR4nO3dDXaiyhaAUVl3GE6uQJn/FK7gL1qm0t2gcGrv9ZbRqFCdm/oExLzdDgAAAAAAAAAA AAAAAADYvNQ2TZuut/q2a7rjYbjajL42LuADun1K++5663hIu9Qf96er5j6Et2+Hy/Yw+WYa Jr8AQHjHfrjsj5NvpmGLQAAgvC4Nl6l7/N5lF6BruvvBASCgZvJldz72N24PnLYN0r7rvzIq 4CNeAnDaHDh0++v1w3EHhJXbBdj1t5vJkQAILHsQ8L5B8BqABliHGQKQfRvwvgXwuguwzU2C TY56k4Pe5qg3Oeh5Rn0/EWhY3LFPwzGA/nJKUOYgYMU/qk/b5KC3OepNDnqeUd9PBR4WN54K 3Pa3a2mZlX7cJke9yUFvc9SbHPR3Ru1H9TGbHPQ2R73JQQvA721y1Jsc9DZHvclBCwAL+M3n QH66v/Dc1LSTB+Uefn7Mw519+3jE++cn5+5rMt9sm3S7nKx3urLJ52WHt8vvdz/ecbuauTZZ x5wEgPlNA/D8n7vJfvf1EW+13fRBk4c3j495uLPbp38NwOvAu/Z++bje6comn5fd7x/vfrjj fjV7rd0tQgCY378G4Gep6X9YQPP4mN3tgPTTM/587dkA9OMLc39/eb6ud/qwxzfKz2fNXO5+ uON+NXftcR2zEgDmNwnA5XSTdjw3/PQrfbn9Eojhy75rmtMMac63T7e6cdKk42ka355xObHk fv94x/Wp56VfHtO2qUm3E1EmATil4Ziu37wu63w66+Wk1u7yMn1d+23gt3EN73TfLx/GNl3Z 46ly1xNmm+c77ldz1x7XMSsBYBnPEzwN54P0w2nj+S2C3RiJ8W/JXCblcKsfZlrqDikd2uvz LlPhfv9wx/Wp15l1uC4z/7LftMMib6O5LWuccodmfM29jGNc+769bwHc1js8tL1dNg/rna7s 8WT5w+TQxMMd96u5a/cnXv33x3Y5AsAyXl7hx5e0w+6nADSP32n212ddNh5ue/NpN71/usHx +JiufxeA6/bI07rGaXYcX8dPW97jffe1N0/r3e0eNxmah/U+/SsftnGuhWie73j5KUyuvXzW Zpefzz8QgL9TKChvvB4DaPf74/Seyf2nL8fLAfHzpByvP7wQNk+Pv90/TqzrCWeTmXXo9g/7 zo8BmDz5fjOd1nX6ckz3++5rb56e+rK6d0c+Xuf5nwfg+ccmAB/y38sVfuN1KqTuPJfeByC1 50N2zfTbk3nwfPNy//WpT7Ml7Ztu3NV/WvHTwh/2Qg7DcfrT/w7tm3G8rP5xyfkA3Dfln45H /MEugAB8iQD8ncwWwOG8H/sSgDRcXl7g0+HYPk+8py2A6y7A7f7LtfGp012A8f7D8zuC93V2 L5O873bnjYBhCfktgMeFTY4a7t7tAtwP5t0+Mtc83VE8CGgX4EsE4O+8BOD2G/38n//8a37b xT9NtedX5ekxgPZ2gO/y5bbA+yxtHw/GPW06jFefjgHcH9CN+ynH8XL89ssxgMeFnZN2vnxZ 78397bxbIJqnO0pvA74eBNz9IQH4OwLwd+4T6/JW3vC7P150h+kjh0+Ong+znz8+enyelE/v AtzeBrx+Ga5dn3pZ+uUxw/uCqb1OnYep+/wuwP2e/fgWwPmNgOY88Ovaz4ueBODhbcDmYb3P D7ue0NM/3/3rE4Fe3gYUgA8RgL9zn1h9NzkP4HL7waFruv24/d2O114mZT+8E3/bBZieCHQJ wPWpl6VfHtMfhxOBzo+7/v2LyyH7p/MAbuu6rObhZMPbWQjnRT/O7McTgZrHsd3+2MZlEZdT evf76Vh+fSrw64lAAvAhArAS9z8x03Y/Pe7pMS+/bM/b0v/i3anAbx//138g9+VUYOcBfIgA fN/w16UP9z2H2wd9fvDyYaDHhc3l7YeBZufDQF8jAN93ODbNQqfC1k4ASgSAwASgRAAITABK BIDABKBEAAhMAEoEgMAEoEQACEwASgSAwASgRAAITABKBIDABKBEAAhMAEoEgMAEoEQACEwA SgSAwASgRAAITABKBIDABKBEAAhMAEoEgMAEoEQACEwASgSAwASgRAAITABKBIDABKBEAAhM AEoEgMAEoEQACEwASgSAwASgRAAITABKBIDABKBEAAhMAEoEgMAEoEQACEwASgSAwASgRAAI TABKBIDABKBEAAhMAEoEgMBmnoupbZo2XW/1bdd0x8PSK12WABDYzHOx26e07663joe0S/1x v/BKlyUABDbvXNy3w2U7fc1PL+sQAFiHeefisR8u++Pkm6l7fpgAwDrMOxe7NFxOZ7xdAFit eedi87zQ5uT47mHbIAAEtnAATpsDh84WAKzU8rsAu94xAFipDxwEfF1HM5p1zcsRAGJaYBpm 3wa0BQBrtdiJQMOCj30ajgH0C690WQJAYIudCjwseDwVuH2Z/wIAK+HDQCUCQGACUCIABCYA JQJAYAJQIgAEJgAlAkBgAlAiAAQmACUCQGACUCIABCYAJQJAYAJQIgAEJgAlAkBgAlAiAAQm ACUCQGACUCIABCYAJQJAYAJQIgAEJgAlAkBgAlAiAAQmACUCQGACUCIABCYAJQJAYAJQIgAE JgAlAkBgAlAiAAQmACUCQGACUCIABCYAJQJAYAJQIgAEJgAlAkBgAlAiAAQmACUCQGACUCIA BCYAJQJAYAJQIgAEJgAlAkBgAlAiAAQmACUCQGACUCIABCYAJQJAYAJQIgAEJgAlAkBgAlAi AAQmACUCQGACUCIABCYAJQJAYAJQIgAEJgAlAkBgAlAiAAQmACUCQGACUCIABCYAJQJAYAJQ IgAEJgAlAkBgs8zF1DZNm663+rZrjofz0kfLrPRTBIDAZpmL3T6lfXdb5LHf9d3hh6ULAKzD HHNx3w6X7eF6c7hI3Q9LFwBYhznm4ukV/6Q/vi5YAGDV5piLXRouU/f4vcN5C6BruvvBgVlX +jECQGBzzMXmdVGpG7cKTtsGaX++OvdKP0YACGyZAKTjw6Q/TPcNZlrpxwgAgS2yC5AmL/rp ZR0CAOuwxEHA6fzPBSB/esA6CQAxzTYNn94GfJr/dgFgtWY+EWhY3PFagtO15CAgrNjMpwIP iztvWTTpfFKwtwFhvXwYqEQACEwASgSAwASgRAAITABKBIDABKBEAAhMAEoEgMAEoEQACEwA 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 QmCC --------------040604000801040501040609 Content-Type: image/png; name="2000000,4000.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="2000000,4000.png" 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 --------------040604000801040501040609 Content-Type: image/png; name="4000000,2000.png" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="4000000,2000.png" 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 QmCC --------------040604000801040501040609--