Rendimiento de WSL

Una de las grandes features que trajo la Anniversary Update de Windows 10 es el Windows Subsystem for Linux (WSL), una compatibility layer que permite correr de forma nativa los ejecutables ELF de Linux. Si bien no está pensado para correr un X Window (aunque hay por ahí circulando guías para poder lograrlo) puede perfectamente ejecutar todas esas herramientas y servicios hoy completamente intrínsecos al desarrollo web como son los package managers, linters, test suites, étc.

Como es de esperarse cuando «virtualizamos» un SO tenemos una caída del rendimiento pero, en principio, los tiempos del WSL dejan mucho que desear. Tareas simples como actualizar un paquete con npm o procesar algunos archivos SASS puede demorar varias veces más de lo habitual, incluso varios minutos.

Con un rápido monitoreo se ve que cuando realizamos tareas en WSL se dispara el uso del procesador y del disco. Uno de los procesos que más sube su uso de los recursos del sistema es el asociado al Antimalware / Defender.  Indagando un poco en Google podemos ver que, como sucede desde la época de Vista, Windows sigue sin llevarse bien con los directorios con muchos archivos pequeños.

La filosofía de Linux de tener cientos de módulos con responsabilidades mínimas sumado al escaneo por parte de Windows de cada uno de estos archivos cuando es accedido o modificado hace que los tiempos se multipliquen.

Por lo visto, de momento la única solución posible es desactivar la protección en tiempo real de Windows Defender. La exclusión de la carpeta de datos y del ejecutable de WSL parece no alcanzar por si sola para mejorar la performance aunque probablemente tenga que ver más con que, al ejecutarse de forma nativa los programas de Linux, se nos estén pasando agregar algunos.

Una vez detenido la protección en tiempo real la performance general mejora drásticamente aunque sin llegar a ser la misma que observamos en Linux. Desde el equipo detrás de WSL prometen estar haciendo lo posible para mejorar estos tiempos pero como el problema es intrínseco al sistema de archivos no es probable que se vayan a ver soluciones definitivas en el corto plazo.

Mapear una conexión SFTP a una unidad en Windows

El acceso mediante SSH al servidor es más seguro, rápido y potente. Nos permite trabajar  como si estuviéramos delante del equipo. SFTP no es más que SSH FTP, es decir, permite trabajar con la conexión SSH como si fuera FTP con la ventaja de la encriptación y la transferencia binaria.

Todo sería color de rosa si no fuera porque los clientes de Windows que permiten la conexión mediante SFTP (WinSCP, PSFTP y Filezilla) no son muy dados a compartirla con otros programas como nuestro editor favorito o el Explorador de Archivos.

Unidad SFTPEl mapeo de la conexión SFTP como unidad nos permite solucionar esto para la mayoría de los programas.

 

En la práctica queda funcionando como cualquier otra unidad de disco aunque un poco más lenta para leer.

How To

Para poder hacerlo vamos a necesitar dos programas:

  • Dokany, librería que simplifica la adaptación de nuevos sistemas de ficheros a Windows. En vez de tener que desarrollar un driver para Windows podemos solucionarlo mediante una API o una DLL.
    URI: https://github.com/dokan-dev/dokany
  • WinSshFS 4every1 edition, el programa que sen encarga de gestionar nuestras conexiones SFTP y pasarle la información a Dokany para que Windows la muestre de forma amigable.
    URI: https://github.com/dimov-cz/win-sshfs

Es importante tener en cuenta que la última versión de WinSshFS fue desarrollada para la versión 0.7.4 de Dokany y no soporta ni funciona con las más nuevas. Además, Dokany 0.7.4, nos requiere tener instalado el Microsoft Visual C++ 2013 Redistributable.

Las instalaciones son sencillas y no requieren más que darle para adelante (Dokany) o extraer algunos archivos (WinSshFS).

WinSshFSUna vez intalado todo, nos dirigimos a la carpeta donde hayamos descomprimido el WinSshFS y arrancamos el programa.

La interfaz es sencilla y bastante intuitiva. Ponemos los datos de la conexión, seleccionamos la letra de unidad donde queremos montar, damos en ‘Mount’ y deberíamos ver aparecer en nuestro sistema la nueva unidad con nuestros archivos.

Actualización 1: Dokany para ofrecerte la descarga del redistributable aunque lo tengas instalado.

 

Actualización 2: Otros dos proyectos interesantes con Dokany mssqlfs y torrent-mount

Usar Git+PuTTY para conectarse a repositorios en Windows

Instalar GIT para Windows – Descarga
Instalar PuTTY – Descarga 

Utilizar PuTTYgen para crear un par de claves
Abrir PuTTYgen, cambiar la cantidad de bits y el tipo de clave si hiciera falta. Hacer click en «Generate». Mover el mouse en el cuadrado vacio hasta que la barra de progreso se llene. Una vez que esté generada la clave se habilitan los botones «Save public key» y «Save private key» que nos permiten guardar, respectivamente, la clave pública y la privada. El nombre se puede elegir libremente, conviene utilizar el mismo. La clave pública no tiene extensión predeterminada pero es práctico utilizar txt para acceder más rápidamente.

Agregar la clave privada a Pageant

Agregar la clave pública al servidor GIT

Indicar que PuTTY es tu almacén de claves SSH
…asignando la variable de sistema o usuario GIT_SSH al ruta de «plink.exe», ubicado en la misma carpeta de PuTTY. En Windows 7, entrar al Panel de Control, Sistema, Configuración avanzada del sistema, Variables de Entorno, en Variables de usuario o del sistema hacer click en Nueva. Usar como nombre GIT_SSH y como valor la ruta completa a plink, por ejemplo: «C:\Program Files (x86)\PuTTY\plink.exe»