Forum Discussion
williambb_9960
Nimbostratus
Jul 28, 2009iControl Assembly Peformance
I'm just getting started on iControl using Visual Studio 2008, pretty cool but a co-worker is telling me iControl has serious performance issues when pulling large amounts of data (i.e., all vs, pools...
Jul 28, 2009
Thanks for posting this question, I love ones like this. B-).
I think "Serious Performance Issues" is a bit of an exaggeration. Compared to a binary protocol like CORBA, then, Yes, SOAP/Web Services are slower. But I wouldn't categorize it as a performance issue.
There is overhead for each SSL/HTTP request that is made. The iControl API's are designed as distinctive web services so each call will incur the overhead of establishing an SSL connection. We've designed the API's to enable "bulk" calling for multiple "like" objects per request. This way if you have 100 virtual servers, you can query the statistics for all 100 virtuals in a single call without incuring the tear-up/down of the SSL connection for each one.
So, it really depends on the number of calls you have to make along with the latency between your calling application and the target BIG-IP. It also partially depends on how busy your BIG-IP is. If it's running at or near capacity, then the calls will take a little longer to process as they get a lower priority in the system than the packet runtime.
I just requested the failover status on my BIG-IP using PowerShell through the iControl. NET assembly and the command took 0.026s.
PS C:\Users\Joe> Measure-Command {$ic.ManagementDBVariable.query( "failover.state" )}
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 25
Ticks : 255908
TotalDays : 2.96189814814815E-07
TotalHours : 7.10855555555556E-06
TotalMinutes : 0.000426513333333333
TotalSeconds : 0.0255908
TotalMilliseconds : 25.5908
I ran a loop calling it 100 times and it took 1.366 seconds, and 1000 calls taking 13.659s. Granted, that's on an idle BIG-IP so I wouldn't expect a production system to have those numbers.
Compare that to a single SNMP GET request:
PS C:\Users\Joe> Measure-Command { snmpget bigip .1.3.6.1.4.1.3375.2.1.1.1.1.1.0 }
Days : 0
Hours : 0
Minutes : 0
Seconds : 0
Milliseconds : 55
Ticks : 551203
TotalDays : 6.37966435185185E-07
TotalHours : 1.53111944444444E-05
TotalMinutes : 0.000918671666666667
TotalSeconds : 0.0551203
TotalMilliseconds : 55.1203
It's twice as fast as the SNMP request, so the API is actually pretty efficient.
I'd love to hear your use-case for the API and what your requirements are for polling. Also, if you get to where you need to optimize your code to reduce round-trips, please post away, I'd be glad to help.
-Joe
Recent Discussions
Related Content
DevCentral Quicklinks
* Getting Started on DevCentral
* Community Guidelines
* Community Terms of Use / EULA
* Community Ranking Explained
* Community Resources
* Contact the DevCentral Team
* Update MFA on account.f5.com
Discover DevCentral Connects
