主题中讨论的其他器件:SK-AM62-LP
工具/软件:
您好、
我们在 SK-AM62-LP 上使用带有 GStreamer 的 Python 来实现摄像头功能。 根据我们的观察、只有一个内核处于满负载状态、而其他内核大部分保持空闲状态。
您能否建议优化 CPU 使用并有效利用所有四个内核的方法?
此致、
Gopal Sharma
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.
工具/软件:
您好、
我们在 SK-AM62-LP 上使用带有 GStreamer 的 Python 来实现摄像头功能。 根据我们的观察、只有一个内核处于满负载状态、而其他内核大部分保持空闲状态。
您能否建议优化 CPU 使用并有效利用所有四个内核的方法?
此致、
Gopal Sharma
尊敬的 Qutaiba Saleh:
感谢您的支持。
我们在另一个平台上使用相同的应用程序、在这个平台上运行良好、并且自动共享 CPU 内核。 但是、在 AM62平台上、应用仅使用单个内核。
BSP 中是否有任何配置或其他方法可以启用自动 CPU 内核共享而不只依赖于应用程序级多线程? 我们的应用程序涉及 GStreamer 之外的多个组件、这些组件也会消耗大量 CPU 资源。
感谢您为充分利用 AM62平台上所有四个 CPU 内核提供的最佳方法指导。
此致、
Gopal Sharam
尊敬的 Gopal:
您分享的屏幕截图显示有一个 python3进程(我假设是一个单线程)占用 CPU2。 在这种情况下、系统无需做太多来平衡给其他 CPU 的负载。 我建议:
请提供更多详细信息、我们将尽力提供帮助。
此致、
Qutaiba
尊敬的 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、
感谢您的支持。
我之前分享的 CPU 统计数据来自不带tee
和的应用程序版本queue
,因为只有一个流与我们的 ML 推理同步。 该版本的屏幕上不涉及图形或视频播放。
但是、我们有另一个版本的应用程序、它同时包含tee
和queue
元素。 它们用于基于事件的视频录制、其中一个流在短时间内被录制、另一个流馈送到 ML 推理流水线。
是的tee
、并且queue
是我们整个应用中所需的元件。
此外、我想指出的是、此应用程序不是独立的 GStreamer 流水线。 它依次使用3到4个模型集成了 ML 推理、用于决策。
此致、
Gopal Sharma
您好、
如前所述、我们的设置涉及在上运行的完整 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