I don't have experience of volumes as large as you suggest, but I have just suffered the consequences of NOT planning ahead myself! I have just faced an issue with a Windows volume hitting 2TB ( I have an article here explaining what I did and why).
I think that the best method is Option 3, as the Nimble will allow the volume to be presented using iSCSI and you can take advantage of the MPIO options for redundancy across the 4 NIC’s.
As for performance, I don’t know of any differences between the options you suggest – but I would expect that iSCSI presentation directly from the Nimble would be the easiest to manage. You can also implement Hardware or VSS snapshots.
Wow! Looks like some growth you have their Jacob!
My recommendation is to use the iSCSI attached within the guest OS if performance is your goal (option #3). The multipath I/O handling within Windows is a lot better (Least Queue Depth) and will get you the best performance.
Second, If you ever have to recover the database with the Nimble snapshots, it's a lot easier since you don't have to deal with VMware in the middle. Simply create a clone of the snapshot and present it back up to the Windows VM.
Some Gotchas in setting iSCSI attached up:
1. Make sure you separate your data and log volumes out if possible.
2. When you format the NTFS volume, format it with 64KB.
The only reason I would ever see you use RDM is if you have plans on using SRM with VMWARE, however you can still accomplish SRM with Iscsi attached within Windows with some scripting.
Hope this helps
I also vote for number 3. There is next to no noticeable performance gain from going ISCSI within guest vs RDM and with RDM's you have to decide virtual or physical RDM each with their own trade-offs.
Just a couple additional points to be aware of:
1. When you configured your Virtual Machine ports for the iSCSI guest network be sure to duplicate it exactly on all nodes in the cluster so you don't have any vMotion/DRS issues. Some people just add virtual machine ports to the current vSwitch that's also running VMkernel ports for iSCSI, or if you have the extra physical NICs per host available, create a dedicated vSwitch to iSCSI guest traffic. There isn't much in the way of documented performance gains in either switch config, it's a matter of preference and network port availability.
2. Yes you should definitely separate logs and database LUNs, but ALSO separate your system DB's from your user DB's (Master, model, tempDB) This way, if you do leverage Nimble snapshots, your user database snapshot schedule doesn't cause any issues with system DB's snapshots. (it's usually ok to combine system DB's and Logs on the same drive) Most DBA's prefer regular SQL backups for system DB's once a day as part of their maintenance plans. Also, depending on how many add/delete/inserts take place on your user databases, some people also dedicate a LUN just for tempDB. Since you're already targeting DB's around 40TB, I'd consider this as well. The benefit of having your databases LUN's broken out is two-fold. One, you can monitor where your IOPS are going (system DB's, user DB's, tempDB, etc) Two, you can increase capacity only where you need it and you can assign the proper Nimble performance policy appropriately per LUN.
Hope that help!
FWIW: In testing the Windows iSCSI configuration, I've seen about a 20% decrease in performance when running identical sets of data through IOmeter. I built a small volume, added a new set of 2 VM port groups and added 2 vnics to one of our SQL servers. I then installed the Nimble Windows Integration kit and ran through the Windows MPIO setup with Least Queue Depth as the load balancing option.
I can definitely see pretty even traffic going over both nics from both the OS and the Nimble metrics, and I'm showing four connections to the volume from the Nimble side. I know my data set isn't larger than 10 GB, so I'm getting 100% cache hit rate on the volumes. I don't seem to be saturating the network either, but I'm losing about 20% of my IOPS.
I haven't spent a ton of time tuning the nics or messing with flow control, jumbo frames, etc on the new iSCSI network, but it's definitely a surprise to see the difference.
The vmfs volume is performing better.
Yes, I'm using vmxnet3 on each of the two nics. The only other adjustment I've made to the nics is disabling ipv6.
The volume in Windows is formatted NTFS with 64K allocation unit size. On the storage array, I'm using the SQL Server 2012 performance policy (8k blocks IIRC).
I would give a call to our support guys at Nimble.
According to VMWARE there shouldn't be that much of a performance difference.
I also found this article that is really good in describing your options.