340 likes | 555 Views
Maximizing COM+ Application Throughput Steve Swartz Program Manager COM+ Team Microsoft Corporation 1-402. Overview. Throughput: What and How COM+ Threading COM+ Process Pooling COM+ Synchronization COM+ Activation. Demo. Throughput. Throughput defined Throughput and infrastructure
E N D
Maximizing COM+ Application Throughput Steve SwartzProgram ManagerCOM+ TeamMicrosoft Corporation 1-402
Overview • Throughput: What and How • COM+ Threading • COM+ Process Pooling • COM+ Synchronization • COM+ Activation
Throughput • Throughput defined • Throughput and infrastructure • Throughput and scalability • Throughput and performance • Performance vs. scalability
Throughput and Resources • Maximizing throughput means using resources efficiently • Minimize create/destroy costs • Acquire late/release early • Avoid creating too many resources • Avoid waiting for resource • Avoid requiring particular resources • Avoid holding unused resources
Throughput and COM+ • COM+ services relevant to throughput: • Thread models & pools • Synchronization domains • Process pools • JIT and Object Pools
Costs to keep in mind • XProcess vs. XThread calls • Regular vs. context marshalling • Activations and calls • Cross-machine hops vs. localization
Overview • Throughput: What and How • COM+ Threading • COM+ Process Pooling • COM+ Synchronization • COM+ Activation
COM+ Threading Models • Apartments vs. threads • Single threaded apartments • Concurrency & reentrancy • Thread-local storage • STAs are a bottleneck • The multi-threaded apartment • The neutral apartment
COM Threads Process MTA Pool RPC Thread Pool (MTA) Main STA
COM+ Threads Process MTA Pool RPC Thread Pool (MTA) STA Pool Main STA
STA Pool vs. MTA Pool • STA pooled objects • Contend for a specific thread • Cannot take advantage of new threads • MTA pooled objects • Contend for all threads • Can take advantage of new threads
Example: STA Pool • What you have to change to use the STA Thread Pool:
Server App Hints • Server App==OutOfProc COM+ App • Stick to one thread model • Concentrate on parent objects • Avoid shared child objects • Neutral apartment for infrastructure objects
Library App Hints • Library App==InProc COM+ App • Behavior of caller matters • Are your object references shared? • Are you called from different kinds of apartments? • Specify known caller’s threading model • “Both” for single user/unknown caller • “Neutral” for many user
Overview • Throughput: What and How • COM+ Threading • COM+ Process Pooling • COM+ Synchronization • COM+ Activation
Process Pooling??? • Process pools can help throughput when you’ve got: • Single-threaded applications • Applications that serialize the processing of requests • Apps prone to server sized slowdowns or bottlenecks
Example: Process Pooling • What you have to change to use Process Pools:
Overview • Throughput: What and How • COM+ Threading • COM+ Process Pooling • COM+ Synchronization • COM+ Activation
STA Synchronization • Prevents concurrent access • Allows reentrancy (to avoid deadlocks) • Allows multiple copies (in different apartments) • A Throughput Bottleneck
COM+ Activities • Synchronization domains • Four levels of configuration • Requires New • Requires • Supports • Not supported • Cross-apartment, not out-of-proc
COM+ Synchronization • Prevents concurrent access • Allows reentrancy • Allows multiple copies • Can be used in MTA • Less of a throughput bottleneck
Example: Synchronization • What you have to change to use COM+ synchronization
Overview • Throughput: What and How • COM+ Threading • COM+ Process Pooling • COM+ Synchronization • COM+ Activation
Programming Models • COM+: Fewer longer-lived clients • IIS: Many transient clients • Focus on COM+ model, BUT… • … IIS is COM+’s longer-lived client
Optimizing COM+ Activation • JIT • Object Pooling • Recent TPC-C benchmarks
JIT • On Activation, Proxy/Stub created • Object created at first use • Object controls its own lifetime • JIT enables scalable programming model • JIT is not useful by itself
Object Pooling • Pool of stateful instantiations • Request/wait architecture • When should I pool objects • When create costs are relatively high • When use costs are relatively low • When an object will be reused often • Experiment! • Don’t pool objects with client-specific state
Object & Connection Pools • Object Pools are 2x faster • Object Pools are asynchronous • Object Pools handle min/max well • Object Pools handle more resources • Object Pools handle more resource types
JIT and Object Pooling • JIT caches COM infrastructure • Object pool caches state, objects • Together, they • Minimize overhead of starting work • Minimize size of resource caches • Maximize throughput
Example: JIT and Object Pooling • What you have to change to use JIT and Object Pooling: • Client does not call Release() • Server must call SetComplete() • Server must implement IObjectControl • Server must be thread-neutral • Server must enlist itself
Example: JIT and Object Pooling QueuedPoolofMTA Threads JITtedObjectsinObjectPool ISAPI SQLServer