Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
52 commits
Select commit Hold shift + click to select a range
f56965d
Add required Python packages
Jan 29, 2014
63b956f
Remove outdated paper tests (#18)
nlmills Apr 24, 2014
950c5a3
Make the Iperf port configurable (#18)
nlmills Apr 24, 2014
8e97a8d
Optionally set request size from test function argument (#18)
nlmills Apr 24, 2014
b6bf762
Add some test scripts for the XNI paper (#18)
nlmills Apr 24, 2014
c783025
Require iperf 2.0.5 for paper tests
nlmills Apr 25, 2014
a7cfe3d
Fix iperf options
nlmills Apr 25, 2014
8a39931
Support multiple threads in iperf paper tests (#18)
nlmills Apr 25, 2014
d747dc5
Cleanup iperf server processes (#18)
nlmills Apr 25, 2014
f85376a
Use the correct iperf command
nlmills Apr 25, 2014
9273dd6
Fix division bug in test script
nlmills Apr 25, 2014
1a8b45d
Set the socket buffer sizes in XNI (#18)
nlmills Apr 30, 2014
df57f96
Revert "Add required Python packages"
May 12, 2014
30d4b97
Let XNI set the TCP window size (#18)
May 12, 2014
97ca693
Use the correct default TCP window size (#18)
nlmills May 28, 2014
7a849b4
Clean up XNI memory registration functions
nlmills May 29, 2014
936f92a
Add helper function to test for end-to-end
nlmills May 30, 2014
5345a70
Allocate I/O buffers in the target thread
nlmills May 30, 2014
6bc0d18
Remove unnecessary e2e header fields
nlmills May 30, 2014
71b3265
Make XNI use network byte order for all messages
nlmills May 30, 2014
67c7371
Use the correct byte conversion function
nlmills Jun 2, 2014
ac5c0f0
Send the operation sequence number with XNI
nlmills Jun 2, 2014
61ac0f7
Fix infinite recursion bug
nlmills Jun 2, 2014
12e912a
XNI: store target buffers in the connection
nlmills Jun 2, 2014
aa5192c
Assume buffer count is always tdp->td_queue_depth
nlmills Jul 10, 2014
76e6c79
Remove the E2E header
nlmills Jul 11, 2014
033bc09
Remove unnecessary fields from E2E structure
nlmills Jul 16, 2014
99d5f94
Remove dependency on E2E header
nlmills Jul 17, 2014
860694f
Merge branch 'master' into multinic
nlmills Jul 17, 2014
6d0eb4e
Move E2E to to xnet/
nlmills Jul 17, 2014
e32010e
Tidy up E2E init helper functions
nlmills Jul 17, 2014
39ccda4
Properly disconnect e2e transfers
nlmills Jul 17, 2014
84e807c
Abort after network errors
nlmills Jul 22, 2014
a98a0ab
Keep multiple XNI connection objects
nlmills Jul 22, 2014
457b0c8
Plug memory leak
nlmills Jul 24, 2014
0e6fe98
Init the datapattern buffer after worker init
nlmills Jul 24, 2014
176d39e
Allocate source buffers after worker init
nlmills Jul 24, 2014
b105669
Factor out common e2e connect code
nlmills Jul 24, 2014
47b225a
Remove stale comment
nlmills Jul 24, 2014
84f1780
Move e2e setup after worker init function
nlmills Jul 24, 2014
7abb8ed
Establish e2e connections in worker threads
nlmills Jul 24, 2014
16e716f
Remove duplicate structure field
nlmills Jul 25, 2014
70c8d2b
Remove unused fields from e2e structure
nlmills Jul 25, 2014
39a0700
Workers access e2e data directly from the address table
nlmills Jul 26, 2014
51ab516
Add the last changes to implement multinic
nlmills Jul 26, 2014
7579ec4
Remove duplicate barrier implementation
nlmills Aug 12, 2014
6ab7b8f
Remove unused barriers
nlmills Aug 12, 2014
1b879b4
Wait for worker threads to finish connecting
nlmills Aug 12, 2014
505ade7
Merge pull request #46 from ORNL/multinic
nlmills Aug 14, 2014
492e57b
Automatically generate config.h.in
nlmills Aug 18, 2014
6603c10
Fix bug in error handling during TOT initialization
nlmills Aug 18, 2014
77aa8fa
Remove config.h.in from version control
nlmills Aug 18, 2014
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Makefile.in
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ XNI_DIR = $(SRC_DIR)/xni
#
AR = ar
AUTOCONF = autoconf
AUTOHEADER = autoheader
CC = $(CC_EXE)
CP = cp
CPR = cp -r $(CP_PRESERVE_OPTS)
Expand Down Expand Up @@ -422,7 +423,7 @@ CONFIG_FLAGS = $(shell grep "\-\-prefix" config.log | cut -f 5- -d ' ')
xdd-$(XDDVERSION):
git archive --format=tar --prefix=$@/ master | $(TAR) xf -
$(FIND) $@ -name .gitignore -exec rm {} \;
cd $@ && $(AUTOCONF)
cd $@ && $(AUTOCONF) && $(AUTOHEADER)

xdd-$(XDDVERSION).tar.gz: xdd-$(XDDVERSION)
$(TAR) cfz $@ $<
Expand Down
1 change: 1 addition & 0 deletions README
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ software build process. We also suggest enabling debug mode.

On supported OS:
> autoconf
> autoheader
> ./configure --enable-debug
> make
> make install
Expand Down
39 changes: 22 additions & 17 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,7 @@ dnl Process this file with autoconf to produce a configure script
dnl
AC_PREREQ(2.59)
AC_INIT([xdd], [7.0.0.pre-rc27], bug@xdd.org)
AC_CONFIG_HEADER([src/compat/config.h])

AC_CONFIG_HEADERS([src/compat/config.h])

dnl
dnl Include useful macros
Expand Down Expand Up @@ -282,13 +281,15 @@ AC_ARG_ENABLE([numa],
[enable_numa="$enableval"],
[enable_numa=yes])
if test "$enable_numa" = "yes" ; then
AC_DEFINE(HAVE_ENABLE_NUMA)
AC_DEFINE(HAVE_ENABLE_NUMA,1,[Define to 1 if you have libnuma.])
AC_SEARCH_LIBS([numa_node_to_cpus], [numa],
AC_DEFINE(HAVE_NUMA_NODE_TO_CPUS),
AC_DEFINE(HAVE_NUMA_NODE_TO_CPUS,1,
[Define to 1 if you have the `numa_node_to_cpus' function.]),
AC_MSG_ERROR([Function numa_node_to_cpus not found. Use --disable-numa]))

AC_SEARCH_LIBS([numa_allocate_cpumask], [numa],
AC_DEFINE(HAVE_NUMA_ALLOCATE_CPUMASK),
AC_DEFINE(HAVE_NUMA_ALLOCATE_CPUMASK,1,
[Define to 1 if you have the `numa_allocate_cpumask' function.]),
AC_MSG_ERROR([Function numa_allocate_cpumask not found. Use --disable-numa.]))
fi

Expand All @@ -315,10 +316,12 @@ AC_ARG_ENABLE([ib],
[enable_ib="$enableval"],
[enable_ib=yes])
if test "x$enable_ib" = "xyes" ; then
AC_DEFINE(HAVE_ENABLE_IB)
AC_DEFINE(HAVE_ENABLE_IB,1,
[Define to 1 to enable InfiniBand network support.])
AC_CHECK_HEADERS([infiniband/verbs.h])
AC_SEARCH_LIBS([ibv_get_device_list], [ibverbs],
AC_DEFINE(HAVE_IBV_GET_DEVICE_LIST),
AC_DEFINE(HAVE_IBV_GET_DEVICE_LIST,1,
[Define to 1 if you have the `ibv_get_device_list' function.]),
AC_MSG_ERROR([Function ibv_get_device_list not found. Use --disable-ib.]))
fi

Expand All @@ -336,15 +339,17 @@ AC_ARG_ENABLE([xfs],
[enable_xfs=yes])

if test "$enable_xfs" = "yes" ; then
AC_DEFINE(HAVE_ENABLE_XFS)
AC_DEFINE(HAVE_ENABLE_XFS,1,
[Define to 1 to enable XFS preallocation support.])
xfs_header="no"
AC_CHECK_HEADERS([xfs/xfs.h] [xfs/libxfs.h],
xfs_header="yes"; break, [])
if test "$xfs_header" = "no" ; then
AC_MSG_ERROR([No valid XFS header found (sometimes this is caused by missing libuuid headers). Use --disable-xfs.])
fi
AC_CHECK_DECLS([xfsctl],
AC_DEFINE(HAVE_XFSCTL),
AC_DEFINE(HAVE_XFSCTL,1,
[Define to 1 if you have the `xfsctl' function.]),
AC_MSG_ERROR([Function xfsctl not found. Use --disable-xfs.]),
[#if HAVE_XFS_XFS_H
#include <xfs/xfs.h>
Expand Down Expand Up @@ -431,14 +436,14 @@ AX_PYTHON()
dnl
dnl Check for export-controlled packages
dnl
AC_CHECK_FILES([contrib/pycrypto-2.6.1.tar.gz],
AC_SUBST(PYCRYPTO_DIST, [contrib/pycrypto-2.6.1.tar.gz]),
[AX_PYTHON_MODULE([Crypto],
[XDD requires PyCrypto. Due to U.S. Export Controls, PyCrypto must be installed separately from XDD. See README.crypto])])
AC_CHECK_FILES([contrib/ecdsa-0.11.tar.gz],
AC_SUBST(ECDSA_DIST, [contrib/ecdsa-0.11.tar.gz]),
[AX_PYTHON_MODULE([ecdsa],
[XDD requires Python ECDSA. Due to U.S. Export Controls, ECDSA must be installed separately from XDD. See README.crypto])])
AC_CHECK_FILE([contrib/pycrypto-2.6.1.tar.gz],
AC_SUBST(PYCRYPTO_DIST, [contrib/pycrypto-2.6.1.tar.gz]),
[AX_PYTHON_MODULE([Crypto],
[XDD requires PyCrypto. Due to U.S. Export Controls, PyCrypto must be installed separately from XDD. See README.crypto])])
AC_CHECK_FILE([contrib/ecdsa-0.11.tar.gz],
AC_SUBST(ECDSA_DIST, [contrib/ecdsa-0.11.tar.gz]),
[AX_PYTHON_MODULE([ecdsa],
[XDD requires Python ECDSA. Due to U.S. Export Controls, ECDSA must be installed separately from XDD. See README.crypto])])

dnl
dnl Check for packages XDD requires directly
Expand Down
4 changes: 3 additions & 1 deletion contrib/buildbot_gen_test_config.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
#
# Step 1: Generate a local test_config
# Step 2: autoconf
# Step 3: ./configure
# Step 3: autoheader
# Step 4: ./configure
#

#
Expand Down Expand Up @@ -128,4 +129,5 @@ EOF
# Perform the configure
#
autoconf
autoheader
./configure $configure_flags
2 changes: 2 additions & 0 deletions doc/HOWTO_release.txt
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ available:
> cd xdd
> vi configure.ac # and edit the VERSION variable
> autoconf
> autoheader
> ./configure --prefix=$HOME/sw/xdd
> make baseversion
> make
Expand Down Expand Up @@ -55,5 +56,6 @@ The resulting tar file now contains the released code only.
9. Prepare for the next release
> vi configure.ac # And set the version in AC_INIT to pre-nextrelease
> autoconf
> autoheader
> git commit -a
> git push
44 changes: 9 additions & 35 deletions src/base/io_buffers.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,7 @@
/*----------------------------------------------------------------------------*/
/* xdd_init_io_buffers() - set up the I/O buffers
* This routine will allocate the memory used as the I/O buffer for a Worker
* Thread. The pointer to the buffer (wd_bufp) and the size of the buffer
* (wd_buf_size) are set in the Worker Data Struct.
* Thread.
*
* This routine will return the pointer to the buffer upon success. If for
* some reason the buffer cannot be allocated then NULL is returned.
Expand All @@ -34,32 +33,17 @@
*
* The size of the buffer depends on whether it is being used for network
* I/O as in an End-to-end operation. For End-to-End operations, the size
* of the buffer is 1 page larger than for non-End-to-End operations.
* of the buffer is 2 pages larger than for non-End-to-End operations.
*
* For normal (non-E2E operations) the buffer pointers are as follows:
* |<----------- wd_buf_size = N Pages ----------------->|
* |<------------------- N Pages ----------------------->|
* +-----------------------------------------------------+
* | data buffer |
* | transfer size (td_xfer_size) rounded up to N pages |
* |<-wd_bufp |
* |<-task_datap |
* +-----------------------------------------------------+
*
* For End-to-End operations, the buffer pointers are as follows:
* |<------------------- wd_buf_size = N+1 Pages ------------------------>|
* +----------------+-----------------------------------------------------+
* |<----1 page---->| transfer size (td_xfer_size) rounded up to N pages |
* |<-wd_bufp |<-task_datap |
* | | E2E | E2E |
* | |<-Header->| data buffer |
* +-----*----------*-----------------------------------------------------+
* ^ ^
* ^ +-e2e_datap
* +-e2e_hdrp
*/
unsigned char *
xdd_init_io_buffers(worker_data_t *wdp) {
target_data_t *tdp; // Pointer to Target Data
xdd_init_io_buffers(target_data_t *tdp) {
unsigned char *bufp; // Generic Buffer Pointer
void *shmat_status; // Status of shmat()
int buf_shmid; // Shared Memory ID
Expand All @@ -70,25 +54,14 @@ xdd_init_io_buffers(worker_data_t *wdp) {
LPVOID lpMsgBuf; /* Used for the error messages */
#endif

tdp = wdp->wd_tdp;
wdp->wd_bufp = NULL;
wdp->wd_buf_size = 0;

// Calaculate the number of pages needed for a buffer
page_size = getpagesize();
pages = tdp->td_xfer_size / page_size;
if (tdp->td_xfer_size % page_size)
pages++; // Round up to page size
if ((tdp->td_target_options & TO_ENDTOEND)) {
// Add one page for the e2e header
pages++;

// If its XNI, add another page for XNI, better would be for XNI to
// pack all of the header data (and do the hton, ntoh calls)
xdd_plan_t *planp = tdp->td_planp;
if (PLAN_ENABLE_XNI & planp->plan_options) {
pages++;
}
// Add one page for the XNI header
pages++;
}


Expand Down Expand Up @@ -171,8 +144,9 @@ xdd_init_io_buffers(worker_data_t *wdp) {
/* Lock all pages in memory */
xdd_lock_memory(bufp, buffer_size, "RW BUFFER");

wdp->wd_bufp = bufp;
wdp->wd_buf_size = buffer_size;
// the size of each buffer must be the same
assert(0 == tdp->io_buffer_size || (size_t)buffer_size == tdp->io_buffer_size);
tdp->io_buffer_size = buffer_size;

return(bufp);
} /* end of xdd_init_io_buffers() */
Expand Down
32 changes: 27 additions & 5 deletions src/base/target_cleanup.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,33 @@ xdd_target_thread_cleanup(target_data_t *tdp) {
#endif
}

/* On e2e XNI, part of cleanup includes closing the source side */
if ((TO_ENDTOEND & tdp->td_target_options) &&
(PLAN_ENABLE_XNI & tdp->td_planp->plan_options)) {
xni_close_connection(&tdp->td_e2ep->xni_td_conn);
}
// if this is an e2e transfer
if (xint_is_e2e(tdp)) {
// Disconnect
xint_e2e_disconnect(tdp);

struct xint_e2e * const e2ep = tdp->td_e2ep;

// Free the connections
e2ep->xni_td_connections_count = 0;
free(e2ep->xni_td_connections);
e2ep->xni_td_connections = NULL;

// Free the connection mutexes
for (int i = 0; i < e2ep->xni_td_connections_count; i++) {
int error = pthread_mutex_destroy(e2ep->xni_td_connection_mutexes+i);
assert(!error);
}
free(e2ep->xni_td_connection_mutexes);
e2ep->xni_td_connection_mutexes = NULL;
}

// Free the I/O buffers
for (size_t i = 0; i < tdp->io_buffers_count; i++) {
free(tdp->io_buffers[i]);
}
free(tdp->io_buffers);
tdp->io_buffers = NULL;
tdp->io_buffers_count = 0;
} // End of xdd_target_thread_cleanup()

Loading