Welcome to TechNet Blogs Sign in | Join | Help

Hello all, Shipra here with a brief discussion of the various tools available to remotely shut down a system, and which is appropriate to use under which circumstances.

The first is Shutdown.exe, which originally shipped with the Windows 2000 Resource Kit. This is a good all-purpose tool for controlling machine shutdowns and reboots. However, it is not really capable of intelligently handling multi-user logons, so on a terminal server for instance, it will blindly reboot the server when you tell it to without warning to the terminal server users. This could cause possible data loss for the users if they have not recently saved their data. This tool is only available on the Windows 2000 Server Resource Kit, and not available for download, largely due to being superseded by our newer tool, which is…

Tsshutdn.exe, designed with terminal servers in mind, but works fine with other roles too. This tool uses functionality that makes it aware of multiple users and sessions, and will notify said users that the machine is being rebooted. This is of course invaluable in a terminal server environment and much preferable to blindly shutting down without regard to users. Using Tsshutdn.exe, the users get notified that the shutdown is coming, as well as prompted to save data within open applications. The basic syntax is:

Tsshutdn wait_time [ /server:server_name] /reboot /powerdown /delay:log_off_delay /v

You can use the following parameters with the Tsshutdn command:

· wait_time: Use this parameter to specify the time period to wait (after users are notified) after which users are logged off from their sessions. The default setting is 60 seconds.

· /server:server_name: Use this parameter to specify the Terminal server that you want to shut down. If you omit this parameter, the current Terminal server is shut down.

· /reboot: Use this parameter to shut down and restart the Terminal server after client sessions are ended.

· /powerdown: Use this parameter to turn off the Terminal server (if the computer supports Advanced Power Management).

· /delay:log_off_delay: Use this parameter to specify the time period to wait (after users are logged off from their sessions) after which all processes end and the Terminal server shuts down. The default setting is 30 seconds.

· /v: Use this parameter to display information about the actions that are performed if you run this command

The third helpful utility is called Psshutdown.exe, from Sysinternals. This tool is similar to Tsshutdn.exe with the added functionality of being able to logoff a specific user, abort an imminent shutdown, lock or even hibernate the computer. More info on this tool and its capabilities is available on the Sysinternals website.

These tools all function in slightly different ways, so there may be no one-size-fits-all solution for your shutdown needs. I have seen cases where a non-terminal server was being rebooted using Shutdown.exe, but would not shut down properly. By switching to Tsshutdn.exe, everything worked as expected.

Thanks for your time, and I hope this information has been of help to you.

Shipra

Share this post :


Previously, my colleague Jeff demonstrated the power of Scriptomatic 2.0. To recap, Scriptomatic is a tool that helps you write scripts to query WMI classes and gather management information.

Today we introduce to you the WMI Code Creator tool, similar to Scriptomatic but even more powerful!

This is a great tool for beginners to quickly learn and create WMI management scripts.

While the main utility of Scriptomatic was to query WMI for values/data, WMI Code Creator takes things to the next level. Some of the salient features of WMI Code Creator are:

  • Querying WMI namespaces
  • Executing Methods
  • Receiving Event Notification
  • Browse WMI names spaces

WMI Code Creator can create code that can be run on the Local Computer, Remote computer or a group of remote computers, based on what you choose from the Target Computer menu.

Another very useful and powerful feature is the ability to deliver the code in various languages – VB Script, VB .Net or C#. The Code Language menu allows you to choose.

Query for data from a WMI class tab:

This tab is very similar to Scriptomatic and provides the same level of functionality. It also provides you an option to search for possible property values without executing the script:

 

SumeshP - WMI Code Creator 01

 

Execute a Method:

The Execute a Method tab is a very powerful feature that is not found in Scriptomatic.

There are many executable methods across the various WMI classes.

Using methods, you can do things like creating a new process, adding a printer connection, setting the Default printer, install/uninstall/reinstall a product, shutdown/reboot the system, mounting/dismounting Drives and others. And the best part is you don’t need to know beforehand what methods are available.

WMI code creator displays the executable methods in each class and lets you select them from a drop down menu:

 

SumeshP - WMI Code Creator 02

 

You can specify the instances against which you can run and method parameters and wherever required before execution.

Receive an Event:

The third tab within the tool enables you to generate code to receive event notifications.

You can generate code to receive event notification for events like process creation, service start/stop, computer is shut down etc…

The drop down menu lists available event query conditions for each Event class:

 

SumeshP - WMI Code Creator 03

 

With a little manual modification, you can even modify the code to send you an email in case any of these events are triggered, otherwise by default you will get a notification on the console.

Browse the WMI name spaces:

The tool also allows you to browse through the available WMI namespaces and classes on the local computer to find their descriptions, properties, methods, and qualifiers:

 

SumeshP - WMI Code Creator 04

 

Overall this is an awesome tool to have for system administrators to learn scripting and WMI queries. For those who already know scripting, this tool should make life a lot simpler at the least!

WMI Code Creator v1.0 Download:

http://www.microsoft.com/downloads/details.aspx?FamilyID=2cc30a64-ea15-4661-8da4-55bbc145c30e&displaylang=en

Hope you enjoyed today’s post.

Sumesh P.

Share this post :



Today I would like to do a quick walkthrough of the VMMap tool from Windows Sysinternals.

This tool gives us a neat summary of a process’ virtual and physical memory usage. It shows a graphical summary as well as a detailed report of a given process’ memory usage pattern.

VMMap breaks down the memory usage to distinguish space used by file images loaded into the process address space, shared memory, memory used by mapped files, heap, stack, free space and more.

This is useful for one to easily understand where the process’ allocated virtual memory is being utilized.

The main window of VMMap looks like this:

Main interface

As soon as you open VMMap, you are prompted to choose the process you want to analyze.

Note: You must run this in elevated mode in Windows Vista and higher.

 Process Selection

If you want to view a previously saved report just click Cancel and open the saved report from the main window.

It also allows you to compare the two most recent snapshots and view the differences using the Show Changes option.

VMMap also has the following command line switches:

Command Line Switches

From a performance engineer’s perspective, most of the virtual memory usage questions are related to memory leak issues and are often resolved by the use of the Performance Monitor tool.

However, VMMap is useful in understanding where specifically allocated memory is utilized.

Another good use for this tool is determining the cause of virtual memory fragmentation. Memory fragmentation can cause cases where a memory allocation fails even though you have ample free space available in process’ address space.

In such cases you can look under the “Largest” column under “Free” memory type to find out the largest free block available. If your allocation is larger than the largest free block, your allocation will fail and the program may throw an “out of memory” error.

An example of this is Exchange virtual memory fragmentation, where you sometimes experience memory allocation failures even though you don’t appear to actually be out of memory.

While this tool may be more useful for developers to understand their programs memory usage patterns and tweak them better, we can have our share of VMMap too.

VMMap Download: http://technet.microsoft.com/hi-in/sysinternals/dd535533(en-us).aspx

Sumesh P.

Share this post :


Hello AskPerf! Blake here again with another informative AskPerf Blog post. Today we are going to take a brief look at some of the new features in Windows PowerShell 2.0. As you may or may not know, PowerShell 2.0 is now included in Windows 7 and Windows Server 2008 R2. As of October 2009, PowerShell 2.0 is available to download for Windows XP SP3, Windows 2003 SP2, Windows Vista-SP1, and Windows Server 2008 RTM.

Windows PowerShell 2.0 includes several significant features that extend its use, improve its usability, and allow you to control and manage Windows-based environments more easily and comprehensively. Windows PowerShell 2.0 is backward compatible: Cmdlets, providers, snap-ins, scripts, functions, and profiles that were designed for Windows PowerShell 1.0 work in Windows PowerShell 2.0 without changes.

So with that, let’s check out some of the new features:

Remoting - The PowerShell 2.0 install now includes WinRm 2.0 (Windows Remote Management),  which is our implementation of the WS-Management Protocol. WS-Management allows systems the ability to access and exchange management information across an IT infrastructure. This new ability allows you to run commands on one or more remote computers from a single computer that is also running Windows PowerShell. To configure PowerShell remoting, the following must be accomplished:

1. Start PowerShell as an administrator

2. Use the “Enable-PSRemoting” cmdlet. The “Enable-PSRemoting” cmdlet performs the following operations:

    • Runs the Set-WSManQuickConfig cmdlet, which performs the following tasks:
    • Starts the WinRM service.
    • Sets the startup type on the WinRM service to Automatic.
    • Creates a listener to accept requests on any IP address.
    • Enables a firewall exception for WS-Management communications.
    • Enables all registered Windows PowerShell session configurations to receive instructions from a remote computer.
    • Registers the "Microsoft.PowerShell" session configuration, if it is not already registered.
    • Registers the "Microsoft.PowerShell32" session configuration on 64-bit computers, if it is not already registered.
    • Removes the "Deny Everyone" setting from the security descriptor for all the registered session configurations.
    • Restarts the WinRM service to make the preceding changes effective.

New Cmdlets - PowerShell 2.0 introduces over 100 built-in cmdlets. These cmdlets allow you to do computer-related, event log, and performance counter management tasks, among others. To see a list of new cmdlets that support the remote –computername parameter, type in the following command at a PS > prompt:

Get-Command -CommandType cmdlet | Where-Object { $_.definition -match 'computername' } | Format-Wide -property name –AutoSize

To view a list of all included cmdlets, run the following command at the PS> prompt:

get-commands

Script Debugging - For all you debuggers out there, you can now set breakpoints on lines, columns, variables and commands, and then let you specify the action that occurs when the breakpoint is hit. To get help on Debugging your PowerShell scripts, type in the following command at a PS > prompt:

Help Set-PSDebug

PowerShell GUI - Looking for a PowerShell GUI? Well, now you have it with the PowerShell Integrated Scripting Environment (ISE). This new functionality enables you to run interactive commands and edit and debug scripts in a graphical environment. The main features include color-coded syntax, selective execution, graphical debugging, Unicode support, and context-sensitive help. To launch the PowerShell GUI, run PowerShell_ISE.exe.

Note: you must install the Windows PowerShell Integrated Scripting Environment feature to get the PowerShell GUI.

Background Jobs – PowerShell 2.0 now allows you to run commands or expressions asynchronously and “in the background” without interacting with the console. When you run a background job, the command prompt returns immediately, even if the command is still running. The get-command *-job command will give you a list of job cmdlets that you can use to schedule your jobs.

This is only a small listing of new features included in PowerShell 2.0. To get a complete list, checkout the links below or the about_Windows_PowerShell_2.0 help section included with PowerShell 2.0.

Sample Script – The following is an example PowerShell script (non-supported) that uses the Get-EventLog cmdlet to parse the event logs for pages printed on your Windows XP or 2003 Server:

PrintCount.PS1

#####################################################################################

##

##   .\PrintCount.ps1 1/1/2010 1/31/2010

##

##   Tested on WinXP/Windows 2003

##

##   PowerShell 2.0 download link can be installed from

##   http://technet.microsoft.com/en-us/scriptcenter/dd742419.aspx

#####################################################################################

$HelpSyntax=@"

SYNTAX: .\PrintCount.ps1 startDateTime [EndDateTime]

SAMPLE: To get pages printed in January 2010:

.\PrintCount.ps1 1/1/2010 2/1/2010

Note: Time is 12:00:00 AM

"@

If ($args.count -EQ 0)

{

write-host $HelpSyntax

}

Else

{

$StartDate = Get-date $args[0]

If ($args.count -EQ 1)

{

$EndDate = Get-date

}

Else

{

$EndDate = Get-date $args[1]

}

Write-host ""

Write-Host "Processing Print Event ID 10. From "

Write-host "$StartDate to $EndDate"

Write-host ""

get-eventlog -log system -source Print -after $StartDate -before $EndDate | where {$_.eventID -eq 10} |

Foreach-object -begin {Write-Host """==Printer=="",""==PagesPrinted=="""; $Total = 0;} `

{

$msg=[string] $_.Message;

$PrinterStart = $msg.indexof("was printed on") + 15;

$PrinterEnd = $msg.indexof("via port") - 1 ;

$PrinterLen = $PrinterEnd - $PrinterStart;

$Printer = $msg.substring($PrinterStart,$PrinterLen);

#Write-Host "Start=$PrinterStart End=$PrinterEnd Len= $PrinterLen"

$PagesPrintedStart = $PrinterStart = $msg.indexof("pages printed:") + 15;

$PagesPrintedLen = $msg.length - $PagesPrintedStart;

$PagesPrinted = $msg.substring($PagesPrintedStart,$PagesPrintedLen);

Write-Host """$Printer"",""$PagesPrinted"""

#Write-Host "Start=$PagesPrintedStart End=$PrinterEnd Len=$PagesPrintedLen"

$Total = $Total + [int] $PagesPrinted

};

Write-Host `n " __Total Pages printed: $Total" `n;

}

 

Additional Resources

· Getting Started with Windows PowerShell (v1.0)

· PowerShell Team Blog

· PowerShell 2.0 download (KB968929)

 

Until next time, happy Scripting!

Blake Morrison

 

Share this post :


Hello all, this is just a quick reminder that Windows 2000 and Windows XP Service Pack 2 are nearing end-of-support. This applies to both Windows 2000 Server and Windows 2000 Professional, as well as all editions of Windows XP with SP2.

On July 13th, 2010, these products will no longer be eligible for regular support and free access to security updates. April 13th, 2010 is end-of-support for Windows Vista RTM version.

More information can be found at the following web sites:

· Details about Microsoft Support Lifecycle can be found here: http://support.microsoft.com/lifecycle

· Windows 2000 End-of-Support Solution Center can be found here: http://support.microsoft.com/win2000

 

Thanks and have a good weekend,

Tim Newton

 

Share this post :


This is in continuation of the topic discussed by John Dickson in his blog post entitled Installing Windows Vista Print Drivers on Windows Server 2003 http://blogs.technet.com/askperf/archive/2008/09/19/installing-windows-vista-print-drivers-on-windows-server-2003.aspx

With advancing technology and increasing demand for resources, many enterprises are now opting for 64-bit operating systems on their servers. The OS on the client machines could be either 32-bit or 64-bit depending in the customer’s environment and requirements.

We are specifically dealing with Print server in this article. When we deploy a 64-bit print server which is to cater to 32-bit clients, usually the clients use the point and print functionality to connect to the desired print queue on the print server and drivers are mapped.

This requires the 64-bit print server to have 32-bit printer drivers installed.

Following are the steps to install 64-bit printer drivers on a 32-bit server. We will also discuss a common issue that we see during installation. (I’ll also be enumerating the steps implemented vice-versa i.e. Installing 64-bit printer drivers on a 32-bit server)

Note: File and Printer Sharing must be enabled.

Installing 64-bit printer drivers on a 32-bit server:

Local Method:

1. Go to the Printers and Faxes folder.

2. Go to the properties of the print queue for which you intend to add the x64 driver.

3. Go to the Sharing tab and choose Additional Drivers.

4. Choose x64 as the processor type and click OK.

5. When prompted, point to the location of the x64 driver.

This should install the additional x64 drivers required for the x64 clients to print through the x86 servers.

You can also perform the above steps remotely from another machine by connecting to the print server using the UNC path \\printservername and then browsing to the Printers and Faxes folder.

Another option is to install the driver remotely using the Add Driver wizard. To do this:

1. Logon to the 64-bit server with an Administrator account. This account has to have administrative privileges on the 32-bit print server as well.

2. Connect to the print server using the UNC path (Start -> Run -> \\32BitPrintServer)

3. You should see the Printers and Faxes folder. Open this folder

4. Go to File--> Server Properties -> Drivers tab and choose Add Driver. Using this option add the required driver by choosing the appropriate architecture type.

Note: When you add the driver directly it doesn’t check if the driver matches the existing x86 version. If it does not the clients may not be able to download the driver and print successfully. See the section on Issues for details.

A great scenario to use the remote install option is when you don’t have the OEM version of the x64 driver available or if you prefer to install the inbox drivers instead.

When you install remotely by connecting through UNC, it first looks for the driver in the local driver store. If available, it will install the driver without any further prompts. Only if an inbox driver is not available will it prompt for the driver location.

You can also take advantage of this method to install inbox 32-bit drivers, where the print server doesn’t have an inbox driver for the printer, but a later version of the OS has the required drivers inbuilt.

Installing 32 Bit printer drivers on a 64 Bit server:

· Login using a domain administrator account to a 32 bit machine.

· On any one of the clients machine running 32-bit OS

· Access the print server \\PrintserverName\Printers

· Open the printer required to add the 32-bit driver

· Go to properties -> Sharing Tab -> Additional drivers

· Check the box with appropriate architecture type.

In this case it is nothing but using the same steps as in the x64 driver scenario, but in this case the additional driver we will be adding will be a 32bit driver.

Common Issues seen while installing a 32-bit driver on a 64-bit server and vice versa.

1) Option to choose OS architecture i.e. x64 could be grayed out.

2) You may see the error ‘Driver is not installed.

3) You may see architecture incompatibility errors while trying to install drivers.

The x64 option could be grayed out or not visible if the OS on the print server doesn’t support or is not aware of the x64 architecture. A good example is Windows 2000 print servers where you cannot add an x64 driver.

The option is also grayed out in Windows Server 2003 RTM (without any Service Pack)

The ‘Driver is not installed’ error can occur if the additional driver you installed doesn’t match the existing driver in name and INF parameters.

These names need to be the same if the driver installation is to go through without errors.

An example of this is a recent case I was working where we needed to install a 32-bit driver for an already present (inbox) HP LaserJet 8150 PCL 5 x64 driver.

The obvious thing to do first was to obtain the 32-bit driver from the OEM website for installation. Upon looking for the HP LaserJet 8150 PCL 5 (32 bit) driver, we find that vendor gives us the option to download HP Universal Print Driver for Windows PCL 6. Hence we downloaded and tried installing it, but this failed.

The problem was that when we were using the inbox 64-bit driver to install the HP LaserJet 8150 PCL 6 driver, the actual driver is named “HP LaserJet 8150 Series PCL6”.

However, the HP LaserJet 8150 PCL 6 (32-bit driver) from the HP website is named “HP Universal Printing PCL 6”.

As you see, the names are different and hence the installation errors out. The same installation goes through successfully if we download the HP LaserJet PCL 6 32-bit driver from the website. This is because the driver is named “HP Universal Printing PCL 6”, which is the same name as the 64-bit driver.

I hope this helps to give you a better understanding of some of the nuances of print driver behavior on various types of servers.

Thank you very much for your time,

Aamer Shedam

Share this post :


There often arises a need to figure out what may have changed on a system, either due to a specific issue or even to compare the difference between two systems. Today I would like to introduce you to the Windows System State Analyzer utility. Unless you are a developer or tester, you probably have never heard of this tool, as it is part of the Windows 2008 R2 Logo Software Certification and Windows 2008 R2 Logo Program Software Certification toolkits.

The basic functionality of the System State Analyzer tool is to allow you to compare two snapshots taken at different points in time. This allows you to compare the state of a machine both before and after an application install for instance. Today I will give you a run-through of what the tool looks like while doing a compare of a system both before and after installing a software package, in this case Virtual PC 2007. The initial UI will look something like this:

image

As you can see, the interface is divided into two panes, each of which is for a separate snapshot that you wish to compare. You start by naming the first snapshot. By default, you are given several default name instances such as Post Install, Pre Configuration or Custom.

The Tools – Options menu is where you can choose what you wish to include in the snapshot for comparison. You can compare drives, registry keys, services or drivers.

image

Once you click OK and come back to the main window, you are all set to begin the first baseline snapshot. This snapshot may take some time to complete depending on which options you have chosen and the amount of data on the drives. By default, it creates a snapshot as a .BIN file under C:\Users\Public\Documents.

Once the first snapshot was done, I installed Virtual PC 2007 and let it complete. This time, I choose the section on the right side, named it Post Install and took the second snapshot. Once this is done, I clicked Compare and the comparison was done. It gave me the option to view the Detailed Report, which is saved as an .HTML file. For now, let’s take a look at the Quick Comparison tab:

image

Looking at the Services section, we can see service state changes as well as any new services that might have been added during the installation. The drivers section looks like this:

image

As you can see, two new drivers were added to the system as part of the Virtual PC 2007 install. Likewise, the Registry section shows any registry changes made between the snapshots:

image

And the Files section also:

image

Below is a quick peek at the Detailed Report; you can see the change summary and details filtered based on file extension and various other file properties:

image

I am sure you can imagine scenarios in which this tool may come in handy. If anything undesirable happens after any system state change, you now have the ability to see what may be related to your issue. You can download the tool at the following locations:

· Server Logo Program Software Certification Tool x86: http://go.microsoft.com/fwlink/?LinkID=140110

· Server Logo Program Software Certification Tool x64: http://go.microsoft.com/fwlink/?LinkID=140109

Note: You must have the .NET Framework 2.0 installed for Windows System State Analyzer to work correctly.

I hope this information comes in handy, and thank you for your time.

Sumesh P.

Share this post :


The Remote Desktop Services (Terminal Services) Team Blog has posted an interesting write-up pertaining to Virtual Desktop Pool; check it out:

 http://blogs.msdn.com/rds/archive/2010/01/04/virtual-desktop-pool.aspx

Tim Newton

 

Share this post :


 

Hello all, happy New Year and welcome back from the holidays.

I recently worked a case involving intermittent COM+ corruption, and resetting security permissions would alleviate the issue for a period of several weeks. As I am sure you can imagine, this makes troubleshooting root cause very difficult. In cases like this where a relatively easy workaround is available, there is often pressure from above to implement the workaround and release the system back into production without root cause being determined.

For issues such as this, the Disk2VHD tool from Sysinternals may come in handy.  Simply create a virtual image of your physical server using Disk2VHD, then load the VHD under Microsoft Virtual PC or a Windows 2008 Hyper-V server.  With undo disks or snapshots enabled, you can reproduce the issue as many times as needed until root cause is determined.  At the same time, your production server can remain active while you troubleshoot it’s twin in a virtual environment.

A useful feature of the tool is that the target machine need not be offline when you are creating a VHD; in fact you may run this tool on the problem system itself, and though not recommended you may also write the VHD to a local disk that you are backing up. The tool is very simple to use and creates separate VHDs for different drives. All you need to do is select the drives you would like to be converted. I am including a snapshot below.

 

clip_image002

 

The VHDs are created in Microsoft’s Virtual Machine disk format and can be used in Microsoft Virtual PC or Microsoft Hyper-V virtual machines.

We also have the option to enable creation of VHD’s via scripts. The following command line may be used for this. Specify the volumes you want included in a snapshot by drive letter (e.g. c:) or use "*" to include all volumes.

Usage: disk2vhd <[drive: [drive:]...]|[*]> <vhdfile>

Example: disk2vhd * c:\vhd\snapshot.vhd

Here are some recommendations and known issues that you may run into while using Disk2Vhd:

1. It is not recommended to attach a VHD to the same system from which it has been created. If you do so, the operating system assigns a new disk signature to this disk to avoid collision and Windows will fail to locate the boot disk.

2. On Microsoft Virtual PC, be aware that virtual disks sized greater than 127GB are not recognized regardless of the amount of data.

3. Virtual PC also does not support multiple processors.

4. There was a known issue with the initial version of Disk2VHD that sometimes caused Windows XP and Windows Server 2003 to not boot. To mitigate this, be sure to use the latest version.

So, thanks for your time and I hope you find this information helpful.

Paras Pant

Share this post :


The end of the year is upon us.  It seems as though 2009 went by in a blur.  It has definitely been a busy year for us though - and not just on the Performance team.  We've had some tremendous product launches across Microsoft as a whole in 2009 including:

  • Windows 7
  • Windows 2008 R2
  • Zune HD
  • Halo ODST (Xbox 360)
  • Bing.com
  • Exchange 2010

clip_image002

December is also a special month for the AskPerf blog.  December 23 marks AskPerf blog's first anniversary.  When we started with our first post, Troubleshooting those Pesky 2019 and 2020 errors!, two years ago, we didn't really know what to expect.  In our second year, we delve deeper into our core technologies, continued with our Two Minute Drill posts, and created a 21 day Launch Series on the new features included in Windows7 / Windows Server 2008 R2.  Thank you to everyone who has read the articles, posted comments, replied to comments or provided direct feedback to us.

2010 promises to be just as busy with the launches of Microsoft Office 2010, SharePoint 2010, & DPM 2010. One thing is for sure - we will definitely have lots to blog about next year!  However, as far as 2009 is concerned, this is our last post of the year.  We're all taking a little time off to recharge and get ready for 2010.  So from all of us here on the EPS Performance Team - HAPPY HOLIDAYS - SEE YOU IN 2010!

clip_image004

Assuming you have read the last post, you are now aware that CC is moving on to greener pastures, or at least a different pasture in the same building. I will be doing my best to take up the reins of the blog and continue to deliver helpful content to the members of the AskPerf community. You may notice that this blog is a bit different than many. We don’t typically talk about what is going on with our day to day lives, nor link to other blog’s content just for the sake of filling space. We try our best to make our posts helpful to our readers, and dare I say educational. All of our posts, theoretically at least, should teach you how we troubleshoot, how to debug an issue or describe a useful tool or feature. And as always, we welcome feedback and requests for content; we don’t know what you want to see unless you tell us.

So, a bit about me:

I started at Microsoft in early 1997 doing pretty basic technical support for Windows 95 and believe it or not Windows 3.1. Early on I realized I had a bit more ambition than that, so I requested Windows NT 4.0 training so I could do something a little more challenging. Fast forward just a few years, and I had experienced time on the escalation team, web based tech support and several betas (Windows 98, ME, 2000 and XP.) After working on Windows XP until it launched, I came back to the world of tech support and joined the Performance Team, and been here ever since. I must say that I have learned more in the last 13 (almost) years that I ever thought I was capable of, and am very grateful for the opportunity.

Most recently, I have been the lead for several technologies supported by the Performance Team, including application compatibility, services, COM\DCOM, shell, Task Scheduler and WMI. This has allowed me to be involved in various aspects of training and knowledge transfer, and most importantly in this context, this blog. I have had the privilege to have written the infamous Demystifying /3GB and Dude, Where’s my RAM?? posts among a few others. I have not previously had quite enough bandwidth to create as much blog content as I would like, but that will soon be changing with my new role.

As CC said in his farewell post, I too would like to thank all the engineers that have been involved with the blog and of course all of you for faithfully following AskPerf as it has evolved over the last few years. I hope the transition will be seamless, and I certainly hope I can continue to deliver the great content that CC has been so diligent in providing. And just as a heads up, due to many people being off work this month, including me, we will be taking a short hiatus for the rest of the month. Till next time..

 Untitled-1

 

Share this post :


From everyone here on the Performance team - Happy Thanksgiving!XJYEX78Z6WAT

Happy Friday AskPerf!  I'm sure you've already surmised by the title of the post that today's topic is a somewhat bittersweet one.  XE3E9MT8HW5V

It is said that all good things must come to an end.  In that same vein, the one constant about working at Microsoft is that change is inevitable.  Over the last three (well, almost three!) years, it has been my privilege and honor to administer and write content for the AskPerf blog.  I have had a tremendous amount of fun doing it, and I’ve learned a great deal.  One of the things I have particularly enjoyed is watching the comments section related to some of our posts take on a life of their own and become truly discussion-oriented.  Nothing about AskPerf has been more special than watching the AskPerf community engage in open, honest and respectful debate and also being supportive of one another when requests for assistance are made.  This is a very special group of readers.  However, it is time for me to say farewell to AskPerf.

I have recently accepted a position as a Program Manager within our Product Quality and Online group.  Specifically, I will be working within the Software+Services space.  The oppportunity to step into a new technical arena in this role is exciting for me - both personally and professionally.  And so, it is time to turn the keys to AskPerf over to someone else to keep the blog going strong.  That someone is Tim Newton (of Demystifying /3GB fame among others).  Tim has authored several articles since the launch of AskPerf.  In March 2008, Tim stepped up to take on the responsibility of being a co-owner of the blog.  The transition, therefore, should be virtually seamless.

I will continue to follow AskPerf with great interest, but it’s the time has come for me to turn the reins over to Tim.  I am going to step back from work-related blogging for a little while as I get ramped up in my new role.  I haven't really worked on any blogging for myself over the last few years, so I will also be working on getting my personal blog kicked off over the course of the next few weeks, and also helping my daughter get started on her own blog.

Believe me when I say that the AskPerf blog is a huge group effort!  I owe an enormous debt of gratitude to all of the people on the Performance team who have contributed articles and ideas, spent countless hours doing research and problem reproduction, as well as proofreading and editing post submissions.  Without their tireless efforts we would not have been able to generate the amount of content we have - especially for our two Launch Series on Windows Server 2008 and Windows 7 / Windows Server 2008 R2.  I also would like to extend my deepest thanks to the many folks in other parts of Microsoft Commerical Technical Support, as well as all our friends in the Product Group, Premier Field Engineering, Global Escalation Services, Product Quality and Online and of course the many Technical Account Managers who have been absolutely amazing in terms of offering guidance, feedback and support.

Last, but my no means least in any way I would like to thank YOU – the AskPerf readers.  Your constant support and candid feedback has been invaluable over the last (almost) 3 years. Without you, there’s no way we would be where we are today.  I wish each of you the very best and look forward to our paths crossing again in the future.

THANK YOU!!

CC_Goodbye



Good morning folks!  Sorry that today’s post is a little later than usual.  We’ve been tracking an issue related to Microsoft Security Bulletin MS09-065 (KB Article 969947) on Windows XP.  You may notice odd behavior including system hangs, bugchecks or even blank desktops during RDP sessions following the installation of this patch.  Customers have reported that removing the patch restores system stability.  The fix for this issue is fairly straightforward:

  • Reboot the system into safe mode
  • From within Add/Remove Programs, uninstall the patch.  The patch will be listed as Security Update for Windows XP (KB969947)
  • Restart the system in normal mode

At this point, the steps within the KB Article indicate that you should remove your video card drivers / management suite and then re-install the patch before updating your video drivers to the latest version provided by the manufacturer.  There have been some customers who have updated the video card drivers first and then re-applied the patch successfully.  In either case, the key is to ensure that you get your video card drivers updated to avoid stability issues with this patch.

That’s all for today – a short post, but one that we wanted to get out there since we are seeing quite a few customer incidents on this.  Friday’s post will be … something different.  Until next time …

- CC Hameed

Share this post :


Happy Friday AskPerf!  We’ve had a few questions in the past about guidelines for application design in a faster computing environment.  Now, I make absolutely no claims whatsoever to being any sort of a code guru, and so I wasn’t about to try to pass myself off as an expert in that area!  Thankfully, after doing some research, it turns out that a fellow Microsoft Blogger (Rick Vacik) has already done so!

Below are some excerpts from Rick’s three-part series on Designing Applications for High Performance.


Designing Applications for High Performance – Part I: Now that processors won’t be getting dramatically faster each year, application developers must learn how to design their applications for scalability and efficiency on multiple processor systems.  I have spent the last 20 years in SQL Server development and the Windows Server Performance Group looking into multi-processor performance and scalability problems.  Over the years, I have encountered a number of recurring patterns that I would like to get designers to avoid.  In this three part series, I will go over these inefficiencies and provide suggestions to avoid them in order to improve application scalability and efficiency.  The guidelines are oriented towards server applications, but the basic principles apply to all applications.

Designing Applications for High Performance – Part II: The second part of this series covers Data Structures and Locks.  I will provide general guidance on which data structures to use under certain circumstances and how to use locks without having a negative impact on performance.  Finally, there will be examples covering common problems/solutions and a simple cookbook detailing functional requirements and recommendations when using data structures and locks.

Designing Applications for High Performance – Part III: The third, and final, part of this series covers I/O Completions and Memory Management techniques.  I will go through the different ways to handle I/O completions with some recommendations and optimizations introduced in Vista and later releases of Windows.  I will also cover tradeoffs associated with designing single and multiple process applications.  Finally, I will go through memory fragmentation, heap management, and provide a list of the new and expanded NUMA topology APIs.


Enjoy your weekend everyone!  Until next time …

- CC Hameed

Share this post :


More Posts Next page »
 
Page view tracker