Throughput Performance Tests
Sequence of Bytes
Fast transfer of large amounts of raw data is important for applications such as file transfer. This test measures the time it takes to transfer a sequence of 500,000 bytes with a twoway call. 1,000 such sequences were transferred, and the mean transfer time per sequence was calculated.
| Ice | TAO | Difference | |
| Linux | 7.44 ms | 6.74 ms | -9% |
| Windows XP | 14.34 ms | 8.78 ms | -39% |
As can be seen from the results, TAO has a performance lead over Ice with respect to raw data transfer. We believe that this is due to zero-copy features in TAO, which Ice does not have.
Given that the speed for both Ice and TAO is already faster than what could possibly be transferred over a regular fast ethernet network (in this test using the loopback device, Ice had a transfer rate of more than 500 MBit/s on Linux), we are not convinced that adding zero-copy capabilities to Ice would be worth the additional complexity in the implementation.
Sequence of Structs
For this test we used a sequence of 50,000 structures, with each structure containing a string with the value "hello" and a double-precision floating point variable with the value 3.14. Other than that, the setup was the same as for transferring sequence of bytes.
| Ice | TAO | Difference | |
| Linux | 55.56 ms | 68.58 ms | 23% |
| Windows XP | 59.49 ms | 106.02 ms | 78% |
As the numbers show, TAO loses its performance lead over Ice if throughput is measured for structured data instead of raw data. For the simple structure we used, Ice is about 1.2 times faster than TAO on Linux, and about 1.8 times faster on Windows XP. Most of the difference can be attributed to quality of implementation. However, Ice uses a more compact encoding for marshaling data than CORBA's IIOP, which also contributes to the difference.