Adding net_test_bench application, scripts to set irq smp affinity, setup scripts...
authorTinku Mannan <tmannan@ti.com>
Wed, 15 May 2013 20:09:42 +0000 (16:09 -0400)
committerTinku Mannan <tmannan@ti.com>
Wed, 15 May 2013 20:11:25 +0000 (16:11 -0400)
ti/runtime/netapi/makefile_armv7
ti/runtime/netapi/test/build/Makefile
ti/runtime/netapi/test/net_test_bench.c [new file with mode: 0755]
ti/runtime/netapi/tools/dsp_core_setup.sh [new file with mode: 0755]
ti/runtime/netapi/tools/irqset.sh [new file with mode: 0755]
ti/runtime/netapi/tools/net_test_loopback_setup.sh [new file with mode: 0644]
ti/runtime/netapi/tools/net_test_router_setup.sh [new file with mode: 0644]

index 026733b6f1982c2d314e4851804e14ac1a72aa13..7f911da9f0b6b0f2b3ed74b6e5c81c05fb62c8c3 100755 (executable)
@@ -86,7 +86,10 @@ install:
        install -c -m 755 $(ARMV7BINDIR)/netapi/test/* $(INSTALL_BIN_BASE_DIR)
        install -d $(SYSCONFDIR)/netapi
        $(CP) test/net_test_config.txt                $(SYSCONFDIR)/netapi
-       install -c -m 755 test/net_test_setup.sh                  $(SYSCONFDIR)/netapi
+       install -c -m 755 tools/net_test_loopback_setup.sh    $(SYSCONFDIR)/netapi
+       install -c -m 755 tools/net_test_router_setup.sh      $(SYSCONFDIR)/netapi
+       install -c -m 755 tools/irqset.sh             $(SYSCONFDIR)/netapi
+       install -c -m 755 tools/dsp_core_setup.sh           $(SYSCONFDIR)/netapi
 # Make rule to create tests
 tests:
        -@echo compiling tests ..........!
index 5482c1932c57ee2fe42e05b6d6a5a92b22143b34..409ba066a91086c9f4868d1b1599832f9cc38beb 100755 (executable)
@@ -43,6 +43,7 @@ IFDMA_OBJS= $(ARMV7OBJDIR)/netapi/test/ifdma_test.o
 
 NTB_OBJS= $(ARMV7OBJDIR)/netapi/test/nt_bridge.o  $(ARMV7OBJDIR)/netapi/test/stubs.o  
 
+NT_BENCH_OBJS= $(ARMV7OBJDIR)/netapi/test/net_test_bench.o  $(ARMV7OBJDIR)/netapi/test/stubs.o
 
 # Support Libraries used by NETAPI 
 QMSS_LIB = -lqmss
@@ -77,7 +78,7 @@ INTERNALLINKDEFS = -Wl,--start-group $(NETAPI_LIB) $(PKTLIB_LIB) $(HP_LIB) $(QMS
 
 all: tests 
 
-tests: $(ARMV7BINDIR)/netapi/test/.created $(ARMV7BINDIR)/netapi/test/net_test_loopback $(ARMV7BINDIR)/netapi/test/net_test_router $(ARMV7BINDIR)/netapi/test/net_test_max_params $(ARMV7BINDIR)/netapi/test/ifdma_test
+tests: $(ARMV7BINDIR)/netapi/test/.created $(ARMV7BINDIR)/netapi/test/net_test_loopback $(ARMV7BINDIR)/netapi/test/net_test_router $(ARMV7BINDIR)/netapi/test/net_test_max_params $(ARMV7BINDIR)/netapi/test/ifdma_test  $(ARMV7BINDIR)/netapi/test/net_test_bench
 
 
 api_clean:
@@ -91,6 +92,7 @@ clean:
        rm -f $(ARMV7BINDIR)/netapi/test/net_test_router 
        rm -f $(ARMV7BINDIR)/netapi/test/net_test_max_params
        rm -f $(ARMV7BINDIR)/netapi/test/ifdma_test
+       rm -f $(ARMV7BINDIR)/netapi/test/net_test_bench
 
 
 $(ARMV7OBJDIR)/netapi/test/%.o: $(NETAPI_INC_DIR)/ti/runtime/netapi/test/%.c $(ARMV7OBJDIR)/netapi/test/.created
@@ -120,3 +122,5 @@ $(ARMV7BINDIR)/netapi/test/nt_bridge:  $(NTB_OBJS) $(TRIE_OBJS)
 $(ARMV7BINDIR)/netapi/test/ifdma_test:  $(IFDMA_OBJS)
        $(CC) $(LDFLAGS)  $(IFDMA_OBJS) $(INTERNALLINKDEFS)  -o $(ARMV7BINDIR)/netapi/test/ifdma_test
 
+$(ARMV7BINDIR)/netapi/test/net_test_bench:  $(NT_BENCH_OBJS)
+       $(CC) $(LDFLAGS)  $(NT_BENCH_OBJS) $(INTERNALLINKDEFS)  -o $(ARMV7BINDIR)/netapi/test/net_test_bench
diff --git a/ti/runtime/netapi/test/net_test_bench.c b/ti/runtime/netapi/test/net_test_bench.c
new file mode 100755 (executable)
index 0000000..0acd1df
--- /dev/null
@@ -0,0 +1,542 @@
+/******************************************\r
+ * File: nt_bench.c   \r
+ * Purpose:  benchmarks for NT.\r
+ **************************************************************\r
+ * FILE:  nt_bench.c\r
+ * \r
+ * DESCRIPTION:  netapi user space transport\r
+ *               library  test application : benchmarks\r
+ * \r
+ * REVISION HISTORY:  rev 0.0.1 \r
+ *\r
+ *  Copyright (c) Texas Instruments Incorporated 2010-2011\r
+ * \r
+ *  Redistribution and use in source and binary forms, with or without \r
+ *  modification, are permitted provided that the following conditions \r
+ *  are met:\r
+ *\r
+ *    Redistributions of source code must retain the above copyright \r
+ *    notice, this list of conditions and the following disclaimer.\r
+ *\r
+ *    Redistributions in binary form must reproduce the above copyright\r
+ *    notice, this list of conditions and the following disclaimer in the \r
+ *    documentation and/or other materials provided with the   \r
+ *    distribution.\r
+ *\r
+ *    Neither the name of Texas Instruments Incorporated nor the names of\r
+ *    its contributors may be used to endorse or promote products derived\r
+ *    from this software without specific prior written permission.\r
+ *\r
+ *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \r
+ *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT \r
+ *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\r
+ *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT \r
+ *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, \r
+ *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT \r
+ *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\r
+ *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\r
+ *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT \r
+ *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE \r
+ *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r
+\r
+ *****************************************/\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <unistd.h>\r
+#include <string.h>\r
+#include <signal.h>\r
+#include <pthread.h>\r
+#include <sched.h>\r
+\r
+#include "trie.h"\r
+#include "string.h"\r
+#include "netapi.h"\r
+#include "pktio.h"\r
+#include "net_test.h"\r
+#include <ti/drv/sa/salld.h>\r
+\r
+#define netapi_timing_start hplib_mUtilGetPmuCCNT\r
+\r
+static int scnt=0;\r
+static int QUIT=0;\r
+static int XMIT=0;\r
+__thread int our_core;\r
+\r
+void benchmarks1(void);\r
+void benchmarks2(Pktlib_HeapHandle h , int n_trials);\r
+void benchmarks3(Pktlib_HeapHandle h , int n_trials);\r
+\r
+//sig handler\r
+void netTest_utilMySig(int x)\r
+{\r
+  QUIT=1;\r
+  scnt+=1;\r
+  printf(">ifdma-test: recv'd signal %d cnt=%d\n",x,scnt);\r
+  if (scnt > 10) {printf(">ifdma-test: WARNING EXITING WITH PROPER SHUTDOWN, LUTS LEFT ACTIVE\n");exit(1);}\r
+\r
+}\r
+void recv_cb_net(struct PKTIO_HANDLE_Tag * channel, Ti_Pkt* p_recv[],\r
+                         PKTIO_METADATA_T meta[], int n_pkts,\r
+                         uint64_t ts );\r
+\r
+\r
+/*************debug********************/\r
+void netTest_utilDumpDescr(unsigned long *p, int n)\r
+{\r
+   printf("--------dump of descriptor %d %x\n", n, (int) p);\r
+   printf("> %x %x %x %x %x %x %x %x\n",p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]);\r
+   printf("> %x %x %x %x %x %x %x %x\n",p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]);\r
+   printf("-----------------------------\n");\r
+}\r
+void netTest_utilDumpHeader(unsigned long *p, int n, int a, int r)\r
+{\r
+   printf("--------dump of header %d %x appID=%x flag1=%x\n", n, (int) p,a,r);\r
+   printf("> %x %x %x %x %x %x %x %x\n",p[0],p[1],p[2],p[3],p[4],p[5],p[6],p[7]);\r
+   printf("> %x %x %x %x %x %x %x %x\n",p[8],p[9],p[10],p[11],p[12],p[13],p[14],p[15]);\r
+   printf("> %x %x %x %x %x %x %x %x\n",p[16],p[17],p[18],p[19],p[20],p[21],p[22],p[23]);\r
+   printf("> %x %x %x %x %x %x %x %x\n",p[24],p[25],p[26],p[27],p[28],p[29],p[30],p[31]);\r
+   printf("-----------------------------\n");\r
+}\r
+/*****************************************/\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+/*******************************************\r
+ *************NETAPI OBJECTS***************\r
+ *****************************************/\r
+static NETAPI_CFG_T our_netapi_default_cfg=\r
+{\r
+TUNE_NETAPI_PERM_MEM_SZ,\r
+128,  //start of packet offset for hw to place data on rx for default flow\r
+TUNE_NETAPI_QM_CONFIG_MAX_DESC_NUM, //max number of descriptors in system\r
+TUNE_NETAPI_NUM_GLOBAL_DESC,        //total we will use\r
+TUNE_NETAPI_DEFAULT_NUM_BUFFERS,   //#descriptors+buffers in default heap\r
+64, //#descriptors w/o buffers in default heap\r
+TUNE_NETAPI_DEFAULT_BUFFER_SIZE+128+128,  //size of buffers in default heap\r
+128   ,  //tail room\r
+256      //extra room \r
+};\r
+\r
+Pktlib_HeapHandle OurHeap;     //default heap, used by producer\r
+PKTIO_CFG_T netcp_rx_cfg={PKTIO_RX, PKTIO_NA, PKTIO_NA, 8};\r
+PKTIO_HANDLE_T * netcp_rx_chan;\r
+NETAPI_T netapi_handle;\r
+\r
+PKTIO_CONTROL_T zap_channel_control={PKTIO_CLEAR, NULL};\r
+\r
+NETCP_CFG_ROUTE_T  test_route=\r
+{\r
+NULL, NULL  //* to be filled in\r
+};\r
+\r
+\r
+/*************************END NETAPI OBJECTS***********************/\r
+\r
+static unsigned char all_mac[]={0,0,0,0,0,0};\r
+\r
+\r
+\r
+//stats\r
+int pkt_rx=0; \r
+int pkt_tx=0; \r
+unsigned long long pkt_rx_cycles=0;\r
+unsigned long long pkt_tx_cycles=0;\r
+unsigned long long pkt_cb_cycles=0;\r
+\r
+\r
+//**********************************\r
+//producer thread\r
+//*********************************\r
+void producer_thread(int coreid)\r
+{\r
+int err;\r
+int i;\r
+Ti_Pkt * tip;\r
+unsigned char * pData;\r
+int len;\r
+PKTIO_METADATA_T meta = {PKTIO_META_IFDMA_TX,{0},0};\r
+int np;\r
+cpu_set_t cpu_set;\r
+unsigned long t1;\r
+unsigned long t2;\r
+\r
+    CPU_ZERO( &cpu_set);\r
+    CPU_SET( 2, &cpu_set);\r
+    hplib_utilSetupThread(2, &cpu_set);\r
+\r
+     //DAL we poll the default pktio channel for pkts from net\r
+      for(i=0;!((volatile) QUIT);i++)\r
+      {\r
+        t1 = netapi_timing_start();\r
+        np = netapi_pktioPoll(netcp_rx_chan,NULL,&err);\r
+        t2 = netapi_timing_start();\r
+        pkt_rx+=np;\r
+       if (np) \r
+        {\r
+           pkt_rx_cycles += (t2-t1);\r
+        }\r
+      }\r
+      printf("nt-bench: recevier  DONE %d pkts rx,  pkt poll cycles=% u; pkt rx cycle=%u pkt tx cycles=%u \n", pkt_rx,\r
+             (unsigned)  (pkt_rx ?  (pkt_rx_cycles - pkt_cb_cycles)/pkt_rx : 0),\r
+             (unsigned)  (pkt_rx ?  (pkt_rx_cycles) /pkt_rx : 0),\r
+             (unsigned)  (pkt_tx ?  (pkt_tx_cycles) /pkt_tx : 0)\r
+            );\r
+}\r
+\r
+\r
+//******************************\r
+//  main program\r
+//*****************************\r
+int main(int argc, char **argv)\r
+{\r
+    int err,i;\r
+    int32_t             errCode;\r
+    Pktlib_HeapIfTable*  pPktifTable;\r
+    Pktlib_HeapCfg heapCfg;\r
+    long t1, t2 ;\r
+    cpu_set_t cpu_set;\r
+\r
+\r
+     //install signal handler for ^c\r
+    signal(SIGINT,netTest_utilMySig);\r
+    CPU_ZERO( &cpu_set);\r
+    CPU_SET( 0, &cpu_set);\r
+    hplib_utilSetupThread(2, &cpu_set);\r
+\r
+\r
+    /*******************************************/\r
+    /*************NETAPI STARTUP****************/\r
+    /*******************************************/\r
+\r
+    /* create netapi */\r
+    netapi_handle = netapi_init(NETAPI_SYS_MASTER, &our_netapi_default_cfg);\r
+    netapi_netcpCfgExceptions(netapi_handle, NETCP_CFG_ALL_EXCEPTIONS, NETCP_CFG_ACTION_DISCARD, (NETCP_CFG_ROUTE_HANDLE_T) NULL);\r
+\r
+    /* open the main heap */\r
+    OurHeap = Pktlib_findHeapByName("netapi");\r
+    if (!OurHeap) {printf("findheapbyname fail\n"); exit(1);}\r
+\r
+    //if we want to relay network packets, we create a handle to the \r
+    //default netcp receive queue here\r
+    netcp_rx_chan= netapi_pktioOpen(netapi_handle, NETCP_RX, (PKTIO_CB) recv_cb_net, &netcp_rx_cfg,  &err);\r
+    if (!netcp_rx_chan) {printf("pktio open RX failed err=%d\n",err); exit(1);}\r
+\r
+/*********************************************/\r
+/*****************end NETAPI STARTUP**********/\r
+/*********************************************/\r
+\r
+/*************************************************\r
+********************some basic benchmarks*********\r
+**************************************************/\r
+printf("\n\n*******STARTING MEM ACCESS BENCHMARK*********\n\n");\r
+benchmarks1();\r
+printf("\n\n*******STARTING RAW BENCHMARK2*********\n\n");\r
+benchmarks2(OurHeap, 20);\r
+printf("\n\n*******STARTING RAW BENCHMARK3*********\n\n");\r
+benchmarks3(OurHeap, 20);\r
+printf("\n\n******STARTING RECV BENCHMARK (q to quit)*****\n\n");\r
+\r
+\r
+//now creaate a simple netcp rule\r
+//to get a lot of packets\r
+netapi_netcpCfgCreateMacInterface(\r
+                  netapi_handle,\r
+                  &all_mac[0],\r
+                  0,0,\r
+                  (NETCP_CFG_ROUTE_HANDLE_T)  NULL,\r
+                  (NETCP_CFG_VLAN_T ) NULL ,  //future\r
+                  1,\r
+                  &err);\r
+\r
+//**************************************\r
+//Create a worked thread\r
+//***************************************\r
+{\r
+    pthread_t *thrs;\r
+    int procs =1; \r
+    char c;\r
+    thrs = malloc( sizeof( pthread_t ) * procs );\r
+    if (thrs == NULL)\r
+    {\r
+        perror( "malloc" );\r
+        return -1;\r
+    }\r
+    printf( "benchmark-test: Starting %d threads...\n", procs );\r
+\r
+    if (pthread_create( &thrs[0], NULL, (void*)producer_thread,\r
+                      (void *)0 ))\r
+    {\r
+        perror( "pthread_create" );\r
+        exit(1);\r
+    }\r
+    //this thread of execution (main) now just waits on user input\r
+    for(;;)\r
+    {\r
+        printf(">");\r
+        c=getchar();\r
+        if (c=='q') {QUIT=1;break;}\r
+        if (c=='t') {XMIT=!XMIT; printf("XMIT= %d\n", XMIT); }\r
+        else if (c=='s') printf(">IFDMA-TEST STATS:    %d received   %d xmitted \n", pkt_rx,pkt_tx);\r
+        else if (c=='h') printf("> 'q' to quit,  's' for stats, 't' to toggle transmit  'h' for help\n");\r
+    }\r
+\r
+    //wait for completion \r
+    printf("main task now pending on thread completion\n");\r
+    for (i = 0; i < procs; i++)\r
+        pthread_join( thrs[i], NULL );\r
+\r
+    free( thrs );\r
+}\r
+\r
+/*************************************************\r
+ ************CLEAN UP****************************\r
+ ************************************************/\r
+//get rid of rule, in the case that we are relaying packets\r
+//also close our netcp rx channel\r
+netapi_netcpCfgDelMac(netapi_handle,0,&err);\r
+netapi_pktioClose(netcp_rx_chan,&err);\r
+\r
+\r
+//done\r
+netapi_shutdown(netapi_handle);\r
+\r
+\r
+//!finished!\r
+}\r
+\r
+\r
+//receive callback for packets from net (for consumer)\r
+void recv_cb_net(struct PKTIO_HANDLE_Tag * channel, Ti_Pkt* p_recv[],\r
+                         PKTIO_METADATA_T meta[], int n_pkts,\r
+                         uint64_t ts )\r
+{\r
+int i;\r
+Ti_Pkt * tip;\r
+int len;\r
+unsigned long t1;\r
+unsigned long t2;\r
+unsigned long t3;\r
+unsigned long t4;\r
+\r
+t1= netapi_timing_start();\r
+for(i=0;i<n_pkts;i++)\r
+{\r
+    tip = p_recv[i];\r
+    len = Pktlib_getPacketLen(tip);\r
+    if (XMIT)\r
+    {\r
+       t3= netapi_timing_start();\r
+       //sendit(tip);\r
+       pkt_tx+=1;\r
+       t4= netapi_timing_start();\r
+       pkt_tx_cycles += (t4-t3);\r
+    }\r
+    else\r
+      Pktlib_freePacket((Ti_Pkt*)tip);\r
+}\r
+t2 = netapi_timing_start();\r
+pkt_cb_cycles += (t2-t1);\r
+}\r
+\r
+\r
+\r
+\r
+//SOME BENCHMARKS\r
+//sonme benchmarks\r
+void benchmarks1(void)\r
+{\r
+int i,j;\r
+unsigned long v1pop;\r
+unsigned long v2pop;\r
+unsigned long v1push;\r
+unsigned long v2push;\r
+unsigned long v1read;\r
+unsigned long v2read;\r
+unsigned long v1write;\r
+unsigned long v2write;\r
+unsigned long v1read2;\r
+unsigned long v2read2;\r
+#define N 100\r
+Ti_Pkt  pkts[N];\r
+unsigned char * p_pkt;\r
+int len;\r
+int sum=0;\r
+int sum2=0;\r
+char *p=(char *) malloc(1000);\r
+//alloc\r
+v1pop=netapi_timing_start();\r
+for(i=0;i<N;i++)   pkts[i]= Pktlib_allocPacket(OurHeap,1000);\r
+v2pop = netapi_timing_start();\r
+\r
+//write access\r
+Pktlib_getDataBuffer(pkts[0],(uint8_t**)&p_pkt,&len);\r
+v1write=netapi_timing_start();\r
+for(i=0;i<1000;i++) p_pkt[i]=i;\r
+v2write=netapi_timing_start();\r
+\r
+//read access\r
+v1read=netapi_timing_start();\r
+for(j=0;j<10;j++)\r
+for(i=0;i<1000;i++) sum+=p_pkt[i];\r
+v2read=netapi_timing_start();\r
+\r
+// access (from malloc)\r
+v1read2=netapi_timing_start();\r
+for(i=0;i<1000;i++) sum2+=p[i];\r
+v2read2=netapi_timing_start();\r
+\r
+//free packet\r
+v1push=netapi_timing_start();\r
+for(i=0;i<N;i++)   Pktlib_freePacket(pkts[i]);\r
+v2push = netapi_timing_start();\r
+\r
+//resutls\r
+printf("allocs= %d  free=%d   write=%d  read=%d read-malloc=%d (sum=%d %d)\n",\r
+        (v2pop-v1pop)/N, (v2push-v1push)/N,  (v2write-v1write)/1000, (v2read-v1read)/10000,\r
+        (v2read2-v1read2)/1000,sum,sum2);\r
+\r
+\r
+};\r
+\r
+\r
+//raw queue benchmark\r
+#include "ti/drv/nwal/nwal_util.h"\r
+\r
+#define NTOPOP 150\r
+volatile unsigned long t1;\r
+volatile unsigned long t2;\r
+volatile unsigned long t3;\r
+volatile unsigned long t4;\r
+volatile unsigned long t5;\r
+volatile unsigned long t6;\r
+volatile unsigned long sum1=0;\r
+volatile unsigned long sum2=0;\r
+volatile unsigned long sum3=0;\r
+volatile unsigned long sum4=0;\r
+volatile Ti_Pkt * pHd[NTOPOP];\r
+\r
+void * pop_raw(int n)\r
+{\r
+\r
+}\r
+void * p2v (void* in)\r
+{\r
+\r
+\r
+}\r
+void * v2p(void * in)\r
+{\r
+\r
+}\r
+void push_raw(void *pkt, int n)\r
+{\r
+\r
+}\r
+\r
+void benchmarks2(Pktlib_HeapHandle h , int ntrials)\r
+{\r
+int i,j;\r
+int k;\r
+int abort=0;\r
+Qmss_QueueHnd freeQ=Pktlib_getInternalHeapQueue(h);\r
+\r
+//n_trials of NTOPOP actions\r
+for(i=0;i<ntrials;i++)\r
+{\r
+    abort=0;\r
+    sum1=sum2=sum3=sum4=0;\r
+    //raw pop\r
+    t1= netapi_timing_start();\r
+    for(j=0;j<NTOPOP;j++)\r
+    {\r
+       pHd[j] = (Ti_Pkt *)QMSS_DESC_PTR(pktio_mQmssQueuePopRaw (freeQ));\r
+       if (!pHd[j]) \r
+       {\r
+         printf("abort test. out of descriptors\n"); abort=1;\r
+         break;\r
+       }\r
+    }\r
+    t2= netapi_timing_start();\r
+    k=j;\r
+    for(j=0;j<k;j++)\r
+    {\r
+       pHd[j]  =  Osal_qmssConvertDescPhyToVirt(pHd[j]);\r
+    }\r
+    t3= netapi_timing_start();\r
+    sum1 += (t2-t1);\r
+    sum2 += (t3-t2);\r
+    //raw push\r
+    t4= netapi_timing_start();\r
+    for(j=0;j<k;j++)\r
+    {\r
+       if (!pHd[j]) continue;\r
+       pHd[j]= Osal_qmssConvertDescVirtToPhy(pHd[j]);\r
+    }\r
+    t5= netapi_timing_start();\r
+    for(j=0;j<k;j++)\r
+    {\r
+      pktio_mQmssQueuePushDescSizeRaw(freeQ,\r
+                                             (void *) pHd[j],\r
+                                             128);\r
+    }\r
+    t6= netapi_timing_start();\r
+    sum3 += (t5-t4);\r
+    sum4 += (t6-t5);\r
+\r
+    if (!abort)\r
+    printf("nt=%d raw pop=%d  p2v=%d v2p=%d raw push=%d\n", i,\r
+             sum1/k,  sum2/k, sum3/k, sum4/k);\r
+    sleep(1);\r
+}\r
+return;\r
+}\r
+\r
+//full queue push/pops\r
+void benchmarks3(Pktlib_HeapHandle h , int ntrials)\r
+{\r
+int i,j;\r
+int k;\r
+int abort=0;\r
+Qmss_QueueHnd freeQ=Pktlib_getInternalHeapQueue(h);\r
+\r
+//n_trials of NTOPOP actions\r
+for(i=0;i<ntrials;i++)\r
+{\r
+    abort=0;\r
+    sum2=sum4=0;\r
+    //raw pop\r
+    t1= netapi_timing_start();\r
+    for(j=0;j<NTOPOP;j++)\r
+    {\r
+       pHd[j] = (Ti_Pkt *)QMSS_DESC_PTR(Qmss_queuePop(freeQ));\r
+       if (!pHd[j])\r
+       {\r
+         printf("abort test. out of descriptors\n"); abort=1;\r
+         break;\r
+       }\r
+    }\r
+    t3= netapi_timing_start();\r
+    sum2 += (t3-t1);\r
+    k=j;\r
+    //raw push\r
+    t5= netapi_timing_start();\r
+    for(j=0;j<k;j++)\r
+    {\r
+       if (!pHd[j]) continue;\r
+       Qmss_queuePushDescSize(freeQ, pHd[j], 128);\r
+    }\r
+    t6= netapi_timing_start();\r
+    sum4 += (t6-t5);\r
+    if (!abort)\r
+    printf("nt=%d pop=%d  push=%d\n", i,\r
+              sum2/k, sum4/k);\r
+    sleep(1);\r
+}\r
+return;\r
+}\r
+\r
diff --git a/ti/runtime/netapi/tools/dsp_core_setup.sh b/ti/runtime/netapi/tools/dsp_core_setup.sh
new file mode 100755 (executable)
index 0000000..f031625
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+
+mpmcl load dsp7 /home/root/nwalPktRouterArmMASTERk2hTestProject.out
+#
+mpmcl run dsp7
+#
+mpmcl load dsp6 /home/root/nwalPktRouterArmMASTERk2hTestProject.out
+#
+mpmcl run dsp6
+#
+mpmcl load dsp5 /home/root/nwalPktRouterArmMASTERk2hTestProject.out
+#
+mpmcl run dsp5
+#
+mpmcl load dsp4 /home/root/nwalPktRouterArmMASTERk2hTestProject.out
+#
+mpmcl run dsp4
+#
+mpmcl load dsp3 /home/root/nwalPktRouterArmMASTERk2hTestProject.out
+#
+mpmcl run dsp3
+#
+mpmcl load dsp2 /home/root/nwalPktRouterArmMASTERk2hTestProject.out
+#
+mpmcl run dsp2
+#
+mpmcl load dsp1 /home/root/nwalPktRouterC66xMASTERk2hTestProject.out
+#
+mpmcl run dsp1
+#
+mpmcl load dsp0 /home/root/nwalPktRouterC66xMASTERk2hTestProject.out
+#
+mpmcl run dsp0
+#
+#
diff --git a/ti/runtime/netapi/tools/irqset.sh b/ti/runtime/netapi/tools/irqset.sh
new file mode 100755 (executable)
index 0000000..d86b85e
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+# set smp_affinity of IRQs to core slow path core 1
+DEFAULT_IRQ_MASK=1
+for I in /proc/irq/*/smp_affinity
+do
+/bin/echo $DEFAULT_IRQ_MASK > $I 2> /dev/null
+done
diff --git a/ti/runtime/netapi/tools/net_test_loopback_setup.sh b/ti/runtime/netapi/tools/net_test_loopback_setup.sh
new file mode 100644 (file)
index 0000000..a2e967e
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+export KERNEL_VER=$(uname -r)
+#install kernel module
+echo $KERNEL_VER
+insmod /lib/modules/$KERNEL_VER/extra/hplibmod.ko
+# disable vlan aware mode in switch
+devmem2 0x2090804 w 0x4
+#
+# run net_test_loopback applicaton, default location of config file is in /etc/netapi,
+# default config file name is net_test_config.txt
+/usr/bin/net_test_loopback /etc/netapi/net_test_config.txt
diff --git a/ti/runtime/netapi/tools/net_test_router_setup.sh b/ti/runtime/netapi/tools/net_test_router_setup.sh
new file mode 100644 (file)
index 0000000..cad1b40
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+export KERNEL_VER=$(uname -r)
+#install kernel module
+echo $KERNEL_VER
+insmod /lib/modules/$KERNEL_VER/extra/hplibmod.ko
+#
+ifconfig eth1 up
+# any ip address ok here
+ifconfig eth1 10.0.2.100
+# disable vlan aware mode in switch
+devmem2 0x2090804 w 0x4
+#
+# run net_test_router applicaton, default location of config file is in /etc/netapi,
+# default config file name is net_test_config.txt
+/usr/bin/net_test_router /etc/netapi/net_test_config.txt