Descripción del Problema
No me quedo claro, cuál fue el origen de los dispositivos de red ocultos de las Máquinas Virtuales de VMWare. Quizás, proviniesen de las máqueta original, la Máquina Virtual que preparas inicialmente y en la que ejecutas el SysPrep de turno antes de utilizarla para desplegar nuevas máquinas. O quizás, viniesen de alguna actualización de las VMWare Tools al mover las máquinas a algún Host con una versión más moderna de VMWare, en algún momento de la vida de la máquina.
El caso es, que en la vorágine de estos problemas de rendimiento, en los que se ponía en duda los Problemas de Rendimiento de SQL Server (un Cluster físico de dos Nodos, con 48 CPUs y 72 GB de RAM cada Nodo), preparé una pequeña Tool con Visual Studio (nuestro gran amigo), que leía una tabla desde SQL Server, la cargaba en memoria en un DataSet, y seguidamente recorría el Dataset ejecutando un INSERT para cada una de las filas (hablamos de unos 200.000 inserts) en otra tabla destino previamente TRUNCADA.
Realizada dicha prueba en diferentes escenarios (localmente desde el Nodo del Cluster que ejecuta la instancia de SQL Server, desde otra máquina física en la misma VLAN, desde otra máquina física en una VLAN distinta, desde una VM en la misma VLAN, y desde una VM de otra VLAN), el problema quedó claramente localizado: al ejecutar dicha Tool desde una VM en la misma VLAN, el tiempo necesario para finalizar su ejecución era el doble que desde una máquina física en la misma VLAN (de 5min pasábamos a 10min, aprox).
Esto ayudó a que surgiese el tema de los dispositivos de red ocultos en el Device Manager sobre Máquinas Virtuales de VMWare. Llegados a este punto, tras eliminar los dispositivos de red ocultos en el Device Manager, al repetir la ejecución de dicha Tool, los tiempos volvían prácticamente parejos.
Procedimiento para su corrección
El procedimiento que seguimos fue el siguiente. Desde una ventana de símbolo del sistema (abierta como Administrador, si es w2008 o superior), ejecutar:
- set devmgr_show_nonpresent_devices=1
- start devmgmt.msc
Tras esto, en la herramienta administrativa Device Manager, activar la opción de Mostrar Dispositivos ocultos (View -> Show hidden devices).
Probablemente, aparezca alguna tarjeta de red "en gris", la cual (o cuales) representan antiguos dispositivos que ya no existen en la máquina, pero que quedan referenciados en el sistema. Estas tarjetas de red, se pueden eliminar.
En principio, con esto debería de ser suficiente, pero no. En el caso que me encontré, eran Máquinas Virtuales con Windows Server 2008 R2, y alguna con Windows Server 2003 R2. En las 2003, fue suficiente, sin embargo, en las máquinas Windows Server 2008 R2, tras realizar esto me encontré que dejó de funcionar la resolución de nombres (esto se comprobaba fácilmente con un ping a un FQDN), entre otras cosas raras. Por ello, hubo que hacer alguna cosilla más:
- Apuntar previamente la configuración de red de todas las NIC (ej: deshabilitado ipv6, ip, mascara, orden de sufijos de resolución DNS, servidores DNS, Gateway, WINS, etc.).
- Eliminar todas las tarjetas de red desde el Device Manager, sean ocultas o no.
- Darle a Buscar nuevo hardware.
- Volver a configurar la Red en cada tarjeta (el IPv4, IPv6, etc.).
Tras esto, debería funcionar, sin necesidad de reiniciar.
En este entorno, no me he encontrado con configuraciones de máquinas con múltiples tarjetas de red, ni con NLBs, ni otras configuraciones, las cuales, habría que ver sí es suficiente con estos pasos, o si hay algún otro detalle adicional a tener en cuenta.
Información adicional
Por último, aprovecho para incluir algunos artículos de Microsoft que hablan del tema de los dispositivos ocultos.
Poco más por hoy. Como siempre, confío que la lectura resulte de interés.