This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-AM62X:寻求在 SK-AM62-LP 上的所有内核上分配 CPU 负载的方法

Guru**** 2322270 points
Other Parts Discussed in Thread: SK-AM62-LP
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1520111/processor-sdk-am62x-seeking-methods-to-distribute-cpu-load-across-all-cores-on-sk-am62-lp

器件型号:PROCESSOR-SDK-AM62X
主题中讨论的其他器件:SK-AM62-LP

工具/软件:

您好、

我们在 SK-AM62-LP 上使用带有 GStreamer 的 Python 来实现摄像头功能。 根据我们的观察、只有一个内核处于满负载状态、而其他内核大部分保持空闲状态。

您能否建议优化 CPU 使用并有效利用所有四个内核的方法?

此致、
Gopal Sharma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Gopal Sharma、  

    CPU 之间的负载平衡取决于应用程序。 对于 GStreamer、我建议查看以下教程、了解将流水线划分为多个线程 的方法:gstreamer.freedesktop.org/.../multithreading-and-pad-availability.html  

    此致、

    Qutaiba

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Qutaiba Saleh:

    感谢您的支持。

    我们在另一个平台上使用相同的应用程序、在这个平台上运行良好、并且自动共享 CPU 内核。 但是、在 AM62平台上、应用仅使用单个内核。

    BSP 中是否有任何配置或其他方法可以启用自动 CPU 内核共享而不只依赖于应用程序级多线程? 我们的应用程序涉及 GStreamer 之外的多个组件、这些组件也会消耗大量 CPU 资源。

    感谢您为充分利用 AM62平台上所有四个 CPU 内核提供的最佳方法指导。

    此致、
    Gopal Sharam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    您分享的屏幕截图显示有一个 python3进程(我假设是一个单线程)占用 CPU2。 在这种情况下、系统无需做太多来平衡给其他 CPU 的负载。 我建议:

    • 对于测试:单独/在 python 脚本中运行 gstreamer 流水线、并查看负载如何平衡。  
    • 向 python 应用添加多线程。  
    • 您是否会分享有关其他平台的更多详细信息?  
      • AM62上的 gstreamer 版本与另一个平台的比较
      • 其他平台的 cor 利用率。  
      • 您是否使用相同的 python 脚本运行相同的流水线?

    请提供更多详细信息、我们将尽力提供帮助。  

    此致、

    Qutaiba

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    您能分享您尝试在 AM62x 上运行的流水线吗? 此外、您是否在测试中使用了 USB 摄像头?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    您能分享您尝试在 AM62x 上运行的流水线吗? 此外、您是否在测试中使用了 USB 摄像头?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    您能分享您尝试在 AM62x 上运行的流水线吗? 此外、您是否在测试中使用了 USB 摄像头?

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    由于隐私问题、我们无法在开放平台上共享渠道。 但是、我可以确认、我们当前正在使用 Logitech 720p USB 网络摄像头进行测试。 在最终设置中、此摄像头将替换为不同型号。

    此致、
    戈帕尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Qutaiba Saleh:

    我们已通过个人信息共享所有详细信息。 请查看它们、并告知我们您对可能的解决方案的建议。

    谢谢您、
    Gopal Sharma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    您提到、在其他 SOC 上有两个内核。 您能否尝试将内核从4个减少到2个并与我们分享您的观察结果?  

    https://dev.ti.com/tirex/explore/node?node=A__AUTBljJxXWNOgUHj.1-BaA__AM62-ACADEMY__uiYMDcq__LATEST 

    请浏览以下部分:Linux->在 TI EVM 上开发 Linux ->内核参数

    更改 CPU 内核数。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    感谢您的支持。

    我们在启用了2个内核和1个内核的情况下测试了系统。 结果保持不变—内核之间不会自动进行负载平衡。

    如果您想了解有关其他平台的更多信息,请分享您的私人联系信息,我们将尽最大努力提供必要的详细信息。

    请在下文附上我们的意见。

    maxcpus=2


    maxcpus=1

    默认值:-

    此致、
    戈帕尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    默认(4个内核)使用完全初始化的应用程序。



    谢谢、

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Gopal、

    您的 GStreamer 应用是否包含支持多线程且需要使用所有内核的队列或 TEE 元素?  

    我们可能可以运行一些示例流水线、并展示内核随着平衡负载而被实用化的情况。  

    将尝试进行一些实验、并在本周结束时回复您。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    感谢您的支持。

    我之前分享的 CPU 统计数据来自不带tee和的应用程序版本queue,因为只有一个流与我们的 ML 推理同步。 该版本的屏幕上不涉及图形或视频播放。

    但是、我们有另一个版本的应用程序、它同时包含teequeue元素。 它们用于基于事件的视频录制、其中一个流在短时间内被录制、另一个流馈送到 ML 推理流水线。

    是的tee、并且queue是我们整个应用中所需的元件。

    此外、我想指出的是、此应用程序不是独立的 GStreamer 流水线。 它依次使用3到4个模型集成了 ML 推理、用于决策。

    此致、
    Gopal Sharma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    我刚刚在 AM62x 板上运行这个简单的流水线。

    流水线:

    CPU 使用率:

    不确定您的设置是怎样的、因为您可以看到一个简单的解码本身使用了我的设置中的所有4个内核。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、

    如前所述、我们的设置涉及在上运行的完整 Python 应用程序 SK-AM62-LP (PROC123E2) 通信 tisdk-default-image (内核版本: 6.12.17 TIDA-00771-gc85877d40f8e)。 以下是我们设置的主要亮点:
      1)电路板:SK-AM62-LP
      2)图像:tisdk-default-image
      3)相机: USB Logitech 720p 网络摄像头
      4)流水线:使用 Gstreamer 将摄像头流与 ML 推理同步
      5)显示:无视频渲染(无头设置,无显示屏幕)   

      6)在摄像头流上使用4到5个 AI 模型进行顺序推理
    我们在设置过程中尝试了您的流水线、但遗憾的是、它无法按预期运行。
    该视频文件在指定位置不可用、因此我们通过此链接下载了一个示例视频:
    https://www.elecard.com/storage/video/TheaterSquare_640x360.mp4?_gl=1*93z8ko*_gcl_au*MTU0MTIzODc3Ni4xNzQ5MTg2Mzk0*_ga*MTY4OTc0OTY2Ni4xNzQ5MTg2Mzk0*_ga_JVRSY3ELFD*czE3NDkxODg1NjkkbzIkZzEkdDE3NDkxODk1MzQkajYwJGwwJGgw 

    出现错误:
    root@am62xx-LP-EVM:~# gst-launch-1.0 -v filesrc location=~/ TheaterSquare_640x360.mp4 ! h264parse! avdec_h264! waylandsink
    正在将管道设置为已暂停...
    无法将管道设置为暂停。
    正在将管道设置为空...
    正在释放管道...

    关于测试设置:
    如果您的简单流水线在全部四个内核中使用~80% CPU、这表明额外应用逻辑的余量非常有限。
    但是、根据您的观察、CPU 负载似乎在各个内核之间分布良好。 您能否分享以下详细信息?
      1) Yocto 映像类型
      2)使用 SDK 版本

      3)对内核或系统配置所做的任何修改
      4)用于监视 CPU 负载的命令/方法
      5)如果应用了任何内核级别设置以自动平衡 CPU 负载
      6)内核版本


    我们的唯一目标是找到一种方法、在不改变整个应用的情况下、在所有4个内核上均匀分配 CPU 负载。 这不限于 GStreamer、但适用于任何应用。 我们不能确定这种方法是否存在。

    期待您的反馈。  

    此致、
    Gopal Sharma

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Gopal:

    我已在11.0 SDK 发布的默认映像上进行验证:

    dr-download.ti.com/.../tisdk-default-image-am62xx-evm-11.00.09.04.rootfs.wic.xz

    流水线:

    gst-launch-1.0 -v filesrc location=BBB_1080_10s_30fps_h264.mp4! qtdemux! h264parse! 排队! avdec_h264! 视频转换! kmssink driver-name=tidss sync=false

    内核或任何内容没有变化。 默认情况下刷写映像并运行上述流水线。

    此外、连接了一个 USB 摄像头并运行显示流水线:

    流水线:

    gst-launch-1.0 -v v4l2src device=/dev/video0! video/x-raw、width=1280、height=720、帧速率=10/1! kmssink driver-name=tidss sync=false

    希望这有所帮助。

    此致、

    Suren

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Suren、

    感谢您的支持。

    我们测试了流水线、在本例中、流式传输仅在使用以下命令停止显示管理器后才有效:
    systemctl stop emptty

    然后我们运行:

    gst-launch-1.0 -v v4l2src device="/dev/video0! 视频/x-RAW、宽度=640、高度=480、帧速率=10/1! kmssink driver-name=tidss sync=false


    这在命令行中运行良好。
    然而,在我们的 Python 应用程序中,我们使用了类似的流水线,但没有kmssink
    但应用仅使用单个 CPU 内核。

    我们目前正在调查这种行为、但如果您碰巧找到任何相关信息、如果您能与我们分享、我们将不胜感激。

    此致、
    戈帕尔



  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好、Gopal。

    要运行 kmssink (DRM)、您必须使用 systemctl stop empty (从11.0 SDK 开始)停止 Weston 服务。  

    另外、关于您的设置和应用程序、我不能发表太多评论。 您是否尝试过使用 python 的多处理/多线程概念、看看是否能够利用所有内核?

    https://builtin.com/data-science/multithreading-multiprocessing

    此致、

    Suren