Solaris 10 1/13
I have been using Solaris Volume Manager raw mirror metadevices for several years without any problems.
But, today, I was looking over the documentation and read something I had never noticed before. It was a caution in the SVM documentation that writes that changed the buffer contents while the data was "in-transit" could result in each side of the mirror getting written with different data. It mentioned a possible way to prevent this, but cautioned that it didn't work with raw (meta)devices.
Either Informix doesn't operate this way, or I have been very lucky for the past 4 or 5 years.
Might anyone have any comment on Informix's susceptibility (or lack thereof) to this? Follow up would be, how significant is the performance hit in the suggested addition to /etc/system?
For convenience, I include an excerpt from the man pages of Solaris Volume Manager:
Excerpt from SVM man pages:
When mirroring data in Solaris Volume Manager, transfers from memory to the disks do not all occur at exactly the same time for all sides of the mirror. If the contents of buffers are changed while the data is in-flight to the disk (called write-on-write), then different data can end up being stored on each side of a mirror.
This problem can be addressed by making a private copy of the data for mirror writes, however, doing this copy is expensive. Another approach is to detect when memory has been modified across a write by looking at the dirty-bit associated with the memory page. Volume Manager uses this dirty-bit technique when it can. Unfortunately, this technique does not work for raw I/O or direct I/O. By default, Volume Manager is tuned for performance with the liability that mirrored data might be out of sync if an application does a "write-on-write" to buffers associated with raw I/O or direct I/O.
Note that without mirroring, you were not guaranteed what data would actually end up on media, but multiple reads would return the same data. With mirroring, multiple reads may return different data. The following line can be added to /etc/system to cause a stable copy of the buffers to be used for all raw I/O and direct I/O write operations.
Setting this flag will degrade performance.