Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
These are some PowerShell snippets to configure a specific set of systems for Hyper-V over SMB testing.
Posting it here mainly for my own reference, but maybe someone else out there is configuring a server with 48 disks split into 6 pools of 8 disks.
These systems do not support SES (SCSI Enclosure Services) so I could not use slot numbers.
This setup includes only two computers: a file server (ES-FS2) and a Hyper-V host (ES-HV1).
Obviously a standalone setup. I'm using those mainly for some SMB Direct performance testing.
Storage Spaces - Create pools
$s = Get-StorageSubSystem -FriendlyName *Spaces*
$d = Get-PhysicalDisk | ? { ";1;2;3;4;5;6;7;8;".Contains(";"+$_.DeviceID+";") }
New-StoragePool -FriendlyName Pool1 -StorageSubSystemFriendlyName $s.FriendlyName -PhysicalDisks $d
$d = Get-PhysicalDisk | ? { ";9;10;11;12;13;14;15;16;".Contains(";"+$_.DeviceID+";") }
New-StoragePool -FriendlyName Pool2 -StorageSubSystemFriendlyName $s.FriendlyName -PhysicalDisks $d
$d = Get-PhysicalDisk | ? { ";17;18;19;20;21;22;23;24;".Contains(";"+$_.DeviceID+";") }
New-StoragePool -FriendlyName Pool3 -StorageSubSystemFriendlyName $s.FriendlyName -PhysicalDisks $d
$d = Get-PhysicalDisk | ? { ";25;26;27;28;29;30;31;32;".Contains(";"+$_.DeviceID+";") }
New-StoragePool -FriendlyName Pool4 -StorageSubSystemFriendlyName $s.FriendlyName -PhysicalDisks $d
$d = Get-PhysicalDisk | ? { ";33;34;35;36;37;38;39;40;".Contains(";"+$_.DeviceID+";") }
New-StoragePool -FriendlyName Pool5 -StorageSubSystemFriendlyName $s.FriendlyName -PhysicalDisks $d
$d = Get-PhysicalDisk | ? { ";41;42;43;44;45;46;47;48;".Contains(";"+$_.DeviceID+";") }
New-StoragePool -FriendlyName Pool6 -StorageSubSystemFriendlyName $s.FriendlyName -PhysicalDisks $d
Storage Spaces - Create Spaces (Virtual Disks)
1..6 | % {
Set-ResiliencySetting -Name Mirror -NumberofColumnsDefault 4 -StoragePool ( Get-StoragePool -FriendlyName Pool$_ )
New-VirtualDisk -FriendlyName Space$_ -StoragePoolFriendlyName Pool$_ -ResiliencySettingName Mirror -UseMaximumSize
}
Initialize disks, partitions and volumes
1..6 | % {
$c = Get-VirtualDisk -FriendlyName Space$_ | Get-Disk
Set-Disk -Number $c.Number -IsReadOnly 0
Set-Disk -Number $c.Number -IsOffline 0
Initialize-Disk -Number $c.Number -PartitionStyle GPT
$L = “DEFGHI”[$_-1]
New-Partition -DiskNumber $c.Number -DriveLetter $L -UseMaximumSize
Initialize-Volume -DriveLetter $L -FileSystem NTFS -Confirm:$false
}
Confirm everything is OK
Get-StoragePool Pool* | sort FriendlyName | % { $_ ; ($_ | Get-PhysicalDisk).Count }
Get-VirtualDisk | Sort FriendlyName
Get-VirtualDisk Space* | % { $_ | FT FriendlyName, Size, OperationalStatus, HealthStatus ; $_ | Get-PhysicalDisk | FT DeviceId, Usage, BusType, Model }
Get-Disk
Get-Volume | Sort DriveLetter
Verify SMB Multichannel configuration
Get-SmbServerNetworkInterface -CimSession ES-FS2
Get-SmbClientNetworkInterface -CimSession ES-HV1 | ? LinkSpeed -gt 1
Get-SmbMultichannelConnection -CimSession ES-HV1
On the local system, create files and run SQLIO
1..6 | % {
$d = “EFGHIJ”[$_-1]
$f=$d+”:testfile.dat”
fsutil file createnew $f (256GB)
fsutil file setvaliddata $f (256GB)
}
c:sqliosqlio2.exe -s10 -T100 -t4 -o16 -b512 -BN -LS -fsequential -dEFGHIJ testfile.dat
c:sqliosqlio2.exe -s10 -T100 -t16 -o16 -b8 -BN -LS -frandom -dEFGHIJ testfile.dat
Create the SMB Shares for use by ES-HV1
1..6 | % {
$p = “EFGHIJ”[$_-1]+":"
$s = "Share"+$_
New-SmbShare -Name $s -Path $p -FullAccess ESUser, ESES-HV1$
(Get-SmbShare -Name $s).PresetPathAcl | Set-Acl
}
On remote system, map the drives and run SQLIO again:
1..6 | % {
$l = “EFGHIJ”[$_-1]+":"
$r = "\ES-FS2Share"+$_
New-SmbMapping -LocalPath $l -RemotePath $r
}
c:sqliosqlio2.exe -s10 -T100 -t4 -o16 -b512 -BN -LS -fsequential -dEFGHIJ testfile.dat
c:sqliosqlio2.exe -s10 -T100 -t16 -o16 -b32 -BN -LS -frandom -dEFGHIJ testfile.dat
Creating the VM BASE
New-VM -Name VMBASE -VHDPath C:VMSBASE.VHDX -Memory 8GB
Start-VM VMBASE
Remove-VM VMBASE
Set up VMs - Option 1 - from a BASE and empty shares
1..6 | % {
Copy C:VMSBase.VHDX \ES-FS2Share$_VM$_.VHDX
New-VHD -Path \ES-FS2Share$_Data$_.VHDX -Fixed -Size 256GB
New-VM -Name VM$_ -VHDPath \ES-FS2Share$_VM$_.VHDX -Path \ES-FS2Share$_ -Memory 8GB
Set-VM -Name VM$_ -ProcessorCount 8
Add-VMHardDiskDrive -VMName VM$_ -Path \ES-FS2Share$_Data$_.VHDX
Add-VMNetworkAdapter -VMName VM$_ -SwitchName Internal
}
Set up VMS - Option 2 - when files are already in place
1..6 | % {
New-VM -Name VM$_ -VHDPath \ES-FS2Share$_VM$_.VHDX -Path \ES-FS2Share$_ -Memory 8GB
Set-VM -Name VM$_ -ProcessorCount 8
Add-VMHardDiskDrive -VMName VM$_ -Path \ES-FS2Share$_Data$_.VHDX
Add-VMNetworkAdapter -VMName VM$_ -SwitchName Internal
}
Setting up E: data disk inside each VM
Set-Disk -Number 1 -IsReadOnly 0
Set-Disk -Number 1 -IsOffline 0
Initialize-Disk -Number 1 -PartitionStyle GPT
New-Partition -DiskNumber 1 -DriveLetter E -UseMaximumSize
Initialize-Volume -DriveLetter E -FileSystem NTFS -Confirm:$false
fsutil file createnew E:testfile.dat (250GB)
fsutil file setvaliddata E:testfile.dat (250GB)
Script to run inside the VMs
PowerShell script sqlioloop.ps1 on a shared X: drive (mapped SMB share) run from each VM
Node identified by the last byte of its IPv4 address.
Empty file go.go works as a flag to start running the workload on several VMs at once.
Also saves SQLIO output to a text file on the shared X: drive
Using a separate batch files to run SQLIO itself so they can be easily tuned even when the script is running on all VMs
CD X:SQLIO
$node = (Get-NetIPAddress | ? IPaddress -like 192.168.99.*).IPAddress.Split(".")[3]
while ($true)
{
if ((dir x:sqliogo.go).count -gt 0)
{
"Starting large IO..."
.sqliolarge.bat >large$node.txt
"Pausing 10 seconds..."
start-sleep 10
"Starting small IO..."
.sqliosmall.bat >small$node.txt
"Pausing 10 seconds..."
start-sleep 10
}
"node "+$node+" is waiting..."
start-sleep 1
}
PowerShell script above uses file sqliolarge.bat
.sqlio2.exe -s20 -T100 -t2 -o16 -b512 -BN -LS -fsequential -dE testfile.dat
Also uses sqliosmall.bat
.sqlio2.exe -s20 -T100 -t4 -o16 -b32 -BN -LS -frandom -dE testfile.dat
P.S.: The results obtained from a configuration similar to this one were published at https://blogs.technet.com/b/josebda/archive/2013/02/11/demo-hyper-v-over-smb-at-high-throughput-with-smb-direct-and-smb-multichannel.aspx