From: Jingyi Wang <wangjingyi11@huawei.com> To: <drjones@redhat.com>, <kvm@vger.kernel.org>, <kvmarm@lists.cs.columbia.edu> Cc: <wanghaibin.wang@huawei.com>, <yuzenghui@huawei.com>, Jingyi Wang <wangjingyi11@huawei.com> Subject: [kvm-unit-tests PATCH 1/2] arm/arm64: gic: Add IPI latency test Date: Wed, 1 Apr 2020 18:08:11 +0800 [thread overview] Message-ID: <20200401100812.27616-2-wangjingyi11@huawei.com> (raw) In-Reply-To: <20200401100812.27616-1-wangjingyi11@huawei.com> This patch add a test to measure the latency of IPI injection. Signed-off-by: Jingyi Wang <wangjingyi11@huawei.com> --- arm/gic.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/arm/gic.c b/arm/gic.c index fcf4c1f..f5e830e 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -27,6 +27,9 @@ struct gic { struct { void (*send_self)(void); void (*send_broadcast)(void); + u64 ipi_inject_time; + u64 ipi_receive_time[NR_CPUS]; + int nr_records; } ipi; }; @@ -142,6 +145,7 @@ static void check_irqnr(u32 irqnr) static void ipi_handler(struct pt_regs *regs __unused) { + gic->ipi.ipi_receive_time[gic->ipi.nr_records++] = get_cntvct(); u32 irqstat = gic_read_iar(); u32 irqnr = gic_iar_irqnr(irqstat); @@ -187,9 +191,16 @@ static void ipi_test_self(void) stats_reset(); cpumask_clear(&mask); cpumask_set_cpu(smp_processor_id(), &mask); + + gic->ipi.nr_records = 0; + gic->ipi.ipi_inject_time = get_cntvct(); gic->ipi.send_self(); + check_acked("IPI: self", &mask); report_prefix_pop(); + + report_info("The latency of ipi_test_self: %ld cycles", + gic->ipi.ipi_receive_time[0] - gic->ipi.ipi_inject_time); } static void ipi_test_smp(void) @@ -202,17 +213,33 @@ static void ipi_test_smp(void) cpumask_copy(&mask, &cpu_present_mask); for (i = smp_processor_id() & 1; i < nr_cpus; i += 2) cpumask_clear_cpu(i, &mask); + + gic->ipi.nr_records = 0; + gic->ipi.ipi_inject_time = get_cntvct(); gic_ipi_send_mask(IPI_IRQ, &mask); + check_acked("IPI: directed", &mask); report_prefix_pop(); + for (i = 0; i < gic->ipi.nr_records; i++) + report_info("The latency of ipi_test_smp(directed): %ld cycles", + gic->ipi.ipi_receive_time[i] - gic->ipi.ipi_inject_time); + report_prefix_push("broadcast"); stats_reset(); cpumask_copy(&mask, &cpu_present_mask); cpumask_clear_cpu(smp_processor_id(), &mask); + + gic->ipi.nr_records = 0; + gic->ipi.ipi_inject_time = get_cntvct(); gic->ipi.send_broadcast(); + check_acked("IPI: broadcast", &mask); report_prefix_pop(); + + for (i = 0; i < gic->ipi.nr_records; i++) + report_info("The latency of ipi_test_smp(broadcast): %ld cycles", + gic->ipi.ipi_receive_time[i] - gic->ipi.ipi_inject_time); } static void ipi_enable(void) -- 2.19.1
WARNING: multiple messages have this Message-ID (diff)
From: Jingyi Wang <wangjingyi11@huawei.com> To: <drjones@redhat.com>, <kvm@vger.kernel.org>, <kvmarm@lists.cs.columbia.edu> Subject: [kvm-unit-tests PATCH 1/2] arm/arm64: gic: Add IPI latency test Date: Wed, 1 Apr 2020 18:08:11 +0800 [thread overview] Message-ID: <20200401100812.27616-2-wangjingyi11@huawei.com> (raw) In-Reply-To: <20200401100812.27616-1-wangjingyi11@huawei.com> This patch add a test to measure the latency of IPI injection. Signed-off-by: Jingyi Wang <wangjingyi11@huawei.com> --- arm/gic.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/arm/gic.c b/arm/gic.c index fcf4c1f..f5e830e 100644 --- a/arm/gic.c +++ b/arm/gic.c @@ -27,6 +27,9 @@ struct gic { struct { void (*send_self)(void); void (*send_broadcast)(void); + u64 ipi_inject_time; + u64 ipi_receive_time[NR_CPUS]; + int nr_records; } ipi; }; @@ -142,6 +145,7 @@ static void check_irqnr(u32 irqnr) static void ipi_handler(struct pt_regs *regs __unused) { + gic->ipi.ipi_receive_time[gic->ipi.nr_records++] = get_cntvct(); u32 irqstat = gic_read_iar(); u32 irqnr = gic_iar_irqnr(irqstat); @@ -187,9 +191,16 @@ static void ipi_test_self(void) stats_reset(); cpumask_clear(&mask); cpumask_set_cpu(smp_processor_id(), &mask); + + gic->ipi.nr_records = 0; + gic->ipi.ipi_inject_time = get_cntvct(); gic->ipi.send_self(); + check_acked("IPI: self", &mask); report_prefix_pop(); + + report_info("The latency of ipi_test_self: %ld cycles", + gic->ipi.ipi_receive_time[0] - gic->ipi.ipi_inject_time); } static void ipi_test_smp(void) @@ -202,17 +213,33 @@ static void ipi_test_smp(void) cpumask_copy(&mask, &cpu_present_mask); for (i = smp_processor_id() & 1; i < nr_cpus; i += 2) cpumask_clear_cpu(i, &mask); + + gic->ipi.nr_records = 0; + gic->ipi.ipi_inject_time = get_cntvct(); gic_ipi_send_mask(IPI_IRQ, &mask); + check_acked("IPI: directed", &mask); report_prefix_pop(); + for (i = 0; i < gic->ipi.nr_records; i++) + report_info("The latency of ipi_test_smp(directed): %ld cycles", + gic->ipi.ipi_receive_time[i] - gic->ipi.ipi_inject_time); + report_prefix_push("broadcast"); stats_reset(); cpumask_copy(&mask, &cpu_present_mask); cpumask_clear_cpu(smp_processor_id(), &mask); + + gic->ipi.nr_records = 0; + gic->ipi.ipi_inject_time = get_cntvct(); gic->ipi.send_broadcast(); + check_acked("IPI: broadcast", &mask); report_prefix_pop(); + + for (i = 0; i < gic->ipi.nr_records; i++) + report_info("The latency of ipi_test_smp(broadcast): %ld cycles", + gic->ipi.ipi_receive_time[i] - gic->ipi.ipi_inject_time); } static void ipi_enable(void) -- 2.19.1 _______________________________________________ kvmarm mailing list kvmarm@lists.cs.columbia.edu https://lists.cs.columbia.edu/mailman/listinfo/kvmarm
next prev parent reply other threads:[~2020-04-01 10:08 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-04-01 10:08 [kvm-unit-tests PATCH 0/2] arm/arm64: Add IPI/vtimer latency Jingyi Wang 2020-04-01 10:08 ` Jingyi Wang 2020-04-01 10:08 ` Jingyi Wang [this message] 2020-04-01 10:08 ` [kvm-unit-tests PATCH 1/2] arm/arm64: gic: Add IPI latency test Jingyi Wang 2020-04-01 10:08 ` [kvm-unit-tests PATCH 2/2] arm/arm64: Add vtimer " Jingyi Wang 2020-04-01 10:08 ` Jingyi Wang 2020-04-01 12:24 ` [kvm-unit-tests PATCH 0/2] arm/arm64: Add IPI/vtimer latency Andrew Jones 2020-04-01 12:24 ` Andrew Jones 2020-04-02 11:52 ` Zenghui Yu 2020-04-02 11:52 ` Zenghui Yu 2020-04-02 12:18 ` Jingyi Wang 2020-04-02 12:18 ` Jingyi Wang 2020-04-02 14:50 ` Andrew Jones 2020-04-02 14:50 ` Andrew Jones
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20200401100812.27616-2-wangjingyi11@huawei.com \ --to=wangjingyi11@huawei.com \ --cc=drjones@redhat.com \ --cc=kvm@vger.kernel.org \ --cc=kvmarm@lists.cs.columbia.edu \ --cc=wanghaibin.wang@huawei.com \ --cc=yuzenghui@huawei.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.