*********************************** CHANGES file for DBL *********************************** DBL 1.0.2 ------------------------------------ BUG FIXES: 1. Failing dbl_open would close file descriptor 0. 2. Incoming VLAN tagged packets were being duplicated onto interfaces on the same NIC but with non-matching VLAN ids. 3. The ttl parameter to dbl_send_connect() was being ignored if the destination was already in the cache. ENHANCEMENTS: 1. Added new function dbl_bind_addr() 2. DBL can now be used in a routed environment 3. dbl_pingpong now reports HALF round trip, to be consistant 4. New DMA receive mechanism to reduce half-round-trip latency by ~350 nanosecs and increase receive packet rate by ~40%. 5. Added section on Receive Data Buffering to the doc. DBL 1.0.1 ------------------------------------ BUG FIXES: 1. Quiesce the NIC when asked to shut down on Windows. 2. Fix a case where, after joining and leaving multicast groups many times, later joins would never receive packets. ENHANCEMENTS: 1. Windows support for NIC teaming for non-DBL traffic DBL 1.0.0 ------------------------------------ BUG FIXES: 1. epoll() would sometimes hang ENHANCEMENTS: 1. Allow setting of PIO/DMA packet size send threshold via myri_dbl_dmasend_threshold DBL 0.4.9 ------------------------------------ BUG FIXES: ENHANCEMENTS: 1. Default interrupt coalescing to 0 instead of 10. DBL 0.4.9 ------------------------------------ BUG FIXES: 1. Multiple binds to same port on a single device were not properly handled 2. Prevent deadlock when joining and leaving multicast groups while concurrently receiving in another thread. 3. Fix Ethernet checksum offload (regular driver). 4. Receiving packet longer than provided buffer in Java generated an exception. ENHANCEMENTS: 1. Add Ethernet Multicast filter. 2. Add Ethernet driver promiscuous setting. 3. Improve Ethernet driver receive performance. 4. Increase number of available endpoints to 32 (subject to host memory constraints) DBL 0.4.8 ------------------------------------ BUG FIXES: 1. Fix return length from Java function DBLDevice.recvfrom() 2. Fix SEGV when dbl_bind called twice on same port from single process. 3. Fix bad MTU in Channel code, was too small 4. DBLChannel.close() actually closes channel 5. Fix threading problem with closing while in recvfrom 6. Fix build on Linux 2.6.33 7. Fix problem where many mcast_leave/join under traffic load could result in assert or segmentation fault ENHANCEMENTS: 1. Add DBLSocket.mcast_join() so Channel interface users can join Multicast groups 2. Remove hard limits on numbers of DBLChannels open 3. Accept rx-usecs=0 via ethtool 4. Increase per-endpoint receive buffering 5. Add control of link-level flow control for Windows DBL 0.4.7 ------------------------------------ BUG FIXES: 1. DBL could not find peer sometimes when multiple NICs are on same subnet. 2. Fix corruption problem that could be seen when multiple senders simultaneously sent a large number of messages 3. Fix SEGV when trying to dbl_open() on bad address ENHANCEMENTS: 1. Support DBL sends and receives up to 9000 bytes, improves performance of sends > 800 bytes or so. 2. Add ability to specify receive mode in raw Java interface. 3. Add DBL_BIND_NO_UNICAST to reduce number of filters in use. 4. Changed default behavior to not receive broadcast packets. Specify DBL_BIND_BROADCAST to receive broadcast packets. Java Channel interface specifies this flag, so Java Channel interface is unchanged. 5. Added configure flag "--with-java=" to build and install java libs as part of regular build process. 6. Link flow control can now be controlled through ethtool, off by default. DBL 0.4.6 ------------------------------------ BUG FIXES: 1. Race condition could cause hang when blocking mode used for receive. ENHANCEMENTS: 1. Add DBL_BIND_DUP_TO_KERNEL flag to allow sockets and DBL to receive on same port at a small latency cost. 2. Add ability to specify "0" for port number on bind to get OS assigned port. Also add dbl_getaddress() to learn what port a channel is bound to. DBL 0.4.5 ------------------------------------ BUG FIXES: 1. Selecting on TCP channels (SocketChannel and ServerSocketChannel) did not work through the Java shim 2. dbl_unbind() caused a SEGV DBL 0.4.5 ------------------------------------ BUG FIXES: 1. Java sends did not work when IP address had any high bits set. 2. Broascasts > 1500 bytes were not working 3. Fix bug in dbl_send() that manifested itself when sending large packets not necessarily of the same size. ENHANCEMENTS: 1. Default install directory is now /opt/dbl DBL 0.4.4 ------------------------------------ ENHANCEMENTS: 1. Allow sends of packets > 1500 bytes 2. Add setReuseAddress method to Java socket class DBL 0.4.3 ------------------------------------ BUG FIXES: ENHANCEMENTS: 1. Add dbl_sendto() for easier sending code. 2. Fix segfault in mal_getifaddrs when interface with no address encountered. 3. Report destination address so that a channel listening on multiple addresses can tell which address packet was sent to. 4. Correctly check for VLAN interface. DBL 0.4.2 ------------------------------------ BUG FIXES: 1. Various and sundry bugs relating to API changes. DBL 0.4.1 (October 5, 2009): ------------------------------------ MAJOR API CHANGES: * Removal of recvsets, there is now only one recvset per device and users can bind to many UDP ports. Each bind becomes a separate receive channel (or just "channel") bound to a single device. * API itself is always non-blocking, and dbl_recv_event_next() is the only mechanism available to receive the next packet. * All blocking is to be done by the user API, as DBL now exports a DBL_OS_HANDLE for each device (file descriptor on UNIX and HANDLE on Windows). Users can use poll(), select() or WaitForMultipleObjects for an event to be signalled. When an event is signalled, users should call dbl_recv_event_next() to get the new event, although it is *NOT* guaranteed that an event will necessarily be available. * Send handles can now be created and connected for many send peers. See dbl_send_connect() + dbl_send() + dbl_send_disconnect(). * One can bind a unicast port or a multicast port, and DBL will join the multicast group if the address is multicast. * Binding to a multicast port does not imply that the user will also receive unicast packets on that port -- users must explicitly register another unicast channel with the same port to obtain such behavior. * For unicast, users can only bind to the IP with which the device was opened in dbl_open(). Things to watch out for when converting from r03 to r04: * Errors return the value of 'errno', not '-errno', that is programs that relied on if (dbl_function < 0) { error } will need to be updated. This had to be done as a lot of the internal DBL tools and driver interfaces use this convention. DBL pre-release 03 (May 26, 2009): ------------------------------------ BUG FIXES: 1. API CHANGE: Timescale in dbl_rcvset_wait() is now in *microseconds* and not in nanoseconds as initially implemented. Also, dbl_rcvset_wait() now correctly handles the ETIMEOUT case and won't poll forever. 2. API addition: dbl_t is returned along with user_context in dbl_event_info. 3. Correctly detect DBL-capable myri ethernet devices that are not called myriX. Now ethernet devices with ethX should be detected by the DBL library (would cause problems on RHEL distributions). 4. Fix wordsize detection on Solaris, where 64-bit would not build correctly 5. dbl_send documentation and implementation differed. Now dbl_send returns 0 if successful (not byte count as documentation said). 6. Other minor internal fixes (multicast setopt, valgrind, dbl.h is C++ friendly). ENHANCEMENTS: 1. Add support to allow multiple threads to each have their own receive resources allocated with the NIC (i.e. multiple DBL endpoints). This reduces the locking overhead for multi-threaded clients. 2. Receive resources have been increased by 4 (up to 8k packets can be buffered per DBL socket). DBL pre-release 02 (April 09, 2009): ------------------------------------ BUG FIXES: 1. API CHANGE: Fix support for dbl_event_many_t, it had not been tested and would not have worked in its current form. The dbl_perf_test now also exercises this functionality. 2. Handle edge cases that could cause corruption in send fifo when sender overwhelms receiver. 3. Code cleanup (function/member names) and minor assertion cases have been revised. 4. Fully support the REUSEADDR property so that multicast can work as expected when sharing the multicast port with the unicast port. ENHANCEMENTS: 1. Add support for dbl_open_mcast() which folds a lot of the multicast open and rcvset handling into a single call (documentation for it is updated in dbl.h). 2. Fully support the TTL option in setopt and implement header caching to reduce the amount of computation required to generate IP+UDP headers. 3. Add a multi-threaded, multiple-receive set and multiple dbl stress test to the dbl_perf_test to exercise thread safety guarantees and increase pressure on various areas of packet handling. Much of these helped to contribute to finding/fixing bugs. DBL pre-release 01 (March 30, 2009): ------------------------------------ BUG FIXES: 1. Completions for 512+ byte messages would be needlessly delayed thus affecting performance (the delay could be up to 1ms instead of a few microseconds). ENHANCEMENTS: 1. Added chksum+piocopy functionality to simulatenously do the checksum as the message is copied to the NIC. Test added to verify checksumming over many lengths and alignments. DBL pre-release 00 (March 26, 2009): ------------------------------------ Initial release. ===============================================================================