.. _time_make_html: ============================= macOS环境下time make html ============================= 一个有趣的对比,我在完成了 :ref:`colima_nfs` 实践之后,通过NFS共享方式获得了较高的I/O性能。现在我又开始构建 :ref:`macos_studio` ,在完成后,想要对比一下和之前在 :ref:`colima` 的容器环境中性能有多大差异。 同样执行 ``time make html`` ,在macOS环境下,默认Shell(Zsh) 的 ``time`` 输出格式和Linux上常用的 GNU ``time`` 不同: .. literalinclude:: time_make_html/zsh_time :caption: zsh下time输出 - ``274.99s user`` 用户态 CPU 时间 - 定义: make html 进程(以及它派生出的 Python、Sphinx 等子进程)在 用户空间(User Space) 执行纯业务逻辑、算法、文本处理时,所消耗的 CPU 核心时间总和。 - 物理含义: 跨核心累加,也就是如果多个CPU核心并行编译,所有核心的用户态时间会累加起来,这样有可能得到的数值比 ``total`` 多很多 - ``15.45s system`` 内核态 CPU 时间 - 定义:进程在 内核空间(Kernel Space) 执行系统调用(System Calls)时消耗的 CPU 时间总和。 - 物理含义:在 make html 阶段,这个时间主要花在磁盘物理 I/O(频繁打开、读取大量源文件、写入生成的 HTML 文件)、内存分配(VMA 申请)、以及进程派生(Fork)上。 - 健康度判定:15.45 秒相对于 274.99 秒来说非常低(约占 5% 左右),说明系统绝大部分时间都在进行高效的计算,没有被严重的磁盘锁或 I/O 阻塞拖死。 - ``5:00.04 total`` 实际墙上时间 - Wall Clock Time - 定义:从你敲下回车键,到命令执行完毕退出,物理世界中实际流逝的时间:5 分零 4 毫秒。 - 核心注意点:它等同于 Linux 里的 real 时间。这是你肉眼直观感受到的等待时间。 - ``96% cpu`` CPU 平均吞吐率 / 利用率 - 定义:这是 Zsh 自动帮你计算出来的多核整体综合利用率。 - 数学公式: ``CPU利用率=(user+system)/total=(274.99+15.45)/300.04=96.8%`` 注意,上述性能数据显示了: - CPU 利用率显示为 96% 表明任务运行时, **几乎完美地用足了分配给它的CPU算力** 没有出现因为等网络、等磁盘而导致 CPU 闲置(IDLE) - 但是: - ``user+system`` 的总时间几乎和 ``total`` 完全一致,这表明上述执行命令是 **纯单核单线程运行** ,Mac系统的多CPU核心没有充分利用 - 尝试并发make: .. literalinclude:: time_make_html/make_j :caption: 尝试make -j 但似乎并没有提高编译性能(甚至速度更慢?不合理) .. literalinclude:: time_make_html/make_j_output :caption: 尝试make -j gemini解释说 ``make -j $(sysctl -n hw.ncpu)`` 要求 **Makefile 文件中必须存在多个可以同时并行的独立 target(目标文件)** 但对于Sphinx只有一个Makefile - 改进编译命令: .. literalinclude:: time_make_html/sphinx-build :caption: 直接使用 ``sphinx-build`` 来传递多核参数 ``-j auto`` 或者修改 ``Makefile`` 设置添加 ``-j auto`` 参数: .. literalinclude:: time_make_html/Makefile :caption: 修订 Makefile 添加 ``-j auto`` 参数 :emphasize-lines: 5 目前看这个方法确实似乎有效(在Activity Monitor中看到的CPU使用部分阶段Python进程只使用了2个cpu,耗时确实缩短,但也要考虑缓存机制影响以及当时主机上是否有其他任务) .. literalinclude:: time_make_html/Makefile_output :caption: 使用 ``-j auto`` 编译参数使得编译时间缩短 参考 ======== - gemini