Depending on how each application uses the licenses, License Scheduler manages and enforces license usage in different ways. License Scheduler has two levels of classifications for applications depending on how the application uses the license features and whether these license features are known at the start of the job.
License Scheduler and FLEXnet work with both classes of applications.
Class A applications are those where all license features needed to run its jobs are known before the start of the job, and these features are used for the entire job.
Class B applications are those where all license features needed to run the job are known before the start of the job, but not all of these features are used all the time. The period of time that the license features are not in use are known to License Scheduler, so additional requests for the unused license features can be handled appropriately using the Class A request process.
The user application makes a license usage request to the Platform LSF cluster.
LSF sends a query to License Scheduler to see if the license token can be given to the application.
When License Scheduler grants permission, LSF gives authorization to the user application.
The user application sends a request to FLEXnet to check out a license.
If you specify DYNAMIC=Y in the lsf.licensescheduler Feature section, you must specify a duration in an rusage resource requirement for the feature. This enables License Scheduler to treat the license as a dynamic resource and prevents License Scheduler from scheduling tokens for the feature when they are not available, or reserving license tokens when they should actually be free.
For example, feature p1_2 is configured with DYNAMIC=Y:
A job is submitted requesting license feature p1_2 with a duration of 2 minutes:
myjob is granted the license token it requests:
blstat -t p1_2FEATURE: p1_2SERVICE_DOMAIN: Lan1TOTAL_INUSE: 1 TOTAL_RESERVE: 0 TOTAL_FREE: 1 OTHERS: 0PROJECT SHARE OWN INUSE RESERVE FREE DEMANDa 25.0 % 0 0 0 0 0b 25.0 % 0 0 0 0 0c 25.0 % 0 0 0 1 0default 25.0 % 0 1 0 0 0
After the duration expires, myjob checks in the license, and the token for p1_2 is available again:
bltasksTID USER STAT HOST PROJECT FEATURES CONNECT TIME41 user1 RUN hostA default p1_2 Oct 27 07:15:10 %blstat -t p1_2FEATURE: p1_2SERVICE_DOMAIN: Lan1TOTAL_INUSE: 0 TOTAL_RESERVE: 0 TOTAL_FREE: 2 OTHERS: 0PROJECT SHARE OWN INUSE RESERVE FREE DEMANDa 25.0 % 0 0 0 0 0b 25.0 % 0 0 0 1 0c 25.0 % 0 0 0 1 0default 25.0 % 0 0 0 0 0
Class C applications require an initial feature license to start a job and additional feature or sub-feature licenses during job execution. The user who submits the job knows the main license feature needed to start the job, but might not know the additional feature names or the number of additional features required. At any time, the user application can either make a request to LSF without requesting verification from License Scheduler, or it can bypass LSF entirely by sending the license request directly to the FLEXnet license servers.
The user application makes a request to LSF without requesting verification from License Scheduler.
LSF gives authorization to the user application because the request did not specify the need for License Scheduler verification.
The user application sends a request to FLEXnet to check out a license.
To enforce license distribution policies for class C license features, configure ENABLE_DYNAMIC_RUSAGE=Y in the feature section of lsf.licensescheduler
License feature feat2 is configured as a managed class C feature:
Begin FeatureNAME = feat2DISTRIBUTION = LanServer(proj1 1 default 1)ENABLE_DYNAMIC_RUSAGE = yEnd Feature
User user1 submits a job to run app1, which specifies license feature feat1:
The job runs and license feat1 is checked out:
blstat FEATURE: feat1 SERVICE_DOMAIN: LanServer TOTAL_INUSE: 1 TOTAL_RESERVE: 0 TOTAL_FREE: 4 OTHERS: 0PROJECT SHARE OWN INUSE RESERVE FREE DEMANDproj1 50.0 % 0 1 0 2 0default 50.0 % 0 0 0 3 0FEATURE: feat2SERVICE_DOMAIN: LanServer TOTAL_INUSE: 0 TOTAL_RESERVE: 0 TOTAL_FREE: 10 OTHERS: 0PROJECT SHARE OWN INUSE RESERVE FREE DEMANDproj1 50.0 % 0 0 0 5 0default 50.0 % 0 0 0 5 0
blusers -lFEATURE SERVICE_DOMAIN USER HOST NLICS NTASKS OTHERS DISPLAYS PIDSfeat1 LanServer user1 hostA 1 1 0 (/dev/tty) (16326)
% blusers -JJOBID USER HOST PROJECT CLUSTER START_TIME1896 user1 hostA proj1 cluster1 Aug 9 10:01:25RESOURCE RUSAGE SERVICE_DOMAINfeat1 1 LanServer
Later, app1 checks out feature feat2. Since it was not specified at job submission, feat2 is a class C license checkout. But since it is configured with ENABLE_DYNAMIC_RUSAGE=Y, jobs that require feat2 are considered managed workload, and subject to the distribution policies of project proj1:
blstatFEATURE: feat1SERVICE_DOMAIN: LanServerTOTAL_INUSE: 1 TOTAL_RESERVE: 0 TOTAL_FREE: 4 OTHERS: 0PROJECT SHARE OWN INUSE RESERVE FREE DEMANDproj1 50.0 % 0 1 0 2 0default 50.0 % 0 0 0 2 0
FEATURE: feat2SERVICE_DOMAIN: LanServerTOTAL_INUSE: 1 TOTAL_RESERVE: 0 TOTAL_FREE: 9 OTHERS: 0PROJECT SHARE OWN INUSE RESERVE FREE DEMANDproj1 50.0 % 0 1 0 4 0default 50.0 % 0 0 0 5 0
blusers -lFEATURE SERVICE_DOMAIN USER HOST NLICS NTASKS OTHERS DISPLAYS PIDSfeat1 LanServer user1 hostA 1 1 0 (/dev/tty) (16326)feat2 LanServer user1 hostA 1 1 0 (/dev/tty) (16344)
blusers -JJOBID USER HOST PROJECT CLUSTER START_TIME1896 user1 hostA proj1 cluser1 Aug 9 10:01:25RESOURCE RUSAGE SERVICE_DOMAINfeat1 1 LanServerfeat2 1 (class-C) LanServer