First published on TechNet on Oct 20, 2013
Storage Tiers allow for use of SSD and hard drive storage within the same storage pool as a new feature in Windows Server 2012 R2. If you’ve not read Jose Barreto’s Step-by-step post on this subject already, it is a great source for links about Storage Tiers as well as a fantastic place to find examples of how to use PowerShell cmdlets to implement Storage Tiers with Storage Spaces. In this episode, I’m going to show you how to implement Storage Tiers using mostly the UI.
If you’re not familiar with Storage Tiers, the idea is to be able to mix Solid State Disk (SSD) storage with conventional disks (HDD). However, Storage Tiers provides the ability to store more frequently accessed data on SSD media…with both types of media used as block based storage for the same virtual disk: the best of both types of storage. That’s a pretty high level summary…and a pretty awesome concept. Previously, in my basement lab I had two different pools: one for each type of storage.
If implementing tiers using PowerShell, some calculations may be required…and it looks a bit complicated if you’re just attempting to try out. Granted, below are quite a few screen shots and this is a lengthy post. However, the process using the UI is fairly easy. I made one diversion into PowerShell to show how to define MediaTypes for storage devices if they’re not detected automatically. The technique I use for that is very similar to Jose’s example but is another variation to show that you’re not limited to just one technique.
If you’ve read my recent post about expanding a storage pool , you may have a better understanding of how Storage Spaces uses columns . Using the UI to configure Storage Tiers will attempt to use the defaults for the number of columns. Using some quick and easy PowerShell during the creation process, you may change the column defaults for a specific storage pool.
Remember: If you have difficulty reading any of the screenshots below, you can obtain a full size image by clicking on them.
1. The first step involves attaching the devices you intend to use. You must have at least one SSD and one physical drive attached. For this example, I chose 4 SSD devices, and 9 1 TB drives. This is indeed an odd arrangement but I’ve chosen it with a purpose: to show the layout of a defined virtual disk, and to show that Storage Spaces will use what it can from this arrangement and leave remaining space for other uses. In this example, I’ve connected the devices and can see them within Server Manager.
Figure1: Server Manager view of attached disks
2. Next, drop into Storage Pools within Server Manager to see the Primordial pool of available disks.
Figure 2: The Primordial Pool
3. Right-click the Primordial pool, and create a new pool.
Figure 3: Create a new pool
4. Give the new pool a name.
Figure 4: Naming the pool
5. In my example, I’m choosing 2 of the disks to be hot spares. The only reason I chose the specific devices below is because they’re the top drives in each external eSATA cabinet and are easy for me to keep track of this way. 😉 In this section of the wizard, you will also choose the devices to include in the pool. You may click the checkbox on the line with column labels to select all available devices should you so choose.
Figure 5: Assign device uses
Figure 6: Manually setting MediaType with PowerShell
Notice that the SSD devices were detected as SSD media. However, in this case the physical drives show as unknown. If yours are not detected like in this example, they should be set correctly which can be done using PowerShell. We will proceed for now but will need to correct this later. Leaving the majority of the devices as Unknown will result in error in a later step. Next, confirm choices and proceed.
Figure 7: Confirm Selections
Figure 8: Successful Pool Creation
6. If you proceed forward from here and attempt to create a virtual disk, you may receive the following status message. Also note that the new option to create tiered storage is grayed out. This is because the devices in the pool currently don’t meet the minimum requirements due to the Unknown MediaType of my physical disk storage.
Figure 9: Can’t proceed if storage type needs to be defined
7. The above problem is an easy fix. If your storage was properly detected as HDD, then you can skip this step. Otherwise, open a PowerShell prompt and use commands like in the example below:
Figure 10: Assigning MediaType to Unknown disks.
In PowerShell, the disks show as Unspecified. Since all my physical disks show as Unspecified that are part of the pool, I’m simply using the PowerShell WHERE command (can be abbreviated with a question mark) to filter results and only act on those devices that need definition…setting them to HDD.
8. This is also a good time to override the defaults on number of columns to be used within this particular storage pool. By default, as you’ll note from the first command below, the pool is defined to use automatic selection. I am planning to use a mirroring on the virtual disk to be created and want to use two columns. If I were going to create a simple volume, I would want 4 columns as I have 4 SSD drives. You may also be thinking that I’m crazy for mirroring SSD drives. SSD drives are not exempt from failure.
Figure 11: Changing resiliency defaults for a storage pool
9. Getting back to the UI…now is a good time to refresh Server Manager. The UI needs to be refreshed to be aware of the changes just made or subsequent steps may yield errors.
Figure 12: Refresh Server Manager
10. Next, we will create the virtual disk. You don’t have to create the tiers first in PowerShell because the UI will do this for you by using the available checkbox to enable tiering.
Figure 13: Create the virtual disk
Figure 14: Use the checkbox to enable Storage Tiers
11. Select the layout for the storage. In my example, I want to use mirroring.
Figure 15: Choose resiliency level
12. Select two-way mirror.
Figure 16: Two-way mirror
13. When using tiers, you must use fixed provisioning.
Figure 17: Fixed Provisioning
14. Here you get to view the size of the tiers for the virtual disk. Both tiers will be put together to make the resulting virtual disk. In this example, I’m going with the maximum for each.
Figure 18: Selecting SSD and HDD tier size
15. Reviewing the selections below, you see that out of 9TB of available data, the resulting virtual disk is only 3.6TB. Remember that we used all the available SSD space (which was smaller than available HDD space to begin with), and that by choosing mirroring that we’re really using 7.2TB for a 3.6TB volume. Any space not used will remain available in the pool. The maximum size of 3.6TB for this virtual disk is due to the overall disk layout.
Figure 19: Confirm selections
Figure 20: Completion of virtual disk creation
16. Next step is to create a volume on the virtual disk. Note that because of using tiers, you must use all available space on the virtual disk just created.
Figure 21: Create a volume
Figure 22: Choosing max size in New Volume Wizard
17. Assign a drive letter for the volume.
Figure 23: Assign drive letter.
18. Specify a volume label if you choose.
Figure 24: Volume Label
19. Confirm choices.
Figure 25: Final Confirmation
Figure 26: Last step may take a while to complete
20. Once everything has completed, if you look at the storage pool again, you will see that space remains available in the pool — even though we chose the maximum size for the virtual disk and volume. This is due to the storage configuration I chose for this example. Based on the configuration options I chose for the virtual disk, Storage Spaces chose the largest virtual disk it could create based on the available disk layout and columns needed. Therefore, essentially the space on two remaining 1TB drives remains for whatever I might want to use it for.
Figure 27: Remaining Space
21. After the wizard completes, the volume may be used for data. You may or may not know that there are scheduled tasks associated with Storage Tiers. Initially they are not enabled, but after establishing the first tiered storage, they will be enabled automatically. After successful completion, those tasks should appear enabled as follows.
Figure 28: Task Scheduler jobs.
I hope this helps to illustrate how to create tiered storage with Storage Spaces using Windows Server 2012 R2. Having the option to use different classes of storage within the same virtual disk is a great feature to have as an option for your storage needs.
Prior Posts about Storage Spaces
http://blogs.technet.com/b/askpfeplat/archive/2012/10/10/windows-server-2012-storage-spaces-is-it-for-you-could-be.aspx
http://blogs.technet.com/b/askpfeplat/archive/2012/12/24/windows-server-2012-how-to-import-a-storage-pool-on-another-server.aspx
http://blogs.technet.com/b/askpfeplat/archive/2013/09/25/storage-spaces-understanding-expansion.aspx
Jose Barreto’s Storage Tiering Step-By-Step with PowerShell
http://blogs.technet.com/b/josebda/archive/2013/08/28/step-by-step-for-storage-spaces-tiering-in-windows-server-2012-r2.aspx
TechNet Reference for Get-VirtualDisk
http://technet.microsoft.com/en-us/library/hh848644.aspx
TechNet Reference for Get-StoragePool
http://technet.microsoft.com/en-us/library/hh848654.aspx
Until next time!
Martin
In this post I am going to cover how to create a storage spaces tiered storage array, format it to use ReFS and have Server 2012R2 Mount the drive after/when the system is restarted. You will have to have the Server 2012R2 installed with the Hyper-V role added before we begin.
When installed you can see from the GUI 4 disks that you have available in my case I have 4 but only three can be pooled because in this list my OS disk is being shown in here.
This powershell command shows what disks can be pooled.
#List all disks that can be pooled and output in table format (format-table)
Get-PhysicalDisk -CanPool $True | ftFriendlyName,OperationalStatus,Size,MediaType
The results of the powershell commands are shown below.
To make our lives easier we create a variable with unspecified disks.
#Store all physical disks that can be pooled into a variable, $pd
$pd = (Get-PhysicalDisk -CanPool $True | Where MediaType -NE UnSpecified)
#Create a new Storage Pool using the disks in variable $pd with a name of My Storage Pool
—For 2012R2 and earlier—
New-StoragePool -PhysicalDisks $pd –StorageSubSystemFriendlyName “Storage Spaces*” -FriendlyName “DATA”
—For Server 2016 and newer—
New-StoragePool -PhysicalDisks $pd –StorageSubSystemFriendlyName “Windows Storage*” -FriendlyName “DATA”
#View the disks in the Storage Pool just created
Get-StoragePool -FriendlyName «DATA» | Get-PhysicalDisk | SelectFriendlyName, MediaType
So we have 2 types of disks shown in our storage pool. SSD and HDD
We run the following commands to create a tiered storage pool. This will create a ssd pool and hdd pool
#Create two tiers in the Storage Pool created. One for SSD disks and one for HDD disks
$ssd_Tier = New-StorageTier -StoragePoolFriendlyName «DATA» -FriendlyName SSD_Tier -MediaType SSD
$hdd_Tier = New-StorageTier -StoragePoolFriendlyName «DATA» -FriendlyName HDD_Tier -MediaType HDD
Now we can switch to the gui and create our VHD which will mount to the HOST OS. We will also be able to create a writeback cache. From here we can start the Wizard in the GUI.
Now here is where we can select the option to create tiered storage spaces and name your virtual disk.
Here is where you can specify what kind of setup you want in my case simple or mirrored. However I could not do mirrored as I did not have enough physical disks available so for the purposes of this post I went with simple. Though for performance and redundancy I would select mirrored. StorageSpaces allows for 3 types of resilient storage.
Resilient storage. Storage Spaces provides three storage layouts (also known as resiliency types):
-
Mirror. Writes data in a stripe across multiple disks while also writing one or two extra copies of the data. Use the mirror layout for most workloads – it helps protect your data from disk failures and provides great performance, especially when you add some SSDs to your storage pool and use storage tiers.
-
Parity. Writes data in a stripe across physical disks while also writing one or two copies of parity information. Use the parity layout for archival and streaming media workloads, or other workloads where you want to maximize capacity and you’re OK with lower write performance.
-
Simple (no resiliency). Writes data in a stripe across physical disks without any extra copies or parity information. Because the simple layout doesn’t provide any protection from disk failures, use it only when you require the highest performance and capacity and you’re OK with losing or recreating the data if a disk fails. You can also use the simple layout when your application provides its own data protection.
Once you go forward you will see something like this for the following screen.
You will see an alert about the write-back cache, and I will end up with a 700GB drive 1 x 120 GB SSD and 2 x 320 GB HDD. Now because this lab is a simple setup (3 drives) and if I wanted any kind of redundancy (which I would want for a production environment) I would want to use a mirror setup for the storage spaces instead of simple for the storage layout.
Update — April 24, 2017
After that you will want to get your storage space volume to auto mount
Open an administrative level PowerShell prompt and type in the following.
Get-VirtualDisk | Where-Object {$_.IsManualAttach –eq $True}
This lists off your virtual disks where the IsManualAttach property is turned on and the disks WILL NOT auto-reattach on restart.
Now run the line again but include the following:
Get-VirtualDisk | Where-Object {$_.IsManualAttach –eq $True} | Set-VirtualDisk –IsManualAttach $False
Now the virtual disk will auto mount after a restart/power cycle.
Update — April 26, 2017
I was unable to use the procedure above to work with NVMe based SAS drives. If you want to know how that was setup see my post How to setup Storage Tiers on Server 2012R2 with Powershell and NVMe Drives I go through step by step on how to setup the storage spaces using powershell.
For more information about storage spaces please refer to the following articles
and for referencing some of the powershell commands I used checkout
Automount Storage Spaces Virtual Disk
Storage Spaces is a technology Microsoft introduced with Server 2012. It allows creation of high performing, redundant and flexible storage architectures using common hard disks (JBOD).
For an introduction and general concepts about Storage Spaces see here:
http://technet.microsoft.com/en-us/library/hh831739.aspx
http://blogs.msdn.com/b/b8/archive/2012/01/05/virtualizing-storage-for-scale-resiliency-and-efficiency.aspx
Now with the R2 version of Server 2012 Microsoft enhanced the features by adding automatic storage tiering and write-back cache. In this post I’m going to cover step by step how to create a tiered space.
Storage Tiering
Storage tiering in Server 2012 R2 knows about two tiers. A HDD tier and an SSD tier, meaning one for traditional spinning drives and one for solid state drives. It automatically detects the drive type of physical disks.
Windows automatically discovers which parts of a storage space are access more frequently and heavily than others and moves them to an SSD tier. The data is moved based on 1MB junks. This has basically two benefits. It combines two common requirements in one single solution out of the box. Maximized capacity and maximized performance, which generally don’t go well together. Storage Tiering also allows manual pinning of complete files to a particular storage tier. This allows administrators two permanently map files to an SSD or HDD tier.
Write-Back Cache
This is like a staging area for write IO and lies on a SSD space. Like other vendors as NetApp provide flash cash extensions for read IO, write-back cache is only for writes. You as an Administrator define the size of the write-back cache at will depending on the available SSD capacity. Microsoft recommends to leave the write-back cache at the default of 1GB. Significant improvements have not been observed by using larger WBC. The WBC gets destaged at a fill level between 25%-50%. So if you have a large WBC, the destage process to HDD can take some time and lead to congestion of your HDD tier.
How this fits all together…
How to create a tiered storage space
Requirements: (we will create a simple mirrored space)
- 3 or more SAS or SATA disks
- 3 or more SSD disks
- As you might guess already, this is only available through Powershell, at least in the preview version of R2
#Get physical disks that can be pooled
$pooldisks = get-physicaldisk | ? {$_.canpool -eq $true}
#Create new tiered storage pool New-StoragePool -StorageSubSystemFriendlyName *Spaces* -FriendlyName TieredPool1 -PhysicalDisks $pooldisks
#Check the media type of the disks in the pool Get-StoragePool -FriendlyName TieredPool1 | Get-PhysicalDisk | Select FriendlyName, MediaType, Size
#Create SSD Tier $tier_ssd = New-StorageTier -StoragePoolFriendlyName TieredPool1 -FriendlyName SSD_TIER -MediaType SSD
#Create HDD Tier $tier_hdd = New-StorageTier -StoragePoolFriendlyName TieredPool1 -FriendlyName HDD_TIER -MediaType HDD
#Create a tiered Storage Space (virtual disk) with write-back cache enabled $vdisk1 = New-VirtualDisk -StoragePoolFriendlyName TieredPool1 -FriendlyName Tiered_Space -StorageTiers @($tier_ssd, $tier_hdd) -StorageTierSizes @(50GB, 120GB) -ResiliencySettingName Mirror -WriteCacheSize 5GB
#Initialize virtual disk, Create Partition and Volume, Assign Drive Letter Get-VirtualDisk -FriendlyName Tiered_Space | Get-Disk | Initialize-Disk –Passthru | New-Partition –AssignDriveLetter –UseMaximumSize | Format-Volume -force -Confirm:$false
In the Server Manager you should now see a tiered space
**
**
How to simulate storage tiering within a virtual machine?
Of course this is not meant for production use, you can override the media type of physical disks within a storage pool to simulate tiering within a VM. To see any differences I recommend to place your virtual hard disks for the virtual machines on different types of storage. Eg. On USB for HDD tier and on SSD for SSD tier, so you can see the performance gains also in your LAB environment.
#Override Media Type for large disks
Get-StoragePool -FriendlyName TieredPool1 | Get-PhysicalDisk | ? {$_.Size -eq 106568876032} | Set-PhysicalDisk -MediaType HDD
In this example I override the media type of all disks (vhds) with a size of 100GB. You could use also other filter strings of course.
How to map files consistently to a storage tier
Taking a VDI deployment of pooled VMs typical scenario could make sense, because you might want to map the parent VHD of your master image to the SSD tier, as every pooled VM booting up reads from this file. So how can you permanently map files to a SSD or HDD storage tier?
#Assign a frequent accessed file permanently to the SSD Tier Set-FileStorageTier -FilePath E:\PoolVMParent.VHD -DesiredStorageTier ($vdisk1 | Get-StorageTier -MediaType SSD)
#Get the tiered file mapping list and the Status Get-FileStorageTier -VolumeDriveLetter E
#Trigger the data movement Optimize-Volume -DriveLetter E -TierOptimize
How Windows manages tier / volume optimization
A scheduled task named “Storage Tiers Optimization” runs at 01:00 am by default. The task runs a defrag command:
defrag.exe /C /H /G
The parameter /G is new and used to optimize storage tiered volumes. You can adjust the task of course or create additional ones to match your requirements.
Disclaimer: This post shows features from the preview version of Server 2012 R2. Things might Change in the RTM.
Всем привет, уважаемые коллеги и фанаты ИТ-технологий!
Сегодня мне хотелось бы рассказать вам про новинки которые у нас появятся в области управление дисковыми подсистемами и хранилищами данных в Windows Sever 2012 R2. Несмотря на то, что с выходом Windows Server 2012 улучшений, касающихся хранилищ данных и работы с дисковыми массивами и сетями SAN, было огромное множество, версия R2 также обладает внушительным списком нововведений, с одной стороны -так и эволюционными улучшениями функций, которые появились в выходом его предшественника.
И так, давайте попробуем разобраться, что же у нас появилось принципиально нового в Windows Server 2012 R2, а что же продолжает стремительно развиваться в новой инкарнации нашего замечательного серверного продукта.
Хочу хранилку — большую, быструю, крутую… И совсем недорогую!
Как правило, такие вещи как высокопроизводительные дисковые хранилища и возможность плавного масштабирования системы на лету, ассоциируются, в первую очередь, с большими, дорогими «железками», которые имеют стоимость соизмеримую со стоимостью чугунного моста.
Но с другой стороны, далеко не каждая компания в состоянии позволить себе приобрести такую систему СХД, да и сеть SAN построить — дело непростое и ресурсоемкое, и дорогое, если быть откровенным.
Если же коротко сформулировать те, требования которые все хотят удовлетворить за минимум денег, то у нас с вами получится следующая картина:
Рисунок 1. Особенности платформы хранилища данных на базе Windows Server 2012 R2.
В левой части рисунка мы видим список челленджей, с которыми, как правило, сталкиваются компании когда речь заходит о внедрении систем хранения данных и дисковых хранилищ. На правой же части представлен список функций встроенных Windows Server 2012 R2, которые призваны разрешить эти моменты. Если быть детальным, то давайте разберем некоторые моменты, а точнее разберемся что же обычно требуется от современной высокопроизводительной «умной» системы хранения данных:
1) СХД должна быть устойчива к отказам компонентов, коими, как правило являются контроллеры дисковых массиов, дисковые полки, которые подключают непостредственно к контроллерам СХД, а также сами диски, точнее массивы и агрегаты которые образуют из дисков. Интерфейсы подключения, коими обычно выступают FC-адаптеры или iSCSI-адаптеры, также должны быть резервируемыми и сточки зрения доступа к дискам используют мультипоточность или же механизмы MPIO (Multi-Path Input/Output). Также на практике используют CNA-адаптеры (Converged Network Adapter — конвергентный сетевой адаптер) — новое веяние в области построения ЦОДов и сетей передачи данных, где адаптер используют среду Ethernet для передачи трафика как LAN, так и SAN-типа, и может быть динамически изменен тип, режим работы такого адаптера — с LAN на SAN — и наоборот. Также для поддержки CNA-подхода был разработан стандарт DCB (Data Center Bridging) для более удобного управления сетями передачи и данных и их конвергентсности — протокол DCB, кстати, поддерживается в Windows Server начиная с 2012 версии.
2) Современная СХД должна быть «умной», что в частности проявляется в наличии таких функций, как дедубликация данных, Thin Provisioning или т.н. «тонкое предоставление», «тонкая нарезка» и виртуализация дисковой подсистемы. Не лишним за частую оказывается и интеллектуальный тиринг (intellectual tiering) для распределения нагрузок по типам дисков.
3) Современной СХД неполохо было бы управлять каким-нибудь удобным инструментом, желательно встроенным в ОС. В реальной же жизни ИТ-среды состоят из гетерогенного окружения, что фактически говорит о том, что инфраструктурщики управляют различными моделями СХД от разных производителей, и исходя из этого факта, задача управления ими усложняется. Было бы неплохо использовать какие-либо нейтральные стандарты для управления. Примерами таких стандартов являются SMI-S (Storage Management Initiative-Specification) или SMP.
Теперь давайте взглянем на эту картину с точки зрения возможностей Windows Server 2012 R2. Что касается поддержки мультипоточности для организации, по сути, кластеров хранилищ данных — то эта функция присутствует в Windows Server с незапамятных времен и реализуется она на уровне драйвера сетевого адаптера и функции ОС — с этим проблем нет. По конвергентность, поддержку CNA и DCB я уже сказал чуть ранее.
А вот если перейти ко второй части, то тут есть чем поживиться (то есть о чем рассказать — самйл).
И так, начнем с дедубликации данных. Впервые это функционал был представлен в Windows Server 2012 и работает дедубликация данных в WS2012/2012R2 на блочном уровне. Напомню, коллеги, что дедубликация может работать на 3-х уровнях, что определяет, с одной стороны, ее эффективность, а с другой — ресурсоемкость. Самая «лайтовая» версия — файловая дедубликация. Примерами файловой дедубликации можно назвать технологиюSIS (Single Instance Storage, которая уже канула в лету). Как нетрудно догадатья — работает она на уровне файлов и заменяет полностью повторяющиеся файлы ссылками на расположение оригинального файла. Замена реальных данных на ссылки — это общий принцип работы дедубликации. Но вот, если мы внесем изменения в дедублицированный файл, то он уже станет уникальным — и в результате, «сожрет» реальное место — так что сценарий не самый привлекательный. Поэтому дедубликация на блочном уровне выглядит более привлекательным решением и даже в случае изменения оригинального файла, место съедят только изменившиеся блоки, а не блоки всего файла целиком. Именно таким образом работает дедубликация данных в WS2012/2012R2. ну и для полноты картину остается упомянуть, что существует также битовая дедубликация оперирует, как нетрудно догадаться из ее название, на уровне битов, имеет самый большой коэффициент дедубликации, НО при этом имеет просто адскую ресурсоемкость… Как правило, битовая дедубликация применяется в системах оптимизации трафика, которые используют в случае сценариев с участием территориально-распределенных организаций, где каналы связи между офисами организации либо очень дороги в эксплуатации, либо имеют очень низкую пропускную способность. По сути функция таких устройств заключается в кэшировании предаваемого трафика в устройстве и передачи только уникальных битов данных. Решения подобного класса могут быть как аппаратными, так и на базе виртуальных апплаинсов (виртуальных машин с программным комплексом, реализующих соответствующий функционал).
Все было бы просто замечательно с дедубликацией, но во одно маленькое но… Дедубликация в WS2012 не могла применяться к online-данным, т.е. тем которые, заняты каким либо процессом, находятся в использование, а значит использование дедубликации поверх ВМ становится невозможным, что убивало всю привлекательность данного подхода. Однако улучшения в WS2012R2 позволяет нам использовать дедубликацию поверх активных VHD/VHDX-файлов, а также является эффективной для VHD/VHDX-библиотек, общих ресурсов с дистрибутивами продуктов да и для файловых шар в общем. Ниже приведен рисунок показателями эффективности применения дедубликации для моего хоум-сервера с пачкой виртуалок и VHD/VHDX-дисков.
Рисунок 2. Эффективность дедубликации в Windows Server 2012 R2
Если же мы говорим с вами про тонкое предоставление, тут тоже можно реализовать такой подход для ВМ. Сделать один прообраз, родительский диск — а от него уже делать разностные диски — тем самым мы сохраняем консистентность и единообразие виртуальной ОС внутри, а с другой — сокращаем место, занимаемое дисками ВМ. Единственный тонкий момент в таком сценарии — это размещение родительского виртуального жесткого диска на быстром накопителе — так как параллельный доступ к одному и тому же жесткому диску со множества различных ВМ приведет к повышенной нагрузки на данные сектора и блоки данных. Т.е. либо SSD — наш выбор, либо виртуализованное хранилище. Ну и интеллектуальный тиринг тут тоже пригодится.
Виртуализация… А какая она бывает?..
Однако обо всем пор порядку.
Давайте вернемся к вопросу виртуализации дисковой подсистемы.
Исторически сложилось так, что виртуализация дисковой подсистемы — это очень старая тема и история. Если мы вспомним, что виртализация — это абстракция от физического уровня, т.е. скрытие нижележащего уровня — то RAID-контроллер на материнской плате таже выполняет фнкцию виртуализации храналища, а именно самих дисков.
Однако, в WS2012 появился механизм Storage Spaces — фактически аналог RAID-контроллера, но на уровне специального драйвера ввода-вывода данных ОС WS2012. Собственно, типы создаваемых логических агрегатов очень напоминают типы томов RAID: Simple (RAID 0), Mirror (RAID 1) и Parity (RAID 5). В ОС WS 2012 R2 к этому механизму добавился интеллектуальный тиринг хранилища. Иными словами теперь можно создавать агрегаты поверх различных типов дисков, SATA, SAS и SSD, которые включены в один агрегат — а WS2012 R2 уже будет интеллектуально распределять нагрузки на сами диски, в зависимости от типов и интенсивности нагрузок.
Рисунок 3. Включение функции интеллектуального тиринга при создании логического агрегата дисков с использованием Storage Spaces.
Надежность, надежность и еще раз надежность
Ну и если уж мы с вами говорим про дисциплину, связанную с хранилищами данных — то как тут не обратить внимание на вопросы надежности данных, а точнее надежности их размещения. Тут есть несколько важных моментов:
С появлением WS 2012 у нас появилась возможность размещать нагрузки поверх файловых шар и файловой системы SMB 3.0. Ну и тут, конечно же, мы вспоминаем про дублирование компонентов нашего хранилища: сетевые адаптеры мы можем резервировать с использованием встроенного функционала NIC Teaming или же агрегации интерфейсов передачи данных, а механизмы SMB Multichannel выполняют функцию MPIO, но на уровне обмена сообщениями SMB. От падения канала мы с вами защитились — не забудьте и коммутаторы задублировать только. Ну а сточки зрения непрерывности размещения ВМ и не только, но и файлов в целом — мы можем развернуть масштабируемый файл-сервер (Scale-Out File Server — SOFS) и разместить на нем критические данные, таким образом гарантируя не то, чтобы высокую доступность, но именно непрерывность доступа к данным. Добавьте к этому возможность WS 2012 R2 использовать файловую систему ReFS для CSV-томов при создании кластера — и вот она, высокая надежность и исправление ошибок файловый системы практически на лету, без остановки работы! Остается добавить, что у ReFS были некоторые болячки в первой своей версии для WS2012, но теперь, она, естественно, поправилась и теперь является по-настоящему resilient-системой!
Возможность шифрование данных поверх SMB тоже является интересной фичей для тех, кто заботится о безопасном размещении данных и контроля доступа к ним.
Еще одной интересной фичей является возможность использования механизмов контроля пропускной способности и производительности дисковой подсистемы — Storage QoS. Механизм интересный и важный — позволяет в дальнейшем использовать политики размещения нагрузок поверх хранилищ с использованием этого механизма, а также передавать эти данные в System Center Virtual Machine Manager 2012/2012 R2.
Ну и на последок, остается напомнить, что с точки зрения задачи управления, что Windows Server 2012 R2, что System Center 2012 R2 поддерживают различные нейтральные механизмы управления — SMI-S, SMP, WMI.
Рисунок 5. Возможности по управлению хранилищами и их предоставления в System Center 2012 R2 — Virtual Machine Manager.
Is This the end?.. No — it is just the beginning!
Ну что же, мне остается только добавить, что пока что продукты категории R2 у нас доступны в предварительной версии для ознакомления и скачать их можно тут:
1) Windows Server 2012 R2 Preview — technet.microsoft.com/ru-RU/evalcenter/dn205286
2) System Center 2012 R2 Preview — technet.microsoft.com/ru-RU/evalcenter/dn205295
Надеюсь вам было полезно и интересно, до новых встреч и хороших всем выходных!
P.S> Забыл вам напомнить, что 10 сентября я и Александр Шаповал проведем для всех желающих бесплатный онлайн-семинар на тему новинок Windows Server 2012 R2 — присоединяйтесь — будет огненно! Регаемся тут: technet.microsoft.com/ru-ru/dn320171
С уважением и пламенным мотором в сердце,
Человек-огонь,
по совместительству,
Эксперт по информационной инфраструктуре
корпорации Microsoft
Георгий А. Гаджиев
-
#1
Starting a new thread for open discussion of recent upgrades to Storage Spaces. Is this enough to make it interesting?
With the release of Server 2012 R2 / Windows 8.1 MS has added some interesting new capabilities to Storage Spaces: Storage Tearing and Write-Back Cache.
Storage Tiering allows creation of a pool containing both SSD and HDD storage with promotion of frequently accessed data to the SSD tier with less frequently accesses data stored on the (presumably slower) HDDs. SS does the promotion automatically at a «slab» (block) level through a once-a-day scan of the pool. You can also «pin» files to the SSD layer — either specific files or any files with certain characteristics (MSs canonical example is pinning files with the name «*.vhd» so that virtual disks for VMs land on the SSD tier).
Write-Back Cache is simply the allocation of SSD-based space for faster writes. Given SSs well known problems with write speed on Parity (Raid5/6) volumes this could be very attractive.
-
#2
My first impressions: not that impressed.
I’m early in my testing, but there are still so many other unresolved issues with Storage Spaces that I just can’t be excited. Its disappointing because there are so many other related features in Server 2012 that really could make this a competitive platform.
Among other things:
Parity vDisks are still painful. Slower than spit when writing. Unless you turn on «Power Protected» mode. Which is a REALLY dangerous thing to do unless you are actually «Power Protected» (which means a lot more than just having a UPS). Nothing even close to the performance of competing technology (ZFS or Hardware Raids).
Worse, Parity vDisks really only work well at all if you have an exact multiple of 8 drives. Its a long story and requires a deep understanding of how SS actually works — but its effects are easily demonstrated if you build a Parity space on a 9 or 10 drive pool and watch the drive activity lights as you copy data to it.
Write-Back Cache helps write performance — but only up to the point that Cache allocated on the SSD fills up. Then its back to painful performance again. No comparison at all to ZFS with a well-sized ZIL or Hardware WB cache. And — if you build a large Cache on a larger SSD (say 100GB cache) and write lots of data you can watch the hours-long after effects of draining that cache into the HDDs at a snails pace (yes — hours long…no exaggeration).
Tiering seemed very interesting. At first…then reality sets in. Doing their «promotion» scans via a once-daily batch job just doesn’t do much for «real time» tiering. Basically, you are always accelerating yesterday’s workload. I guess its fine if you are nice consistent and predictable promotion needs. But if they are nice and consistent and predictable then you don’t really need tiering at all…just build and SSD array and store the important files there. Duh! Same story for «pinning». I already store my virtual disk files on an SSD array. Not much real benefit.
Also — just to drive the final nail — Tiering is disabled on a Parity vDisk. Ugh! The the most interesting use case and kill it. If you can only use Tiering on Striped or Mirrored pools then who really needs it. You already get the extra IOPs from striping.
Quoting Maxwell Smart seems about right: «Missed it by that much…».
Last edited:
-
#3
Didn’t realize tiering is disabled in parity mode…. that’s very disapointing.
Has the performance of parity improved at all with R2 vs 2012? Or are you still limited to 40-50mb/s continuous writes?
-
#4
I don’t have any logged benches from R1, so I can’t say «no improvement», but I can tell you that I can’t even get close to «40-50MB/s» with R2. So yes — its still slower than <choose your favorite foul word>.
-
#5
I don’t have any logged benches from R1, so I can’t say «no improvement», but I can tell you that I can’t even get close to «40-50MB/s» with R2. So yes — its still slower than <choose your favorite foul word>.
I will say — and this was true before — it really doesn’t perform too badly for Simple (Raid 0) or Mirror (Raid 1+0) spaces. Could be better, but really not too bad. Unfortunately i just can’t justify 1+1 redundancy of large HDDs.
-
#6
I had some success last night figuring out how to get a parity space configured with SSD journaling and a large(ish) SSD writebackcache. Also figured out how to do parity spaces more effectively on a 12-drive HDD pool (hint: use «-NumberOfColumns 4» to get a parity block rotating within every group of 4 drives, yielding the same redundancy as having 3x 4-drive Raid-5s striped over 12 drives).
Last night was getting 400-500MB/s sequential reads, 200-300MB/s sequential writes (and getting these speeds without resorting to dangerous tricks like enabling «power protected mode»). Still less than half of what I’d expect from ZFS or hardware raid over 12 drives with SSD ZIL or LSI Cachecade but from a practical perspective getting into the «disappointing but tolerable» range. I’m going to do some more benches over the weekend to see if this level of performance, coupled with the advantages of SMB3, might actually make a better overall performance solution when measured at Windows 8 based clients.
Also — the disk configuration I’m testing on is somewhat impaired. Performance with less hardware constraints might be much better. SSDs I’m using are crap (old Vertex-1s that I pulled out of a junk drawer). Now that it is getting interesting I do have some Samsung 840 Pros that I can throw into the party this weekend. And the whole thing is running on a DL180, which means the 12 HDDS are behind an expander that limits them to SATA-II speeds and (worse) a single 4-lane link running @ 300MB/s/link to the HBA which creates quite a bottleneck. HBA is an M1015 and the SSDs are at least direct connected on a forward breakout cable.
This weekend I plan to upgrade the SSDs and do some more rigorous benches. I expect the upgraded SSDs will show better write performance, but the reads will remains bottlenecked by the single-linked expander. I’ll also bench performance as seen at a Windows 8 client. Then I’ll tear it down and re-load with ZFS and re-bench to get apples-apples on the same hardware (thanks, Gea, for creating the VMware appliance to make that easy!).
Last edited:
-
#7
Great thread. I anxiously await your further results!
-
#8
PigLover,
can you spill out the SSD configuration and commands that you used to get those performance numbers?
-
#9
PigLover,
can you spill out the SSD configuration and commands that you used to get those performance numbers?
Yes. When I do the benchmarks this weekend I will include the exact configuration of each test and the powershell commands used to create that configuration.
I can’t actually post the powershell from last night because there was too much trial/error getting to it.
I do find it a pain that you can’t use the wizards to create what really should be almost standard configs. Its a double pain here because MS won’t actually publish the documentation on 2012 R2s powershell until the RTM date in November. While we are in the preview period its guessing, intuition, on-line help inside powershell (which really isn’t all that helpful) and reading Jose’s blogs.
-
#10
The next few posts will have a series of benches. Some tonight, some tomorrow and (unfortunately) some later.
The system all of this will be run on is as follows:
— HP DL180 G6
— 2x L5639
— 96GB DDR3 1066, triple channel
— Boot: 2x Samsung 840 Pro 128GB, raid-1 on MB raid controller
— HDDs: 12x Hitachi 2TB 7200 RPM.
— HDDs Connected to chassis backplane with an unfortunate built-in expander that only support STAT-II speeds and links to the HBA on a single 4-lane 8087 cable.
— SSDs for pool: 4x Samsung 840 Pro 128GB
— HBA: IBM M1015 flashed to IT mode. One port connected to HDD backplane and the other to the 4 pool SSDs via a SATA forward breakout.
— Network: Mellanox ConnectX-3 EN 10Gbe (2x Intel 1Gbe from DL180 connected but disabled)
A few photos, just for fun:
Four new Samsung’s all ready to join the pools:
SSDs all bundled up in my (should be patented) «custom Velcro mount»:
Add SATA power «vampire» plugs:
Take a Molex power cable from the junk drawer, clip the end and press it home:
Press some of the fuzzy size from a roll of Velcro adhesive tape into the side of the DL180 and mount it all up:
(note the other two Samsung’s used for boot)
And add the 10Gbe to finish it off:
I do wish I had the PCIe cage get everything stable, but I’ll just have to Ghetto-rig something later…
Last edited:
-
#11
First two benchmarks are just setting some baselines. Test the speeds on a single SSD connected to the M1015 and a single HDD on the expander. Knowing what each drive can do by itself should help set expectations for the rest of the tests.
Here’s the Samsung 840 Pro. Pretty much looks like every other benchmark of these drives. Good and fast.
And here’s a single Hitachi 2TB 7200. Again — looks just about like it should. No I’ll effects from the borked expander when looking at one drive at a time:
Last edited:
-
#12
Next is a Simple Space of all four SSDs (simple stripe, raid-0 equiv.). No powershell used to create this one — just picked four drives in the wizard, grouped them into a Storage Pool, created a Simple Space using the entire pool and formatted it NTFS.
100% read IOPs: 88,735.
Simple SSD Pool:
This looks just about like what we would expect. Good performance compared to a single SSD in almost every measure, right between 3x-4x a single SSD. Hardware Raids and well tuned software (like ZFS) usually do a bit better than this but not too bad. So far, so good. But frankly Raid0, simple stripes, isn’t all that hard to do right…
Last edited:
-
#13
Simple Pool of all 12 HDDs. Again — all configured with simple clicks through the wizard. Now PowerShell yet.
100% read IOPs: 10,541.
OK — so here we have our first performance «oops». But I can’t really blame Storage Spaces for this one. Based on the Single-SSD/4x SSD results you would have expected to see something in the range of 1,500+ MB/s sequential reads here. But that silly expander backplane, 300MB/s limits for SATA and a single 4-lane SAS link all conspire to slow it down. I’ll take for granted that this is due to the Expander.
Random reads are pretty close to single disk performance — which is what you would expect for a single-reader test on Raid0. Might have expected random writes to be closer to 12x single disk speeds — the expander doesn’t account for that deficit. Hmmm.
Need to get IOPs numbers. Will retest and add them later…
Last edited:
-
#14
Continuing to baseline. Nothing too interesting yet. Here’s a 2-way mirror pool with all four SSDs. Pretty much a raid-10 of 4 SSD drives.
100% read IOPs: 88,604.
Based on what we saw in the single-disk and Simple Space tests for the SSD this isn’t too far off what we would expect. A cacheless hardware raid would show about the same thing — read speeds comparable to the Simple Space / Raid 0 and Write speeds about half the Simple stripe (obviously — because you have to write it twice and you don’t have any cache…).
Last edited:
-
#15
And 2-way Mirror Space of the HDDs:
100% read IOPs: 10,098.
At least the results are consistent. Assuming it is the expander slowing down the HDD array — then these would be about the expected results.
Last edited:
-
#16
Single Parity on the SSDs. Still constructed just using the wizards.
100% read IOPs: 81,979.
This is where you start to see the problems with SS. Read speeds are OK — a little lower than Mirror, but not too bad. Read IOPs look OK too. But write speeds are starting to collapse. Getting less than 300MB/s seq. writes in Crystal and large-block writes at 500-600MB/s in ATT0 are just miserable for a 4-SSDs Raid5.
-
#17
Single parity on the 12 HDDs. Also constructed with the wizards.
100% read IOPs: 10,546.
Ouch! Reads down slightly from the mirror pool. Read-IOPs OK. But write speeds have completely collapsed! This is totally unacceptable performance — unusable in many cases. This is actually the best performance I’ve ever seen on this system for the 12-drive parity built by the wizards — almost twice what I was seeing earlier. Don’t know why and don’t care. This performance of Parity spaces is the number-1 complaint people voice about SS.
-
#18
OK. So that’s all the baselining. Next few will be attempts to add performance by adding tiering, cache and other options from Server 2012 R2
First off, we’ll bench a more realistic array configuration. This time we build a parity array on the HDD-only pool but set the option «NumberOfColumns» to 3. This has the effect of building parity groups of 4 drives each. Since the pool has 12 drives in it this means we end up with 3 parity groups. From a resiliency perspective this is similar to a raid-50. Not quite as robust as dual parity. But this still gives you protection against loss of 3 drives (just not ANY 3 drives — if two of them are in the same group you are screwed!). This configuration also gives the option of growing the array in groups of 4-drives at a time.
You need PowerShell to create this VirtualDisk — you can’t specify it correctly in the wizards. So build the pool it the wizard and use this command to create the virtual disk:
New-VirtualDisk -StoragePoolFriendlyName HDDtest -FriendlyName HDD_Parity -UseMaximumSize -ResiliencySettingName Parity -ProvisioningType Fixed -NumberOfColumns 4
And then go back into the wizard to create a filesystem.
100% read IOPs: 10,015.
Se here we see read performance tanked and write performance is still similar to (slightly below) the straight-up 12 drive parity pool. But this is the starting point of a realistic deployment scenario (nobody sane would deploy a 12-drive Raid-5 with 2TB or larger drives).
Last edited:
-
#19
This time we add two of the SSDs to the pool and build the same virtual disk as before. Adding the SSDs and defining tiers in the pool should do two things to help write speeds:
— The SSDs should be detected as journal drives and writes to the array should use journaling (ala ZFS Zil)
— The SSDs should also be used to create a default size WriteBackCache (1GB).
Have to use PowerShell again to set up the drive tiers and create the disk:
Get-StoragePool -FriendlyName TieredPool | Get-PhysicalDisk | ? MediaType -eq SSD | Set-PhysicalDisk -Usage Journal
New-StorageTier -StoragePoolFriendlyName TieredPool -FriendlyName SSD_Tier -MediaType SSD
New-StorageTier -StoragePoolFriendlyName TieredPool -FriendlyName HDD_Tier -MediaType HDD
New-VirtualDisk -StoragePoolFriendlyName TieredPool -FriendlyName HDD_Parity -UseMaximumSize -ResiliencySettingName Parity -ProvisioningType Fixed -NumberOfColumns 4
100% read IOPs: 11,399.
Reads still unreasonably low, but writes are up significantly. IOPs also slightly up (due, I think, to getting some of the reads out of the cache). Getting better. Note that this write performance level was achieved without changing the dangerous «IsPowerProtected» variable.
Last edited:
-
#20
Next is same 2 SSDs in the pool but set the WriteCache to a large size. 100GB should do for now.
Build the pool using the wizard with 12 HDD drives & 2 SSDs. Then Powershell to create the VirtualDisk:
Get-StoragePool -FriendlyName TieredPool | Get-PhysicalDisk | ? MediaType -eq SSD | Set-PhysicalDisk -Usage Journal
New-StorageTier -StoragePoolFriendlyName TieredPool -FriendlyName SSD_Tier -MediaType SSD
New-StorageTier -StoragePoolFriendlyName TieredPool -FriendlyName HDD_Tier -MediaType HDD
New-VirtualDisk -StoragePoolFriendlyName TieredPool -FriendlyName HDD_Parity -UseMaximumSize -ResiliencySettingName Parity -ProvisioningType Fixed -NumberOfColumns 4 -WriteCacheSize 100GB
100% read IOPs: 31,938.
Looks amazing! But hold on…logic tells me that the HDD pool didn’t suddenly get faster than it was in its base-case. This is clearly a case of benching reads from the cache. So write speeds are decent (at least until we fill up a 100GB SSD-based cache). And reads are OK for recently-written data.
Also — note the odd look of the ATT0 bench. Played with this a bit and watched what was happening. The speed drop-offs appear to start when the cache starts flushing itself to the HDDs partway through the benchmark. Probably OK — but could cause some unstable performance under certain workloads.
Last edited:
