📄 loadave4.basl
字号:
//// OpenPBS (Portable Batch System) v2.3 Software License// // Copyright (c) 1999-2000 Veridian Information Solutions, Inc.// All rights reserved.// // ---------------------------------------------------------------------------// For a license to use or redistribute the OpenPBS software under conditions// other than those described below, or to purchase support for this software,// please contact Veridian Systems, PBS Products Department ("Licensor") at:// // www.OpenPBS.org +1 650 967-4675 sales@OpenPBS.org// 877 902-4PBS (US toll-free)// ---------------------------------------------------------------------------// // This license covers use of the OpenPBS v2.3 software (the "Software") at// your site or location, and, for certain users, redistribution of the// Software to other sites and locations. Use and redistribution of// OpenPBS v2.3 in source and binary forms, with or without modification,// are permitted provided that all of the following conditions are met.// After December 31, 2001, only conditions 3-6 must be met:// // 1. Commercial and/or non-commercial use of the Software is permitted// provided a current software registration is on file at www.OpenPBS.org.// If use of this software contributes to a publication, product, or// service, proper attribution must be given; see www.OpenPBS.org/credit.html// // 2. Redistribution in any form is only permitted for non-commercial,// non-profit purposes. There can be no charge for the Software or any// software incorporating the Software. Further, there can be no// expectation of revenue generated as a consequence of redistributing// the Software.// // 3. Any Redistribution of source code must retain the above copyright notice// and the acknowledgment contained in paragraph 6, this list of conditions// and the disclaimer contained in paragraph 7.// // 4. Any Redistribution in binary form must reproduce the above copyright// notice and the acknowledgment contained in paragraph 6, this list of// conditions and the disclaimer contained in paragraph 7 in the// documentation and/or other materials provided with the distribution.// // 5. Redistributions in any form must be accompanied by information on how to// obtain complete source code for the OpenPBS software and any// modifications and/or additions to the OpenPBS software. The source code// must either be included in the distribution or be available for no more// than the cost of distribution plus a nominal fee, and all modifications// and additions to the Software must be freely redistributable by any party// (including Licensor) without restriction.// // 6. All advertising materials mentioning features or use of the Software must// display the following acknowledgment:// // "This product includes software developed by NASA Ames Research Center,// Lawrence Livermore National Laboratory, and Veridian Information// Solutions, Inc.// Visit www.OpenPBS.org for OpenPBS software support,// products, and information."// // 7. DISCLAIMER OF WARRANTY// // THIS SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. ANY EXPRESS// OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES// OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT// ARE EXPRESSLY DISCLAIMED.// // IN NO EVENT SHALL VERIDIAN CORPORATION, ITS AFFILIATED COMPANIES, OR THE// U.S. GOVERNMENT OR ANY OF ITS AGENCIES BE LIABLE FOR ANY DIRECT OR INDIRECT,// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.// // This license will be governed by the laws of the Commonwealth of Virginia,// without reference to its choice of law rules.// ////// loadave4.basl: A simple scheduler to run up to 3 jobs if the load average// is less than 2.0 and the job cput is less than 60 seconds.// This is for each of the server hosts it knows about.//// Environment: Many Server / Many CNode //// Configuration file:// $serverhost host1 port1// $serverhost host2 port2 // ...// $momhost host1 port1// $momhost host2 port2// ...// NOTE: This is the same as loadave3.basl except instead of using the// assist function, "ServerJobsGet()" to get to the jobs,// "QueJobsGet()" is used instead.// **************************************************************************//// User-defined Functions//// **************************************************************************Int JobCpuTimeReqGet(Job job) { Int cput; cput = JobIntResReqGet(job, "cput"); return(cput);}CNode findCNodeByName(String host_name){ Set CNode exec_hosts; CNode n; // get the nodes to the system via the configuration file exec_hosts = AllNodesGet(); foreach( n in exec_hosts ) { if( CNodeNameGet(n) EQ host_name ) { return(n); } } return(NOCNODE);}// **************************************************************************//// Global variable declarations//// **************************************************************************Int nrun;// **************************************************************************//// main scheduling code//// **************************************************************************sched_main(){ Set Server serv_hosts; Server h; CNode node; Set Que queues; Que q; Que q1; Que q2; Set Job jobs; Job j; String host_name; // get all servers known to the system serv_hosts = AllServersGet(); foreach( h in serv_hosts ) { nrun = 0; host_name = ServerInetAddrGet(h); node = findCNodeByName(host_name); if( CNodeStateGet(node) NEQ CNODE_UP OR CNodeLoadAveGet(node) GE 2.0 ) { continue; } queues = ServerQueuesGet(h); foreach( q in queues ) { if( QueStateGet(q) NEQ SCHED_ENABLED ) { continue; } // CONDITION: Consider jobs only that are not running with cput // requirement < 60 q1 = QueFilter(q, JobStateGet, OP_NEQ, RUNNING); q2 = QueFilter(q1, JobCpuTimeReqGet, OP_LT, 60); jobs = QueJobsGet(q2); foreach( j in jobs ) { // run job syncronously if( JobAction(j, SYNCRUN, NULLSTR) EQ SUCCESS ) { nrun=nrun+1; } if( nrun GT 2 ) { break; } } // foreach jobs if( nrun GT 2 ) { break; } } // foreach q } // foreach h}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -