summary refs log tree commit diff stats
path: root/results/classifier/118/performance/2344
diff options
context:
space:
mode:
Diffstat (limited to 'results/classifier/118/performance/2344')
-rw-r--r--results/classifier/118/performance/234475
1 files changed, 0 insertions, 75 deletions
diff --git a/results/classifier/118/performance/2344 b/results/classifier/118/performance/2344
deleted file mode 100644
index 80c1bf101..000000000
--- a/results/classifier/118/performance/2344
+++ /dev/null
@@ -1,75 +0,0 @@
-performance: 0.878
-graphic: 0.855
-ppc: 0.770
-device: 0.758
-semantic: 0.758
-socket: 0.736
-kernel: 0.728
-architecture: 0.714
-PID: 0.661
-vnc: 0.630
-risc-v: 0.619
-VMM: 0.604
-boot: 0.585
-arm: 0.565
-network: 0.546
-register: 0.541
-hypervisor: 0.518
-i386: 0.518
-mistranslation: 0.506
-peripherals: 0.501
-files: 0.483
-debug: 0.462
-user-level: 0.436
-KVM: 0.412
-permissions: 0.388
-TCG: 0.382
-x86: 0.380
-assembly: 0.364
-virtual: 0.135
-
-Plugin scoreboard deadlock (plugin.lock vs start_exclusive)
-Description of problem:
-Deadlock
-
-In frame 9 the thread grabs the plugin.lock, and starts to wait for other cpus to enter exclusive idle.
-```
-#7  0x00005555555a1295 in start_exclusive () at ../hw/core/cpu-common.c:199
-#8  plugin_grow_scoreboards__locked (cpu=0x7fff0c2b4720) at ../plugins/core.c:238
-#9  qemu_plugin_vcpu_init_hook (cpu=0x7fff0c2b4720) at ../plugins/core.c:258
-```
-
-The other thread just finished a TB and do the callback to the plugin, so it will not become exclusive idle until it finishes.
-That callback tries to create a new 'scoreboard', but plugin.lock is already taken.
-```
-#7  qemu_plugin_scoreboard_new (element_size=element_size@entry=8) at ../plugins/api.c:464
-#8  0x00007ffff7fb973d in vcpu_tb_trans (id=<optimized out>, tb=0x555555858d60) at /home/rehn/source/qemu/contrib/plugins/hotblocks.c:125
-#9  0x00005555557394f1 in qemu_plugin_tb_trans_cb (cpu=<optimized out>, tb=0x555555858d60) at ../plugins/core.c:418
-```
-
-Locally I'm using this fix, reverse order so we enter exclusive idle before grabbing the plugin.lock:
-```
-diff --git a/plugins/core.c b/plugins/core.c
-index 1e58a57bf1..0e41c4ef22 100644
---- a/plugins/core.c
-+++ b/plugins/core.c
-@@ -236,4 +236,2 @@ static void plugin_grow_scoreboards__locked(CPUState *cpu)
- 
--    /* cpus must be stopped, as tb might still use an existing scoreboard. */
--    start_exclusive();
-     struct qemu_plugin_scoreboard *score;
-@@ -244,3 +242,2 @@ static void plugin_grow_scoreboards__locked(CPUState *cpu)
-     tb_flush(cpu);
--    end_exclusive();
- }
-@@ -250,2 +247,4 @@ void qemu_plugin_vcpu_init_hook(CPUState *cpu)
-     bool success;
-+    /* cpus must be stopped, as tb might still use an existing scoreboard. */
-+    start_exclusive();
- 
-@@ -259,2 +258,3 @@ void qemu_plugin_vcpu_init_hook(CPUState *cpu)
-     qemu_rec_mutex_unlock(&plugin.lock);
-+    end_exclusive();
-```
-Steps to reproduce:
-Run command a few times and get 'unlucky'