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.

Getting the CPU and Tasks Load graph UIA

Other Parts Discussed in Thread: SYSBIOS

Hi,

I have been trying to run the Stairstep example for Ethernet, to test the System Analyzer. I was able to see the execution graph but not the CPU and Taks Load graphs. I checked the events coming from the board and there are Load event from CPU and tasks. The following is the cfg file that I'm using:


/*
 *  ======== stairstepOneCore.cfg ========
 */
/* ================ XDC Configuration ================ */
/*
 *  The SysStd System provider is a good one to use for debugging
 *  but does not have the best performance. Use xdc.runtime.SysMin
 *  for better performance.
 */
var System   = xdc.useModule('xdc.runtime.System');
var SysStd   = xdc.useModule('xdc.runtime.SysStd');
var Load = xdc.useModule('ti.sysbios.utils.Load');
System.SupportProxy = SysStd;

var Memory      = xdc.useModule('xdc.runtime.Memory');
Memory.defaultHeapSize = 0x10000;
Program.heap = 0x10000;

Timestamp = xdc.useModule('xdc.runtime.Timestamp');
Log = xdc.useModule('xdc.runtime.Log');

/* ================ BIOS Configuration ================ */
BIOS = xdc.useModule('ti.sysbios.BIOS');
Clock = xdc.useModule('ti.sysbios.knl.Clock');
Swi = xdc.useModule('ti.sysbios.knl.Swi');
Task = xdc.useModule('ti.sysbios.knl.Task');
Timer = xdc.useModule('ti.sysbios.hal.Timer');
Semaphore = xdc.useModule('ti.sysbios.knl.Semaphore');

/*
 * Configure a Timer to interrupt every 100ms
 * timerFunc() provides Hwi load and posts a Swi and Semaphore
 * to provide Swi and Task loads.
 * And adjusts the loads every 5 seconds.
 */
var timerParams = new Timer.Params();
timerParams.startMode = Timer.StartMode_AUTO;
timerParams.period = 100000;        /* 100,000 uSecs = 100ms */
var timer0 = Timer.create(Timer.ANY, '&timerFunc', timerParams);

/*
 * Create Semaphore for Task thread to pend on
 */
Program.global.sem = Semaphore.create(0);

/*
 * Create Swi load thread
 */
Program.global.swi = Swi.create('&swiLoad');

/*
 * Create Task load thread
 */
var taskLoadTask = Task.create('&taskLoad');

/* ================ Logger configuration ================ */
/*
 *  The target Log records are moved to System Analyzer via the UIA ServiceMgr
 *  framework. The physical transport (e.g. TransportType_ETHERNET,
 *  TransportType_FILE, etc.) can be select by the application.
 *  Note: The Ethernet transport uses the NDK.
 *
 *  Configuration done by the application is still honored (e.g. setting
 *  up the common$.diags mask).
 *
 *  Please refer to the ti.uia.sysbios.LoggingSetup module for more
 *  details and configuration options.
 */
var LoggingSetup = xdc.useModule('ti.uia.sysbios.LoggingSetup');
LoggingSetup.eventUploadMode = LoggingSetup.UploadMode_NONJTAGTRANSPORT
var ServiceMgr = xdc.useModule('ti.uia.runtime.ServiceMgr');
ServiceMgr.transportType = ServiceMgr.TransportType_ETHERNET;
LoggingSetup.loadLoggerSize = 1024;
LoggingSetup.mainLoggerSize = 32768;
LoggingSetup.sysbiosLoggerSize = 32768;

/* ================ NDK configuration ================ */
var NdkConfig = xdc.loadPackage('ti.ndk.config');
var Global    = xdc.useModule('ti.ndk.config.Global');
var Ip        = xdc.useModule('ti.ndk.config.Ip');
var Udp       = xdc.useModule('ti.ndk.config.Udp');

Ip.dhcpClientMode = Ip.CIS_FLG_IFIDXVALID;

/* ================ EVM6472 Specific configuration ================ */
/*
 * If you are using a different board, you need to change the following
 * lines. You'll need to add the Ethernet driver's libraries into the
 * project as specified by the NSP. For example, instead of using
 * the loadPackage() call below, you could have add the following libraries
 * into the Project Build Settings instead
 *
 *     <mcsdk>\packages\ti\platform\lib\platform_utils_evm6472.lib
 *     <mcsdk>\packages\ti\platform\nimu\lib\nimu_eth.lib
 *     <pdk_c64x>\packages\ti\csl\c6472\csl_c6472\lib\csl_c6472.lib
 *     <pdk_c64x>\packages\ti\drv\emac\lib\emac_drv_c6472.lib
 *
 *  where <mcsdk> is the path of the installed MCSDK and
 *        <pdk_c64x> is the path of the installed PDK for C64X
 */
/* Use pre-built Ethernet driver supplied with UIA.  */
var ndkdrivers = xdc.loadPackage('ti.uia.examples.evm6472.ndkdrivers');

/* Needed with for the EVM6472 Ethernet driver */
Program.sectMap["emacComm"] = "SL2RAM";

/* Needed since there is not enough LL2 on EVM6472 */
Program.sectMap[".text"]  = "SL2RAM";
/*
 *  @(#) ti.uia.examples.single; 2, 0, 0, 0,2; 9-15-2011 10:25:44; /db/vtree/library/trees/uia/uia.git/src/ null
 */

LoggingSetup.disableMulticoreEventCorrelation = true
BIOS.libType = BIOS.LibType_Custom;
Load.hwiEnabled = true;
Load.swiEnabled = true;
Load.taskEnabled = true;
LoggingSetup.sysbiosSwiLogging = true;
LoggingSetup.sysbiosTaskLogging = true;
LoggingSetup.loadLogging = true;
Load.windowInMs = 500;

Im using CCSV5.1.08020 and the both UIA uia_1_00_01_17 and uia_1_00_02_22.

Thanks,

Miguel

  • Hi!

    Now I'm trying to run the System Analyzer multicore messageQ out-the-box example from CCS on the C6472 EVM. This examples requires a copy of the binary running on each of the six cores. The following are the versions of the packages that I'm using:

    CCSV5.1.08020

    UIA 1.0.2.22

    SYS/BIOS 6.32.03.43

    IPC 1.23.03.31

    NDK 2.20.04.26

    After running the Analyzer over Ethernet transport this is what I'm getting:

    • 299620 records and 9 gaps 469 lost records.
    • The duration information:

    • The execution graph of the instances in all cores:

    Now, the problem is that I'm not able to see the CPU and task Load information in the System Analyzer:

    However, in the logger window there are events comming for the Load module:

    Then why I cannot see this information on the tables or as graphs of CPU and task load?.

    Also another question what about the multicore correlation in the C6472, is there any extra configuration to be set to ensure this?

    Thanks,

    Miguel Aguilar

  • Hi Miguel,

    Re: Also another question what about the multicore correlation in the C6472, is there any extra configuration to be set to ensure this?

    No extra congifuration is required to enable multicore event correlation if:

    • you are using the NDK as the transport and
    • you are using a C6472 or C66X device.   (support for the C6474 device will be added in the next release of UIA (i.e. the one after 1.0.2.22)
    • your application is not configured to use the default timer specified by the global timestamp module for your device:
      • For the C66X, a special dedicated free-running timestamp is used, so there are no resource contention problems 
      • For the C6472, the global timestamp timer module is ti.uia.family.c64p.TimestampC6472Timer
        • the default timer is Timer 11 (base address = 0x02690000)
      • For the C6474, the global timestamp timer module will be ti.uia.family.c64p.TimestampC6474Timer
        • the default timer will be Timer 2 (base address = 0x02930000)

    If all of the above are true, a sync point event is logged whenever the target recieves a StartTx command from System Analyzer to ensure that there is enough information provided to perform the event correlation. 

    If you use another type of transport (e.g. JTAG run mode) or a device other than the C66X or C6472 (or, soon, the C6474), then additional steps are needed in order to enable the multicore event correlation. 

    If your application code needs to use the same timer as is used by the global timestamp timer module, you will need to reconfigure the global timestamp module to use a different timer.  For the C6472, you can do this by adding the following to your .cfg file:

    • var GlobalTimestampTimer = xdc.useModule('ti.uia.family.c64p.TimestampC6472Timer');
    • GlobalTimestampTimer.timerBaseAdrs = GlobalTimestampTimer.TimerInstance_Timer3;  // or whatever timer is not being used by your application or by SysBios

    Imtaz Ali will be able to answer your questions regarding the Task Load and CPU Load graphs.

    Regards,

      Brian

  • Miguel,

    I can't see any obvious reason why the Load Graph is not showing up. Can you export your data to a csv file (from the log view use the right-click-context-menu->data->exportAll) and send that to me. If the file is large you can zip and send via personal email direclty to me - iali@ti.com.

    Thanks,

    Imtaz. 

  • Hi Imtaz,

    Here is the log data with around 100000 records. For this test I used the following packages:

    UIA 1.00.02.22

    BIOS 6.32.04.49

    IPC 1.23.04.36

    NDK 2.20.04.26

    Thanks,

    Miguel

    4118.data.rar

  • Miguel,

    Thanks for the file. We've identified that there is a problem in how System Analyzer handle language locale. I am guessing that you're in a locale which uses comma to represent decimal places. CPU Load graph is not handling this correclty. If interested, we can make a patch available to you for this ... let me know.

    Thanks,

    Imtaz.

  • Hi Imtaz,


    Yes I'm in Germany and the "," is used a decimal separator. I would appreciate if you can provide me a patch for this!

     

    Thanks a lot!

    Miguel

  • Hi Imtaz,


    Any update with the patch for this?

     

    Thanks,

    Miguel

  • Miguel,

    The fix was implemented yesterday and a build was created last night. I need to do some sanity testing today(ET) when in the office and will then post the patch.

    Regards,

    Imtaz.

  • Miguel,

     

    I posted the patch here: http://software-dl.ti.com/dsps/dsps_public_sw/sdo_ccstudio/MCSAv1/CCS5.1Patch/ti_dvt_setup_3.1.0.201110191212.exe.

     

    Please run this .exe and point it to <ccsinstall>/ccsv5/ccs_base destination folder. Let me know if you encounter any issues.

     

    Thanks,

    Imtaz.

  • btw, this fix will be included in the next CCS5.1 release (RC2).

    Imtaz.

  • Hi Imataz,

    I applied the patch and it worked fine!

    Thanks,

    Miguel