OSEC

Neohapsis is currently accepting applications for employment. For more information, please visit our website www.neohapsis.com or email hr@neohapsis.com
 
From: Charles Gamble (Charles.GambleSINGULARITY.CO.UK)
Date: Thu Oct 04 2001 - 11:26:01 CDT

  • Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]

    Hi Steve,

    The reason we started running this test was because we had noticed a huge
    performance drop for our product when it was used on Windows2000/COM+.
    We found that without changing the architecture of our system, there was a
    2.5 times drop in performance between MTS and COM+.
    The test mimics our architecture except without the DB work, etc. which the
    methods calls perform. Note, our system in written in C++ and does database
    access using ODBC.
    SQL Server is the DBMS. Object1 is a controller DLL, Object2 is used to
    create transactions where necessary, Objects 3 and 4 are business objects.

    The fact that you may need to setup Object3 and Object4 into an
    un-configured library application to get closer to the same performance as
    NT seems to suggest that you cannot use the same architecture in COM+ as MTS
    and expect the same performance. In fact, most suggestions that I have heard
    so far seem to suggest removing the number of configured components in your
    app. According to Tim Ewalds book, Transactional COM+, he states that using
    library apps will get improvements in performance but this is basically
    setting them up as raw COM objects albeit they can exist in the callers
    context. Surely, this is the whole point of MTS/COM+, in that, you can
    configure all your components and let everything be taken care of
    (synchronisation, transactions, etc.) for you.

    We ran that test using your script on the library package and I got a 200
    millisecond speed increase. The COMTIInstrinsics and IISInsrincsics settings
    seem to bring the performance gain. So now its 1360 milliseconds in COM+
    compared to 631 milliseconds on NT.

    Charles.

    -----Original Message-----
    From: Steve Swartz [mailto:steveswMICROSOFT.COM]
    Sent: 04 October 2001 16:25
    To: DCOMDISCUSS.MICROSOFT.COM
    Subject: Re: FW: COM+ and Free Threading

    What I said was, there is no evidence that the performance degradation
    you're seeing is due to changes in the cost of cross-context calls
    between NT/MTS and W2K/COM+. I am not arguing about the existence of the
    symptoms, just Tim's analysis of their cause.

    It is true that there are locks involved in fetching cached policy sets
    from the OS, and as you warp a benchmark test towards doing nothing but
    cross-context calls (as you've done here), you can run into lock
    contention problems that do not exist in normal applications (when the
    machine spends less time as a percentage of total load in the policy set
    code). So an example like yours can exhibit behavior that does not
    characterize normal runtime situations.

    But this is beside the point. Did you run the script I sent yesterday on
    the library application containing object3 and object4?

    -----Original Message-----
    From: Charles Gamble [mailto:Charles.GambleSINGULARITY.CO.UK]
    Sent: Thursday, October 04, 2001 1:36 AM
    To: DCOMDISCUSS.MICROSOFT.COM
    Subject: Re: FW: COM+ and Free Threading

    Steve,

    I'm afraid I have to disagree with your point that Tim Ewald's analysis
    is completely unsubstantiated. When I run the test which I previously
    mentioned we are getting a significant performance decrease.
    Please let me know when you have run this test with the code I
    sent you.
    If anyone wants this code, then just send me a direct email.
    Note, the test only consists of 4 objects and a client app which call
    each other. The methods don't do any work and have no parameters.
    The objects are set to NoTx, RequiresTx, SupportsTx, SupportsTx
    There is a huge drop in perf between NT and Win2000.

    Charles.

    -----Original Message-----
    From: Steve Swartz [mailto:steveswMICROSOFT.COM]
    Sent: 03 October 2001 19:03
    To: DCOMDISCUSS.MICROSOFT.COM
    Subject: Re: FW: COM+ and Free Threading

    It may be that you're running into the old "it's hard and/or impossible
    to truly turn off all services and make components run in the caller's
    context" problem. To see if that's so, store the following VBS into a
    file named noctx.vbs and then run the command "noctx.vbs ALL
    <APPLICATION NAME>" on the library application containing object3 and
    object4. This eliminates some services you might not even know about ;).
    Often this is what people are seeing when they say "there's context
    overhead in Windows 2000". They're comparing within-context calls in
    NT/MTS to cross-context calls in W2K/COM+.

    So far as I know, Tim Ewald's analysis is completely unsubstantiated. I
    have never seen evidence of even appreciable degradation of performance
    between NT/MTS and W2K/COM+ due to cross-context call performance, let
    alone the substantial degradation that you're seeing.

    <%

    Dim objArgs
    Set objArgs = WScript.Arguments

    SetApplicationProperty objArgs(1), "Base Application Partition",
    "Activation", 0 SetApplicationProperty objArgs(1), "Base Application
    Partition", "AccessChecksLevel", 0

    SetComponentProperty objArgs(0), objArgs(1), "Base Application
    Partition", "COMTIIntrinsics", 0 SetComponentProperty objArgs(0),
    objArgs(1), "Base Application Partition", "IISIntrinsics", 0
    SetComponentProperty objArgs(0), objArgs(1), "Base Application
    Partition", "JustInTimeActivation", 0 SetComponentProperty objArgs(0),
    objArgs(1), "Base Application Partition",
    "ComponentAccessChecksEnabled", 0 SetComponentProperty objArgs(0),
    objArgs(1), "Base Application Partition", "Synchronization", 0
    SetComponentProperty objArgs(0), objArgs(1), "Base Application
    Partition", "Transaction", 0 SetComponentProperty objArgs(0),
    objArgs(1), "Base Application Partition", "EventTrackingEnabled", 0
    SetComponentProperty objArgs(0), objArgs(1), "Base Application
    Partition", "MustRunInClientContext", 1

    '***********************************************************************
    *******
    ' Modifies a property value on an application
    '***********************************************************************
    *******
    Sub SetApplicationProperty (ApplicationName, PartitionName,
    PropertyName, PropertyValue)

            Set cat = CreateObject("COMAdmin.COMAdminCatalog.1")

            'cat.CurrentPartition = PartitionName
            Set collApps = cat.GetCollection("Applications")

            collApps.Populate

            numApps = collApps.Count
            For i = numApps - 1 To 0 Step -1
                If collApps.Item(i).Value("Name") = ApplicationName Then
                    collApps.Item(i).Value(PropertyName) = PropertyValue
                End If
            Next

            collApps.SaveChanges

            Set collApps = Nothing
            Set cat = Nothing

    End Sub

    '***********************************************************************
    *******
    ' Set a component property
    '***********************************************************************
    *******
    Sub SetComponentProperty (ComponentID, ApplicationName, PartitionName,
    PropertyName, PropertyValue)

            Set cat = CreateObject("COMAdmin.COMAdminCatalog.1")

            'cat.CurrentPartition = PartitionName
            Set collApps = cat.GetCollection("Applications")

            collApps.Populate

            numApps = collApps.Count
            For i = numApps - 1 To 0 Step -1
                If collApps.Item(i).Value("Name") = ApplicationName Then

                            Set collComponents =
    collApps.GetCollection("Components", collApps.Item(i).Key)
                            collComponents.Populate

                            numComponents = collComponents.Count

                            For j = numComponents - 1 To 0 Step -1

                                'If collComponents.Item(j).Value("CLSID") =
    ComponentID Then

    collComponents.Item(j).Value(PropertyName) = PropertyValue
                                    'End If

                            Next

                            collComponents.SaveChanges

                End If
            Next

            collApps.SaveChanges

            Set collComponents = Nothing
            Set collApps = Nothing
            Set cat = Nothing

    End Sub

    %>

    ----------------------------------------------------------------
    Users Guide http://discuss.microsoft.com/archives/mailfaq.asp
    contains important info. Save time, search the archives at
    http://discuss.microsoft.com/archives/index.html .
    To unsubscribe, mailto:DCOM-signoff-requestDISCUSS.MICROSOFT.COM

    ----------------------------------------------------------------
    Users Guide http://discuss.microsoft.com/archives/mailfaq.asp
    contains important info. Save time, search the archives at
    http://discuss.microsoft.com/archives/index.html .
    To unsubscribe, mailto:DCOM-signoff-requestDISCUSS.MICROSOFT.COM

    ----------------------------------------------------------------
    Users Guide http://discuss.microsoft.com/archives/mailfaq.asp
    contains important info. Save time, search the archives at
    http://discuss.microsoft.com/archives/index.html .
    To unsubscribe, mailto:DCOM-signoff-requestDISCUSS.MICROSOFT.COM

    ----------------------------------------------------------------
    Users Guide http://discuss.microsoft.com/archives/mailfaq.asp
    contains important info. Save time, search the archives at
    http://discuss.microsoft.com/archives/index.html .
    To unsubscribe, mailto:DCOM-signoff-requestDISCUSS.MICROSOFT.COM