Installer SABnzbd sur NexentaStor 3.1

MAJ 13.04.2013 : Nous avons oublié de vous recommander de faire un snapshot ZFS du syspool avant de commencer l’installation. Voila, c’est fait.

Nous profitons de la récente disponibilité de NexentaStor 3.1.4 (toujours pas disponible en version CE) pour vous faire partager le modus operandi de l’installation de SABnzbd sur NexentaStor 3.1 qui nous a été transmis par Brenn Oosterbaan et que nous n’avons que très peu modifié pour le rendre utilisable par (à peu près) tous. Thanks Breen!

Breen nous a aussi fourni le fichier xml permettant de configurer SABnzbd en tant que service mais nous avons été contraint de forcer l’adresse et le port d’écoute dans la commande de démarrage (0.0.0.0:8080) ce qui rend toute modification (lié au host:port d’écoute) dans l’interface de configuration de SABnzbd non persistante. Si vous avez l’intention de changer le port, faites le dans le fichier sabnzbd.xml fourni et relancer la commande d’import.

Une fois l’installation terminée et le service démarré, vous devriez observer quelque chose de similaire à cela dans le log du service :

_yenc module... found!
par2 binary... found (/usr/local/bin/par2)
unrar binary... found (/usr/bin/unrar)
unzip binary... found (/usr/bin/unzip)
nice binary... found (/usr/bin/nice)
ionice binary... NOT found!
pyOpenSSL... found (True)
Starting web-interface on 0.0.0.0:8080
ENGINE Bus STARTING
ENGINE Started monitor thread '_TimeoutMonitor'.
ENGINE Serving on 0.0.0.0:8080
ENGINE Bus STARTED
Starting SABnzbd.py-0.7.11
Dirscanner starting up
URLGrabber starting up

Comme toujours il faudra passer par le fameux mode “expert” pour accéder au shell. Et gare à la Hadopi !

install.txt

Tags: , , , , ,

The vExpendables

C’est le tweet de Arne Fokkema qui nous a fais découvrir une feature de DVS 5.0+ qui ne semble pas très connue, l’autoExpand. Comme son nom le laisse deviner, cette fonctionnalité relègue au placard tous les scripts de check de ports encore disponibles que vous passiez jadis sur votre infra pour ne pas vous retrouver en rade au prochain déploiement de VM.

En effet, après avoir activé l’autoExpand, le nombre de ports utilisables d’un DVPortgroup (en Static binding aka earlyBinding) se verra incrémenté automatiquement de 10 lorsqu’aucun port n’est disponible pour une nouvelle VM. Il y a également une fonction d’autoShrink décrite dans l’API Reference mais c’est une peu vague :

When this property is set to true, the portgroup becomes a potential candidate for auto-shrink. Once the portgroup has auto-expanded then its disconnected ports are likely to be deleted automatically, as a part of auto-shrink step, if there are more than certain number of free ports. If the portgroup never auto-expanded, then it will never lose any free ports.

Sachant que cette fonction est activé par défaut sur les DVSwitch 5.1, nous avons voulu vérifier si c’était également le cas lors d’une migration :

On constate donc que même après avoir upgradé le DVSwitch 5.0.0 en 5.1.0, l’autoExpand est toujours désactivé. Mais pas pour longtemps :)

Après analyse du script PowerCLI d’Arne et de l’API Reference, nous avons constaté que les DVUplinks “disposaient” de cette fonctionnalité (désactivée dans tous les cas et à ne probablement pas activer) car comme nous le confirme Steve Jin, ce ne sont que des DVPortgroup avec un tag spécifique (SYSTEM/DVS.UPLINKPG). De plus, lors de la reconfiguration du DVPortgroup, la propriété configVersion devrait être incrémentée. Et pour finir, en onliner c’est plus sexy :

Get-View -ViewType DistributedVirtualPortgroup|?{!($_.Tag|?{$_.Key -eq "SYSTEM/DVS.UPLINKPG"}) -and !$_.Config.autoExpand}|%{$_.ReconfigureDVPortgroup_Task((New-Object VMware.Vim.DVPortgroupConfigSpec -Property @{autoExpand="True";ConfigVersion=[int32]$_.Config.ConfigVersion+1}))}

Le script n’active la fonctionnalité que sur les DVPortgroup ne l’ayant pas déjà (hors DVUplinks) et incrémente la propriété ConfigVersion de 1 :

Et pour ceux qui voudraient savoir quand de nouveaux ports ont été ajoutés ou supprimés, il y a une alarme pour ça (Monitor : vSphere Distributed Swiches) :

Tags: , , , ,

Host Cache I/O size

En consultant l’excellent Performance Best Practices for VMware vSphere 5.1, nous avons voulu vérifier cette note :

Using swap to host cache and putting the regular swap file in SSD (as described below) are two different approaches for improving host swapping performance. Swap to host cache makes the best use of potentially limited SSD space while also being optimized for the large block sizes at which some SSDs work best.

Facile avec ZFS, un petit coup de DTrace et on peut rapidement voir la caractéristique des IO sur un datastore utilisé en tant qu’Host Cache (il nous aura fallu tout de même faire le coup du SSD). Pour cela nous avons utilisé le boot d’une VM Windows 2008 R2 limité à 256Mo de RAM pour que le reste déborde sur la swap.

D’abord, la taille des IO (en écriture) sur la swap classique :

C’est étonnamment distribué mais c’est largement du 4K. Voyons les IO (toujours en écriture) sur du Host Cache :

Pas de doutes, les IO font uniquement 128K (ceux de 512 bytes n’ont pas de rapport avec la swap) ce qui prouve l’intérêt d’activer la fonctionnalité plutôt que de simplement rediriger les vswp.

Pour ceux qui se poserait la question, la taille des IO en lecture est la même dans les 2 cas : 4K

Tags: , ,

(I Can’t Get No) Overcommit

Bien dynamique la mémoire sur Hyper-V 3…

Tags: , ,

vNUMA : WYSIWYG

Dans l’optique de rattraper un peu le coût CPU de nos petits excès d’overcommit, nous nous sommes penché sur les gains potentiel du vNUMA “forcé” sur des petites VM (2 ou 4 vCPU).

Rappelons que (dans ce contexte) le vNUMA est la capacité de présenter à la VM une topologie NUMA identique à celle de sa VMM. Cette technique permet au guestOS d’optimiser lui même la répartition process/node pour éviter au maximum les accès à des pages qui ne seraient pas dans le noeud où se trouve le vCPU qui y accède (aka remote access).

L’idéal serait un des schémas percutant dont Frank Denneman à le secret mais il va falloir vous contenter de cela : le vNUMA est le WYSIWYG transposé au NUMA donc la topologie NUMA que la VM “voit” est véritablement celle de sa VMM.

Présente depuis ESX 5.0, cette fonctionnalité n’est active par défaut que pour les VM avec *strictement* plus de 8 vCPU (=>9 et non 8+) mais VMware indique comment l’activer pour les VM plus petites :

By default, vNUMA is enabled only for virtual machines with more than eight vCPUs. This feature can be enabled for smaller virtual machines, however, by adding to the .vmx file the line: numa.vcpu.maxPerVirtualNode = X (where X is the number of vCPUs per vNUMA node).

Ce qui est à moitié vrai car avec ce paramètre vous ne forcez que la répartition des vCPU par vNode (topologie présentée à la VM) et non celle des vCPU par pNode (topologie réelle). Heureusement VMware documente plutôt généreusement (en général) et nous avons trouvé l’autre moitié de la réponse dans le Documentation Center :

numa.vcpu.maxPerMachineNode Maximum number of virtual CPUs that belong to the same virtual machine that can be scheduled on a NUMA node at the same time. Use this attribute to ensure maximum bandwidth, by forcing different NUMA clients on different NUMA nodes.

Résultat, même avec 2 vCPU on peut faire du beau vNUMA (avec un beau oneliner) :

Get-VM|?{$_.NumCpu -eq 2}|Get-View|%{$_.ReconfigVM((New-Object VMware.Vim.VirtualMachineConfigSpec -Property @{extraconfig=@((New-Object VMware.Vim.optionvalue -Property @{Key="numa.vcpu.maxPerVirtualNode";Value="1"});(New-Object VMware.Vim.optionvalue -Property @{Key="numa.vcpu.maxPerMachineNode";Value="1"});(New-Object VMware.Vim.optionvalue -Property @{Key="cpuid.coresPerSocket";Value="1"}))}))}

Et on a même fait des bench (sur un Intel E7520) avec Sandra 2013 pour voir s’il pouvait y avoir un gain (vNUMA en bleu, vUMA en rouge) !

Le gain est mince (contrairement aux grosses VM pour faire du HPC) mais sur un host bien overcommité cela peut avoir un véritable intérêt (avant/après) :

Nous avons eu la chance d’avoir l’avis de Seongbeom Kim (Senior Member of Technical Staff chez VMware) sur l’intérêt d’une telle manipulation et sur la raison pour laquelle, contrairement à Hyper-V, vNUMA n’est pas actif par défaut sur les petites VM :

Based on your two charts, enabling vNUMA looks good by not migrating memory across NUMA nodes, resulting in 100% local memory.

One consideration should be whether your workload benefits from cache sharing or not. By forcing vcpus scheduled on two or more NUMA nodes, workload with heavy cache sharing may suffer performance loss even with better memory latency.

For a new VM*, it may pay off to try vNUMA for your VM if #vcpus is greater than the number of cores per NUMA node. The benefit heavily depends on the workload behavior.

[...] modern processors have enough number of cores to place 2 – 4 vcpu VM on a NUMA node where vNUMA has no benefit. Even 8 cores per NUMA node is not rare.

Par “nouvelle VM”, Seongbeom sous entend qu’il y a un risque que le changement de topologie NUMA ait un impact sur le GuestOS et/ou l’application hébergée dans la VM.

Tags: , , , , ,