Is there a reason why you elected a LIN based job over a regular job? A LIN based job will sequentially process every LIN on the cluster where-as a non-LIN based job will look for data that will need to be balanced. AutoBalance has multiple stages that seem to repeat themselves; it will do most of the heavy lifting initially and go back and do a more granular balance after that. AutoBalance can take a long time. I've seen clusters that have taken days to a week to complete a balance but that was also in-production and competing with client I/O.
When adding a node to a cluster, you do want AutoBalance to run otherwise the cluster will target writes to the drives with the lesser number of inodes, in this case the new node, so that will be bombarded with writes. What I've done in the past is setup specific schedules where AutoBalance will run at a medium impact at night, low impact during the day, and pause to let other jobs, such as SnapshotDelete, run.
As others have said, performance will also be impacted by how busy the other drives are but also by how full each drive is, what type of operations are hitting it, and whether you have SSDs. Typically, you can calculate the number of IOPS a SATA drive can handle with:
( 1 second / 5 ms seek) * 1000
So that gives us:
(1 / 5) *
1000 = 200
Why use a 5ms seek in this calculation? Simply because the cluster does write-leveling across all drives so there would be no reason that a drive needs to do a full sweep of the platter until the drive is full. That calculation is based on the best-case scenario but if you're running drives at >80% capacity then using the manufacturer full seek time gives you more of the worse-case scenario:
(1 / 8.3) *
1000 = 120
Most of the time you would just multiple the resulting IOPS by the number of SATA disks you have, but there are a few things to take into consideration:
1) Each node can access a maximum of 8 drives simultaneously, at any given moment, which is due to the storage controller. Generally this is not a problem considering writes are distributed amongst nodes in the cluster and typically one block goes to one disk pool and each node can have multiple disk pools so writes will be distributed quite well.
2) Writes operations are always prioritized over read operations.
3) If there are no SSDs then metadata reads and writes will go directly to the spindles. Because the I/O scheduler can't distinguish between a data block and metadata block, it just sees a read or write so refer to #2.
4) If there are SSDs, metadata read acceleration is usually enabled by default which leaves metadata writes hitting the spindles.
5) Snapshots and Sync jobs are very metadata intensive, so is having large quantities of snapshots on a single path or nested snapshots.
6) Client I/O will hurt the speed in which data is balanced. Keep in mind that one client write operation does not mean one filesystem write. For one client write there will be a block write, multiple parity blocks, metadata write, and metadata parity writes.
...and so forth.
So when running AutoBalance, data isn't just copied over and away you go -- data does get moved over but the protection blocks also get moved so a node that a data block is being read from may also be writing parity blocks, to a different disk pool, on the same node.
Also keep in mind that when running 'isi statistics ...' commands, they are averages of data over given periods of time and should always be looked at as a guide and not gospel. Try not to look at the percentage of busy as that is going to be dependent on a lot of factors and generally not accurate. With the industry standard calculations I've provided and a consideration of what is happening on the cluster, and its configuration, you can more accurately look at the output of (remove the pipe to head if you want to see them ALL):
isi statistics drive --nodes=all --type=sata --orderby=opsin | head -n 20
isi statistics drive --nodes=all --type=sata --orderby=opsout | head -n 20
The moral of the story is that all good things come to those who wait. Unfortunately, AutoBalance is one of the longer running jobs but the end result is worth it. You may want to create custom schedules for the job to run at differing priorities. Also, the job estimate of time remaining can fluctuate significantly. If there is competing I/O for the particular LIN it is working on, or if it has to traverse a large number of snapshots, progress will also be slowed down.
There have also been instances where AutoBalance is working on a LIN that is part of a snapshot and once that snapshot is removed, while AutoBalance is trying to work on it, then the job could stall on a particular LIN. That's when support would look for busy vnodes associated with the job engine while AutoBalance is trying to run. Another benefit to running AutoBalance instead of AutoBalanceLIN is that non-LIN based jobs support checkpoint files so the job wouldn't have to start over from the absolute beginning (unless there was a significant change). Metadata acceleration would greatly improve the performance of AutoBalance trying to determine what LINs need to be worked on as well.
Just some food for thought.
--Jamie Ivanov