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.

DM8127 in RDK 3.5 DMA copy 時間



最近我在進行DM8127的長時間穩定測試
 
我的usecase是經過修改的multich_tristream_fullfeature, 流程如下
 
 
/*------------------------------ TRIPLE OUT <1080p + D1 + MJPEG> GeoVision ----------------------------------
                                      SENSOR
                                ________||_______
                |----SALDRE ON--|   CAMERA LINK  |
                |               |    ISP LINK    |
                |               |________________|
        GLBCE_LINK
                |
                |               __________________
                |               |   CAMERA LINK  |
                |---SALDRE ON---|    ISP LINK    |
                                |________________|
                                    Capture
                                 RSZA     RSZB
                               1080P60    D130
                       (YUV420/YUV422I) (YUV420)     |------------- SD DISPLAY
                                  |         |        |
                                  |         |       (2)
                                 NSF        DUP_1[SCALER_DUP_IDX](1) --SCALER
                              (YUV420)      (0)                         |
                                  |         |                           |
                                  |         |                           |
                                  |         |                           |
                    --------------|         |                   IPC FRAMES OUT(VPS)
                    |                       |                           |
                    |                       |                           |
    DUP_2[MJPEG_DUP_LINK_IDX](0)------|     |                         IPC FRAMES IN(DSP)
                   (1)               (2)    |                           |
                    |                 |     |                           |
                    |-------------(0)-|-(1) -                           |
                                      |                             VA(VPS/DSP)
                            MERGE[CAM_STREAM_MERGE_IDX]
                                      |
                                      |
                               DUP_4[DIS_DUP_IDX](1)--IPCFRAMESOUT (VPSSTOHOST)
                                     (0)                         |
                                      |                          |
                                      |                      IPCFRAMESINHOST
                                      |                          |
                                      |                          |
                                      |                    IPC FRAMES IN(HOST)
                                      |                          |
                                      |                           |
                                      |                        IPNC (A8)
                                      |
                                      |
                                      |
                                      |
                                      |
                                      |
                                    SWOSD
                                      |
                                      |
                                      |
                                      |
                                      |
                                IPCM3OUT(VPS)
                                      |
                                      |
                                 IPCM3IN(VID)
                                      |
                                      |
                                    H264ENC
                                      |
                                      |
                                  BITSOUT (VID)
                                      |
                                      |
                                  BITSIN (A8)
 
------------------------------------------------------------------------------------------*/
 
我在 IPC FRAMES IN(HOST) 這一部分利用osa dma copy將camera的raw data複製到系統,  資料大小固定是1280*720, 一開始執行時間每次約為3msec
 
我發現第四天之後 DMA copy的執行時間會開始出現 32msec的執行時間,  並且以一秒鐘一次上下的頻率出現
置之不理    第六天後DMA copy的執行時間會開始變成 64msec
觀察的結果是以32msec的倍數成長,    我會繼續觀察2週後的狀況....
請問如何解決?
  • 你好,

    EDMA硬件copy的时间,如果DDR不是很繁忙的话,应该不会有很大的变化。

    是否是软件调用EDMA copy函数的时间间隔变长了? 能否查找一下原因?是否是buffer没有及时的归还?

  • 1. 請問如何確認 DDR是否繁忙?

    2. 我dma是放在PCFRAMESOUT (VPSSTOHOST)的callback 函數內!!

        量測時間的也是在相同位置,  如果是buffer没有及时的归还 會觸發這個callback嘛?


  • 你好,

    你能否统计一下DMA_copyFill2D (dev_dmaCopyFill.c)函数处理的时间?这是实际EDMA配置加运行的时间。其中下面是启动EDMA和等待结束的代码。

        edma_start(pCopyFillObj->chId);

        wait_for_completion_interruptible(&pCopyFillObj->dma_complete);
        INIT_COMPLETION(pCopyFillObj->dma_complete);

  • 謝謝你的回覆

    目前測試韌體已經開始上線  但是重現這個狀況需要三天之後才會出現

    我想先請教狀況發生的對策

    1. DMA_copyFill2D (dev_dmaCopyFill.c)時間 與 mcfw OSA_dmaCopy2D相同 是否表示dma硬體通道被佔用

    2. DMA_copyFill2D (dev_dmaCopyFill.c)時間 與 mcfw OSA_dmaCopy2D不同 是否表示callback的優先權太低

    目前燒機測試兩週後 dma最大延遲持間保持在128 msec !!

    我所觀察到的異常延遲時間只有三種 32 64 128 (msec)

  • 你好,

    1. DMA_copyFill2D (dev_dmaCopyFill.c)時間 與 mcfw OSA_dmaCopy2D相同 是否表示dma硬體通道被佔用

    【Chris】 可以尝试调整EDMA通道所在的TC。

    2. DMA_copyFill2D (dev_dmaCopyFill.c)時間 與 mcfw OSA_dmaCopy2D不同 是否表示callback的優先權太低

    【Chris】 可以怀疑是Linux调度导致的问题。

  • 請問 

    "可以尝试调整EDMA通道所在的TC。"  這要調整哪裡?


  • Chris Meng 说:

    你好,

    你能否统计一下DMA_copyFill2D (dev_dmaCopyFill.c)函数处理的时间?这是实际EDMA配置加运行的时间。其中下面是启动EDMA和等待结束的代码。

        edma_start(pCopyFillObj->chId);

        wait_for_completion_interruptible(&pCopyFillObj->dma_complete);
        INIT_COMPLETION(pCopyFillObj->dma_complete);

    問題重現了 結果是外層量測出現32msec,  但是OSA_copyFill2D 並沒有超過15msec

    請問這樣是哪邊有問題?

  • 你好,

    你能否在callback函数里面再分段测量一下,看看具体是哪部分的时间在不断增加?

  • ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    struct timespec ts_start, ts_stop;

    float currentTime = 0, endTime = 0;

    if (0 == clock_gettime(CLOCK_MONOTONIC, &ts_start)) {

    currentTime = (float) ts_start.tv_sec * 1000 + (float) ts_start.tv_nsec / 1000000;

    }


    //Let DMA Work

    {

    OSA_dmaCopy2D(&gFrameCpyDmaHndl[0], &copy2D_Y, 1);

    }

    if (0 == clock_gettime(CLOCK_MONOTONIC, &ts_stop)) {

    endTime = (float)ts_stop.tv_sec * 1000 + (float)ts_stop.tv_nsec / 1000000;

    }

    if ((endTime - currentTime) >= 15)

    {

    OSA_printf("OSA_dmaCopy2D cost %f msec in w[%i] h[%i]\n", endTime - currentTime, width, height);

    OSA_printf("ts_stop  tv_sec.tv_nsec [%#ld].[%#ld]\n", ts_stop.tv_sec , ts_stop.tv_nsec);

    OSA_printf("ts_start tv_sec.tv_nsec [%#ld].[%#ld]\n", ts_start.tv_sec , ts_start.tv_nsec);

    OSA_printf(" srcPhysAddr %#lx, dstPhysAddr %#lx\n", copy2D_Y.srcPhysAddr, copy2D_Y.dstPhysAddr);

    }

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    這是量測時間有問題的程式片段 問題出在endTime , currentTime  宣告為float時!!!!

    下面是出錯時的log


    [host]ti_mcfw_ipcframes.c:App_ipcFrameExport:1019->OSA_dmaCopy2D cost 16.000000 msec in w[1280] h[720]

    [host]ti_mcfw_ipcframes.c:App_ipcFrameExport:1020->ts_stop tv_sec.tv_nsec [139098].[280042855]

    [host]ti_mcfw_ipcframes.c:App_ipcFrameExport:1021->ts_start tv_sec.tv_nsec [139098].[279519005]

    [host]ti_mcfw_ipcframes.c:App_ipcFrameExport:1019->OSA_dmaCopy2D cost 16.000000 msec in w[1280] h[720]

    [host]ti_mcfw_ipcframes.c:App_ipcFrameExport:1020->ts_stop tv_sec.tv_nsec [139099].[392161705]

    [host]ti_mcfw_ipcframes.c:App_ipcFrameExport:1021->ts_start tv_sec.tv_nsec [139099].[391561105]

    檢查ts_stop, ts_start的時間並無超過15msec的限制 應該只有6msec的差距,  但是經過紅字的float宣告的轉換出現了16msec

    我對計算機基礎概念不了解 但是我懷疑compiler或是chip的浮點運算有問題???!!!!

    這部分 我已經開始測試不要用float宣告 改用unsigned int測試  希望能避免這個問題