<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3243" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=875325210-28102008><FONT face=Arial color=#0000ff 
size=2>Applied in 1710,1711.</FONT></SPAN></DIV><BR>
<BLOCKQUOTE dir=ltr 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> ofw-bounces@lists.openfabrics.org 
  [mailto:ofw-bounces@lists.openfabrics.org] <B>On Behalf Of </B>Leonid 
  Keller<BR><B>Sent:</B> Monday, October 27, 2008 11:34 AM<BR><B>To:</B> 
  ofw@lists.openfabrics.org<BR><B>Subject:</B> [ofw] [patch] [TOOLS] performance 
  tests interoperabilty with Linux<BR></FONT><BR></DIV>
  <DIV></DIV>
  <DIV><FONT face=Arial size=2><SPAN class=070262408-27102008>We came accross 
  the fact, that Windows performance tests (ib_send_bw, ib_read_lat et al) do 
  not work with the same tests in Linux.</SPAN></FONT></DIV>
  <DIV><FONT face=Arial size=2><SPAN class=070262408-27102008><FONT size=2>The 
  main problem was, that Linux stores values like qpn, psn, lid in little endian 
  format, while Windows - in big endian one.</FONT></SPAN></FONT></DIV>
  <DIV><FONT face=Arial size=2><SPAN class=070262408-27102008><FONT size=2>The 
  included patch solves the problem.</DIV></FONT></SPAN></FONT>
  <DIV><FONT face=Arial size=2><SPAN 
  class=070262408-27102008></SPAN></FONT> </DIV>
  <DIV><FONT face=Arial size=2></FONT> </DIV>
  <DIV><FONT face=Arial size=2>Index: 
  tools/perftests/user/perf_defs.h<BR>===================================================================<BR>--- 
  tools/perftests/user/perf_defs.h (revision 1697)<BR>+++ 
  tools/perftests/user/perf_defs.h (working copy)<BR>@@ -54,7 +54,7 
  @@<BR> #include <iba/ib_al.h><BR> <BR> #define 
  KEY_MSG_SIZE (sizeof 
  "0000:000000:000000:00000000:0000000000000000")<BR>-#define KEY_PRINT_FMT 
  "%04x:%06x:%06x:%08x:%x"<BR>+#define KEY_PRINT_FMT 
  "%04x:%06x:%06x:%08x:%016I64x"<BR> #define KEY_SCAN_FMT 
  "%x:%x:%x:%x:%x"<BR> <BR> #define VERSION 2.0<BR>Index: 
  tools/perftests/user/perf_utils.c<BR>===================================================================<BR>--- 
  tools/perftests/user/perf_utils.c (revision 1697)<BR>+++ 
  tools/perftests/user/perf_utils.c (working copy)<BR>@@ -76,8 +76,8 
  @@<BR> {<BR>  char 
  msg[KEY_MSG_SIZE];<BR>  PERF_ENTER;<BR>- sprintf(msg, 
  KEY_PRINT_FMT,my_dest->lid, 
  my_dest->qpn,<BR>-  my_dest->psn, my_dest->rkey, 
  my_dest->vaddr);<BR>+ sprintf(msg, 
  KEY_PRINT_FMT,cl_hton16(my_dest->lid), cl_hton32(my_dest->qpn), 
  <BR>+  cl_hton32(my_dest->psn), cl_hton32(my_dest->rkey), 
  my_dest->vaddr);<BR> <BR>  if (send(sockfd, msg, sizeof 
  msg,0) != sizeof msg) {<BR>   perror("pp_write_keys");<BR>@@ 
  -101,8 +101,12 @@<BR>   return 
  -1;<BR>  }<BR>  <BR>- parsed = sscanf(msg, 
  KEY_SCAN_FMT, &rem_dest->lid, &rem_dest->qpn,<BR>+ parsed = 
  sscanf(msg, KEY_PRINT_FMT, &rem_dest->lid, 
  &rem_dest->qpn,<BR>    &rem_dest->psn,&rem_dest->rkey, 
  &rem_dest->vaddr);<BR>+ rem_dest->lid = 
  cl_ntoh16(rem_dest->lid);<BR>+ rem_dest->qpn = 
  cl_ntoh32(rem_dest->qpn);<BR>+ rem_dest->psn = 
  cl_ntoh32(rem_dest->psn);<BR>+ rem_dest->rkey = 
  cl_ntoh32(rem_dest->rkey);<BR> <BR>  if (parsed != 5) 
  {<BR>   fprintf(stderr, "Couldn't parse line <%.*s > 
  parsed = %d %s\n",<BR>Index: 
  tools/perftests/user/read_bw/read_bw.c<BR>===================================================================<BR>--- 
  tools/perftests/user/read_bw/read_bw.c (revision 1697)<BR>+++ 
  tools/perftests/user/read_bw/read_bw.c (working copy)<BR>@@ -399,7 +399,7 
  @@<BR>   * We do it by exchanging data over a TCP socket 
  connection. */<BR>   <BR>   my_dest[i].lid = 
  ctx->ca_attr->p_port_attr[ib_port-1].lid;<BR>-  my_dest[i].psn 
  = rand() & 0xffffff;<BR>+  my_dest[i].psn = cl_hton32(rand() 
  & 0xffffff);<BR>   if (!my_dest[i].lid) 
  {<BR>    fprintf(stderr, "Local lid 0x0 detected. Is an SM 
  running?\n");<BR>    return 1;<BR>Index: 
  tools/perftests/user/read_lat/read_lat.c<BR>===================================================================<BR>--- 
  tools/perftests/user/read_lat/read_lat.c (revision 1697)<BR>+++ 
  tools/perftests/user/read_lat/read_lat.c (working copy)<BR>@@ -410,7 
  +410,7 @@<BR>   * We do it by exchanging data over a TCP socket 
  connection. */<BR>   <BR>   my_dest[i].lid = 
  ctx->ca_attr->p_port_attr[ib_port-1].lid;<BR>-  my_dest[i].psn 
  = rand() & 0xffffff;<BR>+  my_dest[i].psn = cl_hton32(rand() 
  & 0xffffff);<BR>   if (!my_dest[i].lid) 
  {<BR>    fprintf(stderr, "Local lid 0x0 detected. Is an SM 
  running?\n");<BR>    return 1;<BR>Index: 
  tools/perftests/user/send_bw/send_bw.c<BR>===================================================================<BR>--- 
  tools/perftests/user/send_bw/send_bw.c (revision 1697)<BR>+++ 
  tools/perftests/user/send_bw/send_bw.c (working copy)<BR>@@ -502,7 +502,7 
  @@<BR>   * We do it by exchanging data over a TCP socket 
  connection. */<BR>   <BR>   my_dest[i].lid = 
  ctx->ca_attr->p_port_attr[ib_port-1].lid;<BR>-  my_dest[i].psn 
  = rand() & 0xffffff;<BR>+  my_dest[i].psn = cl_hton32(rand() 
  & 0xffffff);<BR>   if (!my_dest[i].lid) 
  {<BR>    fprintf(stderr, "Local lid 0x0 detected. Is an SM 
  running?\n");<BR>    return 1;<BR>@@ -606,16 +606,16 
  @@<BR>  /*********************************************<BR>   
  * Important note :<BR>   * In case of UD/UC this is NOT the way to 
  measure<BR>-  * BW sicen we are running with loop on the send 
  side<BR>-  * while we should run on the recieve side or enable retry in 
  SW<BR>+  * BW since we are running with loop on the send side<BR>+  
  * while we should run on the receive side or enable retry in 
  SW<BR>   * Since the sender may be faster than the reciver than 
  although<BR>   * we had posted recieve it is not enough and might 
  end this will<BR>   * result in deadlock of test since both sides 
  are stuck on poll cq<BR>   * In this test i do not solve this for 
  the general test ,need to write<BR>-  * seperate test for UC/UD but in 
  case the tx_depth is ~1/3 from the<BR>+  * separate test for UC/UD but in 
  case the tx_depth is ~1/3 from the<BR>   * number of iterations this 
  should be ok .<BR>   * Also note that the sender is limited in the 
  number of send, ans<BR>-  * i try to make the reciver full <BR>+  * 
  i try to make the receiver full <BR>   
  *********************************************/<BR>  /* send 
  */<BR>  if (user_param->connection_type==UD) {<BR>Index: 
  tools/perftests/user/send_lat/send_lat.c<BR>===================================================================<BR>--- 
  tools/perftests/user/send_lat/send_lat.c (revision 1697)<BR>+++ 
  tools/perftests/user/send_lat/send_lat.c (working copy)<BR>@@ -488,7 
  +488,7 @@<BR>   * We do it by exchanging data over a TCP socket 
  connection. */<BR>   <BR>   my_dest[i].lid = 
  ctx->ca_attr->p_port_attr[ib_port-1].lid;<BR>-  my_dest[i].psn 
  = rand() & 0xffffff;<BR>+  my_dest[i].psn = cl_hton32(rand() 
  & 0xffffff);<BR>   if (!my_dest[i].lid) 
  {<BR>    fprintf(stderr, "Local lid 0x0 detected. Is an SM 
  running?\n");<BR>    return 1;<BR>Index: 
  tools/perftests/user/write_bw/write_bw.c<BR>===================================================================<BR>--- 
  tools/perftests/user/write_bw/write_bw.c (revision 1697)<BR>+++ 
  tools/perftests/user/write_bw/write_bw.c (working copy)<BR>@@ -429,7 
  +429,7 @@<BR>   * We do it by exchanging data over a TCP socket 
  connection. */<BR>   <BR>   my_dest[i].lid = 
  ctx->ca_attr->p_port_attr[ib_port-1].lid;<BR>-  my_dest[i].psn 
  = rand() & 0xffffff;<BR>+  my_dest[i].psn = cl_hton32(rand() 
  & 0xffffff);<BR>   if (!my_dest[i].lid) 
  {<BR>    fprintf(stderr, "Local lid 0x0 detected. Is an SM 
  running?\n");<BR>    return 1;<BR>Index: 
  tools/perftests/user/write_lat/write_lat.c<BR>===================================================================<BR>--- 
  tools/perftests/user/write_lat/write_lat.c (revision 1697)<BR>+++ 
  tools/perftests/user/write_lat/write_lat.c (working copy)<BR>@@ -419,7 
  +419,7 @@<BR>   * We do it by exchanging data over a TCP socket 
  connection. */<BR>   <BR>   my_dest[i].lid = 
  ctx->ca_attr->p_port_attr[ib_port-1].lid;<BR>-  my_dest[i].psn 
  = rand() & 0xffffff;<BR>+  my_dest[i].psn = cl_hton32(rand() 
  & 0xffffff);<BR>   if (!my_dest[i].lid) 
  {<BR>    fprintf(stderr, "Local lid 0x0 detected. Is an SM 
  running?\n");<BR>    return 
1;<BR></FONT></DIV></BLOCKQUOTE></BODY></HTML>