sfcredfox
Patron
- Joined
- Aug 26, 2014
- Messages
- 340
Experts,
I'm looking for proper command for adding a LOG partition to a pool by partition rather than the whole device.
This post (https://forums.freenas.org/index.php?threads/bad-performance-with-mirrored-ssds-as-slog.18262/) shows the proper way to create a single partition and add an underprovisioned LOG device, but I want to be sure I'm going to do this right for adding two partitions to the devices, then adding them to the pools correctly.
What do I want to do?
I want to take two S3700s, create two partitions on each, and add them as striped log devices for two pools, essentially allowing the pools to spread the writes across both devices instead of a single device for each pool. Wait until below to start arguing this :)
I still can't figure out how to do this correctly for two same size partitions on the same device.
After I create to two partitions (the part I can't figure out), I think I need to do a:
Wait, But why?
I have read a good amount of posts where people try to share a single SSD for cache and log. That's not what I'm trying to do here, the devices are still going to be dedicated to logs. I'm going to have two devices dedicated to LOG, just for two pools.
The arguments against (from my always growing knowledge base):
The whole point of having faster and faster devices for SLOG devices (in SYNC scenarios) is to get that acknowledgement back to the OS while the system is getting stuff (groups) written down to the pool, and the device has to be reliable (talks about not using inappropriate SSDs https://forums.freenas.org/index.php?threads/correct-way-to-remove-slog.43401/) in case of power loss right? So, overall, we want no latency.
Sharing a device for another purpose other than being a log device would/could slow that down, or cause competing IO that would potentially slow down that acknowledgement, right? If that was the case, we'd see the result of competing IO on the SLOG device in terms of higher latency by the initiator, correct? (I'm betting so)
The arguments for:
If given the opportunity to spread LOG IO across multiple devices, we can (hopefully/potentially) (1) lower our acknowledgment latency, and (2) double our throughput in those rare heavy sequential write scenarios. (I say rare, because my system is supporting virtualization and not copying large media files)
So, in an instance where one of the pools is not real busy, the other pool gets the benefit of using two devices to absorb LOG IO if I stripe them, rather than each of them having their own device, and one pool's unused SLOG can't benefit the other.
Overall fun part:
The rub is when both pools are busy and they are both throwing writes at the shared SLOG. This is ultimately what I'm interested in. I want to know/quantify if both pools sharing a set of striped SSDs introduces more latency than if it was a single SSD, and if so (which I'd bet it does by the way), by how much? What percent increase of latency is there? And, what percent of the time? Does the benefit of having stripped LOG devices with more throughput out weigh the latency introduced when/if both pools are busy? How often is that? All of this is workload/system/configuration specific, and that's why I want to test it on our lab scenario under actual loads, not synthetic tests. Exciting!
(Please answer my questions about getting the commands right before you post opinions on the overall concept, thanks!!)
I'm looking for proper command for adding a LOG partition to a pool by partition rather than the whole device.
This post (https://forums.freenas.org/index.php?threads/bad-performance-with-mirrored-ssds-as-slog.18262/) shows the proper way to create a single partition and add an underprovisioned LOG device, but I want to be sure I'm going to do this right for adding two partitions to the devices, then adding them to the pools correctly.
What do I want to do?
I want to take two S3700s, create two partitions on each, and add them as striped log devices for two pools, essentially allowing the pools to spread the writes across both devices instead of a single device for each pool. Wait until below to start arguing this :)
Code:
gpart create -s GPT daXX gpart add -t freebsd -a 4k -s 8G daXX (for 8G SLOG) zpool add pool log daXXp1
I still can't figure out how to do this correctly for two same size partitions on the same device.
After I create to two partitions (the part I can't figure out), I think I need to do a:
Code:
zpool add pool1 log mirror daX1p1 dax2p1 (to the first pool) zpool add pool2 log mirror daX1p2 dax2p2 (to the second pool)
Wait, But why?
I have read a good amount of posts where people try to share a single SSD for cache and log. That's not what I'm trying to do here, the devices are still going to be dedicated to logs. I'm going to have two devices dedicated to LOG, just for two pools.
The arguments against (from my always growing knowledge base):
The whole point of having faster and faster devices for SLOG devices (in SYNC scenarios) is to get that acknowledgement back to the OS while the system is getting stuff (groups) written down to the pool, and the device has to be reliable (talks about not using inappropriate SSDs https://forums.freenas.org/index.php?threads/correct-way-to-remove-slog.43401/) in case of power loss right? So, overall, we want no latency.
Sharing a device for another purpose other than being a log device would/could slow that down, or cause competing IO that would potentially slow down that acknowledgement, right? If that was the case, we'd see the result of competing IO on the SLOG device in terms of higher latency by the initiator, correct? (I'm betting so)
The arguments for:
If given the opportunity to spread LOG IO across multiple devices, we can (hopefully/potentially) (1) lower our acknowledgment latency, and (2) double our throughput in those rare heavy sequential write scenarios. (I say rare, because my system is supporting virtualization and not copying large media files)
So, in an instance where one of the pools is not real busy, the other pool gets the benefit of using two devices to absorb LOG IO if I stripe them, rather than each of them having their own device, and one pool's unused SLOG can't benefit the other.
Overall fun part:
The rub is when both pools are busy and they are both throwing writes at the shared SLOG. This is ultimately what I'm interested in. I want to know/quantify if both pools sharing a set of striped SSDs introduces more latency than if it was a single SSD, and if so (which I'd bet it does by the way), by how much? What percent increase of latency is there? And, what percent of the time? Does the benefit of having stripped LOG devices with more throughput out weigh the latency introduced when/if both pools are busy? How often is that? All of this is workload/system/configuration specific, and that's why I want to test it on our lab scenario under actual loads, not synthetic tests. Exciting!
(Please answer my questions about getting the commands right before you post opinions on the overall concept, thanks!!)
Last edited by a moderator: