One of the first questions to ask when investigating performance issues is “Which license server is the tool looking at?”
Very often, the answer is “It’s looking at the right server, but it’s checking it a number of times for each license”.
On Windows, Mentor tools typically look for licenses in five locations:
MGLS_LICENSE_FILE environment variable
MGLS_LICENSE_FILE registry value
LM_LICENSE_FILE environment variable
LM_LICENSE_FILE registry value
(On Linux / Unix only the environment variables are used.)
If your license server is listed in both the environment variables and both registry values – then the server can be checked four times for every license request!
Some tools check a number of licenses to determine what options are available, so if you do not have that license, you are getting the same “No license here” answer four times. (If a license server is listed multiple times in an environment variable – it can be checked even more often.)
Each license server only needs to be listed once. If a server is listed more than once, remove the duplicate entries.
The MGLS_LICENSE_FILE variable / registry value is only used by Mentor tools, whereas the LM_LICENSE_FILE settings are used by all tools that use FlexNet. (If you only want Mentor tools to check Mentor license servers, define the Mentor license server in MGLS_LICENSE_FILE, and set MGLS_LICENSE_SEARCH=1 to stop them checking LM_LICENSE_FILE.)
We've previously discussed how to get fairly detailed debug information with the MGLS_DEBUG_LOG_DIR variable - Tip of the Week: Check requested license feature with debug. But sometimes a quick confirmation of the license checkout can be nice to see in the transcript. And, if anything fails, an error message will be right there.
The FLEXLM_DIAGNOSTICS variable is a simple way to show some debug information. Simply set FLEXLM_DIAGNOSTICS=3 in your environment and you should see something like the following in the shell where you invoked the application:
Common Licensing Problems,Before you get started,Best Practices,Configuring Licensing,Installation,PADS Install and Licensing,Tip of the WeekTags:
This week we'll explore a couple of very useful commands that you can run in the DOS prompt (cmd.exe) -
This command lists all of the processes that are running in memory, similar to opening 'Task Manager' and navigating to the 'Processes' tab. For example:
Image Name PID Session Name Session# Mem Usage ========================= ======== ================ =========== ============ System Idle Process 0 Services 0 24 K System 4 Services 0 3,668 K smss.exe 284 Services 0 232 K csrss.exe 392 Services 0 2,248 K wininit.exe 452 Services 0 520 K csrss.exe 464 Console 1 128,664 K winlogon.exe 508 Console 1 2,508 K svchost.exe 876 Services 0 17,176 K svchost.exe 908 Services 0 130,312 K svchost.exe 956 Services 0 15,900 K svchost.exe 988 Services 0 63,404 K
Useful for finding content within files or filtering the output from another command (for example, from 'tasklist'!). For example, to find the string 'pcbexpedition' in any files in the current directory and all sub-directories:
We can combine both the 'tasklist' and 'findstr' commands as shown below. Here we're looking to see if the notepad.exe process is running, and as you can see it is! (the process ID (PID) is 16952 and memory usage is 6,204K)
When starting or troubleshooting a license server, it's handy to have a way to verify a license checkout without having to run an application. We have two utilities to help you do just that.
On Linux we use the mgls_ok utility. Most applications have the mgls_ok utility located within the application tree's bin directory. However, you may need to set the MGLS_HOME variable to the application tree or the mgls package within it. For a standalone licensing tree, set MGLS_HOME to the top level folder (e.g.: mgls_v9-7_2-3-0.ixl). You'll also need to copy the mgc.pkginfo file to the lib directory. You can download that here. Make sure your MGLS_LICENSE_FILE variable is set to your license file or license server (port@host).
Once you have the the MGLS_HOME and MGLS_LICENSE_FILE variables set and the mgc.pkginfo file copied, the command to check out a license feature is simple:
$ $MGLS_HOME/bin/mgls_ok msimhdlsim
Checking availability of "msimhdlsim".
License granted through "msimhdlsim".
On Windows, we use the pcls_ok utility which provides a GUI. With the licensing software installed, you can access the pcls_ok utility from the Start Menu> All Programs> Mentor Graphics Licensing> pcls_ok. You can also navigate to C:\MentorGraphics\Licensing or possibly find pcls_ok in your applications start menu or tree. Here's an example of the pcls_ok interface:
The nice thing about the pcls_ok interface is it shows you the value of MGLS_LICENSE_FILE, which makes it easy to verify and know where you're attempting to get licenses from.
To check out a feature, just pick one from your license file and type or paste it into the Feature: field. Then, click Apply. A successful checkout will look like this:
If the checkout fails, A dialog will appear with an error message.
If you get a licensing error from one of your applications, aside from ensuring licenses are available and searching SupportNet for the error message, you can use our Mentor License Utility (MLU) to generate a detailed diagnostic report that may help you or one of our CAEs determine the root cause.
Troubleshooting a variety of networking problems typically involves frequent use of the ping command, which can quickly tell you whether or not there is a route between hosts. But what if ping returns with zero packet loss yet you still have problems? Those TCP/IP packets often have to travel through routers or switches and those points can create problems. Fortunately, there's a very handy utility on Windows called pathping that will trace the route between hosts and give you some data on performance or potential bottlenecks. This can be very helpful in diagnosing network problems, especially those related to latency.
Here's an example of using pathping:
Tracing route to sliver.company.com[22.214.171.124]
On Windows you have the option to set an environment variable as a User variable or a System variable. A User variable takes precedence when the variable is set both as a User and System variable. Setting a System variable requires admin rights and will be available to anyone who logs into the system. User variables are only available to the user but are generally fine for desktop applications.
However, some applications either run as a service or have a component that runs as a service. In cases where the service requires a license (e.g.: Capital Manager), it is imperative that MGLS_LICENSE_FILE be set as a System variable so the service (running under the System user account) can obtain a license.
If you get errors when starting an application service, ensure that ALL required variables are set as System variables.
Mentor Standard Licensing v2013_2 is now available for download on SupportNet. This release contains a number of important benefits and key changes detailed below.
Reasons to update your license server:
Update from FlexNet v126.96.36.199 to v188.8.131.52. As applications that build with Mentor Standard Licensing (MSL) v2013_2 ship, they will require license servers running 184.108.40.206 or newer. It's advisable to update your license servers in advance of these product releases. You do not need to update anything if you are using Mobile Compute (uncounted) licenses.
Support added for AIX v6.1, Windows 8 and Windows Server 2012. Note: This applies to the licensing software only. For support information regarding specific product releases, please refer to the System Requirements on SupportNet.
Support added for Consistent Network Device Naming (em0, em1, p1s3, etc...) on Linux
Numerous defect fixes
Red Hat EL 4 and SuSe SLES 9 are no longer supported. MSL v2013_2 will not run on these platforms.
Support for some hardware keys (dongles) has been discontinued. If you are using a hardware key as your license server's hostid, you may need to request a replacement key. Please refer to http://supportnet.mentor.com/news/Discontinued-Legacy-HW-Keys.cfm for more information. As of MSL v2013_2, only the Aladdin USB FLEXid 9- key is supported. This is the teal-colored USB key.
Information about downloading MSL v2013_2 can be found in TechNote MG66951.*
Two weeks ago, my colleague posted a tip of the week about how to combine licenses from two software vendors into one license file. This week I will look at how to use two licenses from the same vendor - but created for different server IDs.
If you have two sets of licenses for one server, they can only be combined into one license file if the SERVER IDs are the same.
Only one instance of a vendor daemon (the Mentor daemon is "mgcld") can run on one machine.
This means that if you have two sets of licenses for the same daemon, but created for different IDs (for example a MacAddress and a Hardware Key) then:
They cannot be combined into one license file (because the server IDs are different).
You cannot run two servers (because only one "mgcld" can run at any time).
How to use both sets of licenses:
If your license server machine is running Windows, then by following the instructions below, you can use both sets of licenses. Note - this will not work for other operating systems. (The instructions below assume you already know how to set up a license server using lmtools.)
1) Create a folder to contain all the licenses, and save each license as a separate file with a .lic extension. For example:
SERVER put_server_name_here FLEXID=9-87654321 1717
DAEMON mgcld path_to_mgcld
INCREMENT padses_c mgcld 2013.090 30-sep-2013 ...
2) Edit the licenses so that they contain the name of your server, and the location of the vendor daemon. (The SERVER and DAEMON lines will be the same for each license, apart from the server ID which must not be changed.) So in the example above:
3) In the "Config Services" tab within "lmtools", in the box entitled "Path to the license file" - enter the folder name containing the licenses, instead of the path to a license file. So in the example above:
Path to the license file = C:\Licenses
4) Check "Use Services", and "Save Service" as usual, then start the server in the "Start/Stop/Reread" tab.
Your license server should now show that both sets of licenses are available.
If you are experiencing slow invocation times with one or more of your Mentor Graphics applications - here are some general tips and techniques, as well as application-specific options (for Expedition PCB and PADS Layout), that are available for use:
Check your licensing environment for any invalid or duplicate license server (port@host) references.
If you find any, remove them.
A quick and easy tool for editing your licensing environment is the Mentor License Utility:
Note: Before making any changes to the environment you can back-up your current settings via the 'File>Export Environment' menu-pick. To import previously saved settings navigate to 'File>Import Environment'.
2. Check your licensing environment for any license files containing un-edited lines starting with "SERVER put_server_name_here"
If you find any, AND your machine is NOT intended to be a license server:
Add a pound/hash character at the beginning of the line and also the line after it (starts with "DAEMON")
3. If you have any non-Mentor Graphics (mgcld daemon) license files or port@host references in your environment
Make sure all your Mentor Graphics (mgcld daemon) licenses and port@host references reside under the MGLS_LICENSE_FILE environment variable
If not, you can use the Mentor License Utility to move them
3b. If you have any non-Mentor Graphics (mgcld daemon) license files or port@host references set in the LM_LICENSE_FILE environment variable or registry entry
Set the MGLS_LICENSE_SEARCH environment variable to a value of 1. When set, Mentor Graphics licensing will ignore the LM_LICENSE_FILE values (and other vendor licenses) if it finds that the MGLS_LICENSE_FILE is set.
4. Use any application-specific license options/dialogs to reduce the number of licenses that get checked during the invocation
Two good example applications are Expedition PCB and PADS Layout, both of which check for many licenses on invocation in order to enable as many options as possible.
Note: This information only applies to users pointing to a license server for licenses
The reason it's not necessary to take these measures with a local Mobile Compute (a.k.a. Nodelocked Uncounted) license file, is because the checkouts are much quicker (no network latency), so any additional checks shouldn't add any noticeable delays to the invocation.
The default behavior is to check for all the options licenses in order to display the following dialog. In this example only the base licenses for Expedition Pinnacle, Ascent LX, and Ascent.
If it is taking a long time for the above dialog to appear, there are two options available:
A). Set the MGC_DISABLE_PRESPLASH_CHECKS environment variable to 1.
The MGC_DISABLE_PRESPLASH_CHECKS variable changes the number of licenses the Expedition checks for on invocation. Instead of checking for every option license it only looks for a base license (for Pinnacle, Ascent LX, or Ascent).
When the license selection dialog appears, all options are selectable regardless of whether or not a license exists and is available.
If you select an option that you don't have a license for (or it's not available) you will get a licensing warning after you click OK (and before Expedition comes up)
This option works well if you just want to select one of the first 4 radio buttons (for Pinnacle, Ascent LX, Ascent, or Xtreme Design Client), and checkout (and in) any option licenses via the 'Setup>Licensed Modules' menu-pick (on-demand licensing).
B). Add one of the following switches to the Expedition PCB Start Menu shortcut target path:
Right click on the Expedition PCB shortcut, and select "Properties".
Add the switch to the end of the "Target" field (add a space in-between)
Click Apply and OK.
With any of these switches in place, Expedition will bypass the license selection dialog and go directly into the requested mode (for Pinnacle, Ascent LX, or Ascent), provided the licenses are available.
You can then checkout (and in) any option licenses via the 'Setup>Licensed Modules' menu-pick
By default PADS Layout checks for all available options as seen in the 'Help>Installed Options...' dialog.
To change the behavior and have PADS Layout look for only those licenses that you have available, you can uncheck the 'Checkout all available options' and then uncheck the 'Not Available' options.
Note: If you add option licenses to your license server, PADS Layout will not pick these up (it's no longer looking for all available licenses). You would need to set the 'Checkout all available options' again, temporarily, to see what new options have become available.
The server hostids of the licenses to be combined must be identical. For example: License file 1: SERVER mozart 0050CCA420A3 1717 License file 2: SERVER server 0050CCA420A3 1700 In this example, the MAC address of the machine being used for the server is being used as the hostid and the server hostid of each file is exactly the same: 0050CCA420A3.
You can either group all of the DAEMON lines together at the beginning of the file:
SERVER mozart 0050CCA420A3 1717 DAEMON mgcld C:\MentorGraphics\Licensing\mgcld.exe DAEMON summit.d C:\Summit\summit.d
Or you can separate licenses according to daemon:
SERVER mozart 0050CCA420A3 1717 DAEMON mgcld C:\MentorGraphics\Licensing\mgcld.exe INCREMENT padses_c ...
DAEMON summit.d C:\Summit\summit.d
Note: The DAEMON line must appear in the license file before the first INCREMENT line that utilizes that vendor daemon.
We often see strange problems when the wrong characters are used to separate multiple license servers or license files in either the MGLS_LICENSE_FILE or LM_LICENSE_FILE variable.
The FlexNet standard is as follows:
Multiple independent servers and/or license files - colon ":" on Unix/Linux and semicolon ";" on Windows
For ex: MGLS_LICENSE_FILE=1717@server1;1717@server2;C:\MentorGraphics\License_Files\local_license.dat
This is a Windows example and the semicolons are used because a colon indicates a drive letter. Use colons on Unix/Linux.
A set of redundant servers - commas on both Windows and Linux
For ex: MGLS_LICENSE_FILE=1717@serverA,1717@serverB,1717@serverC:1717@local_server
Notice that the servers in the redundant cluster of serverA/serverB/serverC are separated by commas but the cluster as a whole is separated by a colon from the independent local_server. This would be a Unix/Linux example.