来自HPET的Python高系统负载

2024-04-26 22:29:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python程序,它使用许多进程在指定的时间内练习插件卡。我基于一个旧的perl程序。在

程序并没有像它应该的那样给加载卡增加压力。它的性能大约是旧perl程序的60%,而且至少是旧perl程序的2倍,因为我是通过内存而不是磁盘驱动器发送数据。在

我注意到,iostat -c -d -x -t -m /dev/md127 2中的%system在新python程序中大约为20-25%,在旧perl程序中为5-10%,因此我基于这个问题运行perf:High Kernel CPU when running multiple python progams

这些是来自新python程序的perf record -a -g python ...和{}的结果。我已经在两个不同的系统上尝试过了,都显示了很高的“ktime”和“read_hpet”。在

我的程序使用多处理.pool运行while time.time() < numberOfMinutes:,但下面的perf结果来自于我将池大小设置为1的运行。在

在这些系统上,我对高精度计时器有很多竞争吗?在

Samples: 388K of event 'cycles', Event count (approx.): 1345230671182                                
  Children      Self  Command          Shared Object                 Symbol                         ◆
+   35.81%     0.24%  swapper          [kernel.kallsyms]             [k] cpu_startup_entry          ¦
+   29.27%     0.00%  swapper          [kernel.kallsyms]             [k] start_secondary            ¦
-   27.64%     0.15%  swapper          [kernel.kallsyms]             [k] ktime_get                  ¦
   - ktime_get                                                                                      ¦
      + 10.93% clockevents_program_event                                                            ¦
      + 5.23% cpuidle_enter_state                                                                   ¦
      + 4.02% sched_clock_tick                                                                      ¦
      + 3.55% tick_nohz_idle_exit                                                                   ¦
      + 3.35% __tick_nohz_idle_enter                                                                ¦
      + 0.43% tick_check_idle                                                                       ¦
      + 0.05% tick_sched_timer                                                                      ¦
      + 0.04% clockevents_program_min_delta                                                         ¦
      + 0.01% cpuidle_idle_call                                                                     ¦
      + 0.01% tick_program_event                                                                    ¦
      + 0.00% intel_pstate_timer_func                                                               ¦
      + 0.00% tick_nohz_idle_enter                                                                  ¦
      + 0.00% cpu_startup_entry                                                                     ¦
      + 0.00% sched_clock_idle_wakeup_event                                                         ¦
      + 0.00% poll_idle                                                                             ¦
      + 0.00% irq_enter                                                                             ¦
-   27.60%    27.60%  swapper          [kernel.kallsyms]             [k] read_hpet                  ¦
-   27.60%    27.60%  swapper          [kernel.kallsyms]             [k] read_hpet                  ¦
   - read_hpet                                                                                      ¦
      + 27.49% ktime_get                                                                            ¦
      + 0.07% ktime_get_update_offsets_now                                                          ¦
      + 0.01% update_wall_time                                                                      ¦
      + 0.01% __tick_nohz_idle_enter                                                                ¦
      + 0.01% clockevents_program_event                                                             ¦
      + 0.01% cpuidle_enter_state                                                                   ¦
      + 0.00% tick_nohz_idle_exit                                                                   ¦
      + 0.00% sched_clock_tick                                                                      ¦
      + 0.00% hrtimer_interrupt                                                                     ¦
+   13.79%     0.03%  swapper          [kernel.kallsyms]             [k] tick_nohz_idle_exit        ¦
+   11.58%     0.03%  swapper          [kernel.kallsyms]             [k] tick_program_event         ¦
+   11.57%     0.10%  swapper          [kernel.kallsyms]             [k] clockevents_program_event  ¦
+    9.93%     0.01%  swapper          [kernel.kallsyms]             [k] arch_cpu_idle              ¦
+    9.90%     0.08%  swapper          [kernel.kallsyms]             [k] cpuidle_idle_call          ¦
+    9.81%     0.16%  swapper          [kernel.kallsyms]             [k] hrtimer_start_range_ns     ¦
+    9.79%     0.03%  swapper          [kernel.kallsyms]             [k] __tick_nohz_idle_enter     ¦

             ▒

更新 发现高“read_hpet”来自多处理.manager列表。我有一个函数,它生成一个进程并遍历一个目录,将每个文件添加到经理列表(). 如果没有这个,`perf record-a-g python…'将显示下面的报告。现在我在做一些实验,看看如果不使用列表管理器(). 为什么建筑经理列表()来自手术室步行()经常使用高精度计时器?在

^{pr2}$

Tags: 程序eventreadprogramkernelperlperfenter