summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0ba85bb)
raw | patch | inline | side by side (parent: 0ba85bb)
author | David Lide <a0216552@gtudci01.(none)> | |
Mon, 2 Jul 2012 20:07:37 +0000 (16:07 -0400) | ||
committer | David Lide <a0216552@gtudci01.(none)> | |
Mon, 2 Jul 2012 20:07:37 +0000 (16:07 -0400) |
added example_fast_pushpop
back out cache op better in burst send
burst send now sends pkts not requiring any netcp offload
back out cache op better in burst send
burst send now sends pkts not requiring any netcp offload
ti/runtime/netapi/test/net_test.c | patch | blob | history |
index 3e31adcb7ede9cdaea66a4352562ab086204133e..c01a8174ea20ef56ffe687d4f8cdaa521f97d3e3 100644 (file)
//************for multi pkt burst xfer test in loopback mode
-#define TX_BURST 800
+#define TX_BURST 700
int pktloopback=TUNE_NETAPI_NWAL_ENABLE_PASS_LOOPBACK;
nwalTxPSCmdInfo_t flowPSCmdInfo;
/* The pseudo header checksum of the packet except for the 16 bit length */
#define TEST_PKT_PSEUDO_HDR_CHKSUM_SANS_LEN 0x0FFC
-void example_fast_poll( PKTIO_HANDLE_T * p_pktio);
+void example_fast_poll( PKTIO_HANDLE_T * p_pktio, int max_pkts);
+void example_fast_pushpop(Pktlib_HeapHandle p_heap, int ntrials);
+
#if 1
//#include "arpa/inet.h"
unsigned int nwal_sum_flow_vv1=0;
unsigned int nwal_sum_flow_vv2=0;
+unsigned int cache_op_b1;
+unsigned int cache_op_b2;
+int n_c_ops;
static int first =0;
Cppi_HostDesc* pPktDesc;
/* set up meta data */
meta.sa_handle=nwal_HANDLE_INVALID;
+//#define BENCH_UDP_SEND
+#ifdef BEND_UDP_SEND
meta_tx.txFlag1 = (NWAL_TX_FLAG1_DO_IPV4_CHKSUM | NWAL_TX_FLAG1_DO_UDP_CHKSUM| NWAL_TX_FLAG1_META_DATA_VALID);
meta_tx.startOffset = 0;
//GONE in V2 meta_tx.pktLen = len;
pIpHdr = pData + meta_tx.ipOffBytes;
meta_tx.pseudoHdrChecksum =
test_utilGetIpv4PsudoChkSum(pIpHdr,(TEST_PAYLOAD_LEN+TEST_PKT_UDP_HDR_LEN));
-
+#else
+ meta_tx.txFlag1 = NWAL_TX_FLAG1_META_DATA_VALID;
+ meta_tx.startOffset = 0;
+ meta_tx.ploadLen = TEST_PAYLOAD_LEN;
+#endif
/* post it to netcp tx channel*/
meta.u.tx_meta=&meta_tx;
#ifdef DEBUG_DESC
nwal_sum_flow_vv2 += (nwal_flow_vv2-nwal_flow_vv1);
}
+ cache_op_b1= Osal_cache_op_measure(&n_c_ops);
vv2= netapi_timing_stop();
+#ifdef BEND_UDP_SEND
nwal_mCmdSetL4CkSumPort( tip,
&flowPSCmdInfo,
TEST_PKT_UDP_OFFSET_BYTES,
(TEST_PKT_UDP_HDR_LEN + TEST_PAYLOAD_LEN),
meta_tx.pseudoHdrChecksum,
meta_tx.enetPort);
+#else
+ nwal_mCmdSetPort (tip,
+ &flowPSCmdInfo, //could be NULL
+ 0); //port 0 -> switch decides
+
+#endif
pPktDesc = Pktlib_getDescFromPacket(tip);
/* Send the packet out to transmit Q*/
pPktDesc,
NWAL_DESC_SIZE);
vv3= netapi_timing_stop();
-
+ cache_op_b2= Osal_cache_op_measure(&n_c_ops);
sum_vv1 += (vv2-vv1);
if(!house_pkts_gened)
sum_vv1 = sum_vv1 - nwal_sum_flow_vv2;
}
- sum_vv3 += (vv3-vv2);
+ sum_vv3 += (vv3-vv2)-(cache_op_b2-cache_op_b1); //sub out cache op cost
// printf("pktio send. full=%d metadata=%d pktio_send=%d\n", vv3-vv1, vv2-vv1, vv3-vv2);
}
{
unsigned int ccycles;
- int n_c_ops;
ccycles =Osal_cache_op_measure(&n_c_ops);
if (sum_vv1)
{
- printf("BURST NWAL Fast send %d pkts. metadata=%d Cmd Label Creation Cost=%d nwal Fast Send Cost= %d n_c_ops=%d cache_op_time=%d (pp-> %d)\n",
+ printf("BURST NWAL Fast send %d pkts. metadata=%d Cmd Label Creation Cost=%d nwal Fast Send Cost (less cacheop)= %d n_c_ops=%d cache_op_time=%d (pp-> %d)\n",
stats.itx, sum_vv1/stats.itx, nwal_sum_flow_vv2, sum_vv3/stats.itx,
n_c_ops, ccycles, n_c_ops? (ccycles/(n_c_ops/2)) : 0);
-
+#if 0
printf("NWAL Profile Cycles: Prof1= %d,Prof2=%d,Prof3=%d,Prof4=%d,Prof5=%d ,Prof6=%d \n",
nwal_sum_vv1/stats.itx,nwal_sum_vv2/stats.itx,nwal_sum_vv3/stats.itx,
nwal_sum_vv4/stats.itx,nwal_sum_vv5/stats.itx,nwal_sum_vv6/stats.itx);
-
+
+#endif
if(stats.itx2)
{
@@ -1541,6 +1560,7 @@ printf("net_test> %d bytes left in our CMA area\n", netapi_getBufMemRemainder())
our_sched =netapi_schedOpen(netapi_handle,&our_sched_cfg, &err);
if (!our_sched) {printf("sched create failed\n"); exit(1);}
+#if 0
/********************************************
* Basic pkt loopback test
*********************************************/
our_pktio_bench(1000);
our_pktio_bench(1000);
/*********************************************/
+#endif
/*********************************************/
+#if 0
/********************************************
* Basic pkt loopback test
*********************************************/
printf("...runnining pure push/pop benchmark\n");
our_pktio_bench(100);
-
+#endif
/**************unused stuff******************/
/* create TRIE */
#define DO_FAST_POLL
#ifdef DO_FAST_POLL
-example_fast_poll(netcp_rx_chan);
+example_fast_pushpop(OurHeap, 500);
+example_fast_poll(netcp_rx_chan,100000);
#endif
/*************************************************
static nwal_AppId appid[M];
static unsigned char * buf[M];
#define N2POLL 8 //batch size
-void example_fast_poll( PKTIO_HANDLE_T * p_pktio)
+#define NTOPOP 190
+Ti_Pkt * pHd[NTOPOP];
+void example_fast_pushpop(Pktlib_HeapHandle h , int n_trials)
+{
+int i,j;
+unsigned long t1;
+unsigned long t2;
+unsigned long sumf=0;
+unsigned long sumt=0;
+unsigned long sump=0;
+#define NTOPOP 190
+Ti_Pkt * tempVA;
+Qmss_QueueHnd freeQ=Pktlib_getInternalHeapQueue(h);
+
+//n_trials of NTOPOP actions
+for(i=0;i<n_trials;i++)
+{
+ //raw pop
+ t1= netapi_timing_start();
+ pHd[0] = (Ti_Pkt *)QMSS_DESC_PTR(PKTIO_QMSS_QUEUE_POP_RAW (freeQ));
+ for(j=1;j<NTOPOP;j++)
+ {
+ tempVA = _Osal_qmssPhyToVirt(pHd[j-1]);
+ netapi_pld(tempVA);
+ //__builtin_prefetch(tempVA);
+ pHd[j] = (Ti_Pkt *)QMSS_DESC_PTR(PKTIO_QMSS_QUEUE_POP_RAW (freeQ));
+ sumf+= (int) ( ((Cppi_HostDesc *) tempVA)->origBuffPtr -
+ ((Cppi_HostDesc *) tempVA)->buffPtr);
+ }
+ tempVA = _Osal_qmssPhyToVirt(pHd[j-1]);
+ sumf+= (int) ( ((Cppi_HostDesc *) tempVA)->origBuffPtr -
+ ((Cppi_HostDesc *) tempVA)->buffPtr);
+ t2=netapi_timing_stop();
+ sumt+= (t2-t1);
+
+ //invalidate/wb
+ for(j=0;j<NTOPOP;j++)
+ {
+ tempVA = _Osal_qmssPhyToVirt(pHd[j]);
+ netapi_utilCacheWbInv(tempVA,128);
+ }
+
+ //raw push
+ t1=netapi_timing_start();
+ for(j=0;j<NTOPOP;j++)
+ {
+ PKTIO_QMSS_QUEUE_PUSH_DESC_SIZE_RAW (freeQ,
+ (void *) pHd[j],
+ 128);
+ }
+ t2=netapi_timing_stop();
+ sump += (t2-t1);
+}
+printf("\nfast poppush: np=%d pop=%d push=%d sumf=%d\n", (n_trials*NTOPOP),
+ sumt/(n_trials*NTOPOP), sump/(n_trials*NTOPOP), sumf);
+sleep(1);
+return;
+}
+
+
+
+void example_fast_poll( PKTIO_HANDLE_T * p_pktio, int max_pkts)
{
int j=0;
int jj=0;
int i,k,l=0,ltot=0;
int n= N2POLL; //max # of pkts to poll
-Ti_Pkt * pHd[N2POLL];
Ti_Pkt * tempVA;
pasahoLongInfo_t* pinfo;
unsigned long t1;
Qmss_QueueHnd rxQ= PKTIO_GET_DEFAULT_NETCP_Q(p_pktio);
Qmss_QueueHnd freeQ;
//loop forever
-for(;;)
+for(;max_pkts>0;)
{
t1= netapi_timing_stop();
pHd[0] = (Ti_Pkt *)QMSS_DESC_PTR(PKTIO_QMSS_QUEUE_POP_RAW (rxQ));
}
sumt += (t2-t1);
sump +=(pHd[i-1]? i: (i-1));
+ max_pkts -= (pHd[i-1]? i: (i-1));
+
//printf("end cleanup %d %d %d\n",sumt,sumf,sump );
if (sump > 10000) {
printf("pkts rx %d batches=%d appid=%x l3_off=%d l4_off=%d len=%d buf=0x%x rxcycle= %d pkts/batchx1000=%d maxbatch=%d cycles per rawpush = %d\n",