The VBVA ring buffer is suitable for transferring large (< 2GB) amount of data. For example big bitmaps which do not fit to the buffer.

Guest starts writing to the buffer by initializing a record entry in the aRecords queue. VBVA_F_RECORD_PARTIAL indicates that the record is being written. As data is written to the ring buffer, the guest increases off32End for the record.

The host reads the aRecords on flushes and processes all completed records. When host encounters situation when only a partial record presents and cbRecord & ~VBVA_F_RECORD_PARTIAL >= VBVA_RING_BUFFER_SIZE - VBVA_RING_BUFFER_THRESHOLD, the host fetched all record data and updates off32Head. After that on each flush the host continues fetching the data until the record is completed.