The MPI specification is careful not to constrain implementations with specific resource guarantees. For many uses, programmers can work within the limits of any ``reasonable'' implementation. However, many existing message-passing systems provide some (usually unspecified) amount of buffering for messages sent but not yet received. This allows a user to send messages without worrying about the process blocking waiting for the destination to receive them or worrying about waiting on nonblocking send operations. The problem with this approach is that if the system is responsible for managing the buffer space, user programs can fail in mysterious ways. A better approach is to allow the user to specify the amount of buffering desired. The MPI Forum, recognizing this need, added routines with user-provided buffer space: MPI_Bsend, MPI_Buffer_attach, and MPI_Buffer_detach (and nonblocking versions). These routines specify that all of the space needed by the MPI implementation can be found in the user-provided buffer, including the space used to manage the user's messages. Unfortunately, this made it impossible for users to determine how big a buffer they needed to provide, since there was no way to know how much space the MPI implementation needed to manage each message. The MPI Forum added MPI_BSEND_OVERHEAD to provide this information in the 1.1 version of the Standard.
One remaining problem that some users are now experiencing is the limit on the number of outstanding MPI_Requests that are allowed. Currently, no a priori way exists to determine or provide the number of allowed requests.