The long arm of binary compatibility
I got some questions, asking why this performance optimization i wrote of in regard of vHBA isn’t the default. Good question.
I would like to answer this in a more general way about my default assumption in such cases. In my experience of almost 25 years of Solaris: When Solaris is doing something not the most performant or best way by default it’s always because of a sacred cow of Solaris. If there is a remote possibility that an optimization has to change something in a way it behaves differently to applications, it isn’t the default. My favorite example: libc malloc is often not optimal, but some applications are dependent on the behaviour (and the quirks) of libc malloc. So libumem isn’t the default, despite being better in many cases performancewise.
This is one of the impacts of having a sacred cow called binary compatibilty guarantee. It makes migrations to newer OS releases rather boring in regard of the question of “Will the application or even the driver run?”, but you need to take extra care on other parts.
PS: One of the reasons why i started c0t0d0s0.org was to hint people to the more optimal ways that are sometimes somewhat hidden in the large sea of Oracle Solaris documentation (and sometimes not hidden at all as they are practically on the frontpage as a headliner , but simply not read ;) )