home *** CD-ROM | disk | FTP | other *** search
/ The World of Computer Software / World_Of_Computer_Software-02-385-Vol-1of3.iso / c / condor40.zip / CONDOR / doc / tech / tech.me < prev    next >
Text File  |  1989-10-18  |  23KB  |  754 lines

  1. .nr si 3n
  2. .he 'CONDOR TECHNICAL SUMMARY''%'
  3. .fo 'Version 4.0.0'''
  4. .+c
  5. .(l C
  6. .sz 14
  7. CONDOR TECHNICAL SUMMARY
  8. .)l
  9. .(l C
  10. Allan Bricker
  11. and
  12. Michael J. Litzkow
  13. .)l
  14. .sp .5i
  15. .sh 1 "Introduction to the Problem"
  16. .pp
  17. A common computing environment consists of many workstations
  18. connected together by a high speed local area network.
  19. These workstations have grown in power over the past several years,
  20. and if viewed as an aggregate they can represent a
  21. significant computing resource.
  22. However in many cases even though these workstations are
  23. owned by a single organization, they are dedicated to the
  24. exclusive use of individuals.
  25. .pp
  26. In examining the usage patterns of the workstations,
  27. we find it useful to identify three
  28. .q typical
  29. types of users.
  30. .q "Type 1"
  31. users are individuals who mostly use their workstations
  32. for sending and receiving mail or preparing papers.
  33. Theoreticians and administrative people often fall into this
  34. category.
  35. We identify many software development people as
  36. .q "type 2"
  37. users.
  38. These people are frequently involved in the debugging cycle where
  39. they edit software, compile, then run it possibly using some kind
  40. of debugger.
  41. This cycle is repeated many times during a typical working day.
  42. Type 2 users sometimes have too much computing capacity on their
  43. workstations such as when editing, but then during the compilation
  44. and debugging phases they could often use more CPU power.
  45. Finally there are
  46. .q "type 3"
  47. users.
  48. These are people who frequently do large numbers of simulations,
  49. or combinitoric searches.
  50. These people are almost never happy with just a workstation, because it
  51. really isn't powerful enough to meet their needs.
  52. Another point is that most type 1 and type 2 users leave their machines
  53. completely idle when they are not working, while type 3 users
  54. may keep their machines busy 24 hours a day.
  55. .pp
  56. .i Condor
  57. is an attempt to make use of the idle cycles from type 1 and 2 users
  58. to help satisfy the needs of the type 3 users.
  59. The
  60. .i condor
  61. software monitors the activity on all the
  62. participating workstations in the local network.
  63. Those machines which are determined to be idle, are placed into
  64. a resource pool or
  65. .q "processor bank" .
  66. Machines are then allocated from the bank for the execution of jobs
  67. belonging to the type 3 users.
  68. The bank is a dynamic entity;
  69. workstations enter the bank when they become idle,
  70. and leave again when they get busy.
  71. .sh 1 "Design Features"
  72. .np
  73. No special programming is required to
  74. use condor.
  75. Condor is able to run normal UNIX\**
  76. .(f
  77. \**UNIX is a trademark of AT&T.
  78. .)f
  79. programs, only requiring the user to relink, not recompile
  80. them or change any code.
  81. .np
  82. The local execution environment is preserved for remotely
  83. executing processes.
  84. Users do not have to worry about moving data files to remote
  85. workstations before executing programs there.
  86. .np
  87. The condor software is responsible for locating and allocating
  88. idle workstations.
  89. Condor users do not have to search for idle machines,
  90. nor are they restricted to using machines only during a static portion
  91. of the day.
  92. .np
  93. .q Owners
  94. of workstations have complete priority over their own machines.
  95. Workstation owners are generally happy to let somebody else compute on
  96. their machines while they are out,
  97. but they want their machines back promptly upon returning,
  98. and they don't want to have to take special action to regain control.
  99. Condor handles this automatically.
  100. .np
  101. Users of condor may be assured that their jobs will eventually complete.
  102. If a user submits a job to condor which runs on somebody else's workstation,
  103. but the job is not finished when the workstation owner returns,
  104. the job will be checkpointed and restarted as soon as possible
  105. on another machine.
  106. .np
  107. Measures have been taken to assure
  108. owners of workstations that their filesystems will
  109. not be touched by remotely executing jobs.
  110. .np
  111. Condor does its work completely outside the kernel, and is compatible
  112. with Berkeley 4.2 and 4.3 UNIX kernels and many of their derivitives.
  113. You do not have to run a custom operating system to get the benefits
  114. of condor.
  115. .sh 1 "Limitations"
  116. .np
  117. Only single process jobs are supported, i.e.
  118. the fork(2), exec(2), and similar calls are not implemented.
  119. .np
  120. Signals and signal handlers are not supported, i.e.
  121. the signal(3), sigvec(2), and kill(2) calls are not implemented.
  122. .np
  123. Interprocess communication (IPC) calls are not supported, i.e.
  124. the socket(2), send(2), recv(2), and similar calls are not implemented.
  125. .np
  126. All file operations must be idempotent \(em
  127. read-only and write-only file accesses work correctly,
  128. but programs which both read and write the same file may not.
  129. .np
  130. Each condor job has an associated
  131. .q "checkpoint file"
  132. which is approximately the size of the address space of the process.
  133. Disk space
  134. .b must
  135. be available to store the checkpoint file
  136. .b both
  137. on the
  138. .b submitting
  139. and
  140. .b remote
  141. machines.
  142. .np
  143. Condor does a significant amount of work to prevent security hazards,
  144. but some loopholes are known to exist.
  145. One problem is that condor user jobs are supposed to do only remote system
  146. calls, but this is impossible to guarantee.
  147. User programs are restricted on the remote machine both by running only
  148. as an ordinary user (condor), and by operating in a changeroot'd
  149. directory.
  150. Still a sufficiently malicious and clever user could cause problems by
  151. doing local system calls on the remote machine.
  152. .np
  153. A different security problem exists for owners of condor jobs who necessarily
  154. give remotely running processes access to their own file system.
  155. The risk can be greatly reduced by requesting that access only be granted
  156. to a changeroot'd directory in the local file system, but that does
  157. reduce the flexibility of file access for the condor jobs.
  158. See condor(1) for details on how to submit jobs with such a request.
  159. .sh 1 "Overview of Condor Software"
  160. .pp
  161. Condor user programs do
  162. .q  "remote system calls"
  163. back to the machine from which they were submitted.
  164. Remote system calls provide user
  165. programs with the illusion that they are operating in the
  166. local environment and give the user the flexibility of running
  167. programs written for the normal UNIX environment on condor.
  168. Programs are converted to using
  169. remote system calls simply by relinking with a special library.
  170. The remote system call mechanism is described in Section 6.
  171. .pp
  172. Condor user programs are constructed in such a way that they
  173. can be checkpointed and restarted at will.
  174. This assures users that their jobs will complete, even if they are
  175. interrupted during execution by the return of a hosting workstation's
  176. owner.
  177. Checkpointing is also implemented by linking with the special library.
  178. The checkpointing mechanism is described more fully in Section 7.
  179. .pp
  180. Condor includes
  181. control software consisting of two daemons which run on each
  182. member of the condor pool, and two other daemons which run on a
  183. single machine called the
  184. .b "central manager" .
  185. This software automatically locates and releases
  186. .q "target machines"
  187. and manages the queue of jobs waiting for condor resources.
  188. The control software is described in Section 8.
  189. .sh 1 "Remote System Calls"
  190. .pp
  191. To better understand how the condor remote system calls work,
  192. it is appropriate to quickly review how normal UNIX system
  193. calls work.
  194. Figure 1 illustrates the normal UNIX system call mechanism.
  195. The user program is linked with a standard library called the
  196. .q "C library" .
  197. This is true even for programs written in languages other than C.
  198. The C library contains routines, often referred to as
  199. .q "system call stubs" ,
  200. which cause the actual system calls to happen.
  201. What the stubs really do is push the system call number, and
  202. system call arguments onto the stack, then execute an instruction
  203. which causes a trap to the kernel.
  204. When the kernel trap handler is called, it reads the system call number
  205. and arguments, and performs the system call on behalf of the user
  206. program.
  207. The trap handler will then place the system call return value in a well
  208. known register or registers, and return control to the user program.
  209. The system call stub then returns the result to the calling process,
  210. completing the system call.
  211. .(b
  212. .GS C
  213. file 01_syscall_review.grn
  214. 3 8
  215. 4 12
  216. height 2.5
  217. .GE
  218. .)b
  219. .pp
  220. Figure 2 illustrates how this mechanism has been altered by condor
  221. to implement remote system calls.
  222. Whenever condor is executing a user program remotely, it also runs a
  223. .q shadow
  224. program on the initiating host.
  225. The
  226. .b shadow
  227. acts an agent for the remotely executing program in doing
  228. system calls.
  229. Condor user programs are linked with a special version of the C
  230. library.
  231. The special version contains all of the functions provided by the normal
  232. C library, but the system call stubs have been changed to accomplish
  233. remote system calls.
  234. The remote system call stubs package up the system call number and
  235. arguments and send them to the
  236. .b shadow
  237. using the network.
  238. The
  239. .b shadow ,
  240. which is linked with the normal C library, then executes
  241. the system call on behalf of the remotely running job in the normal
  242. way.
  243. The
  244. .b shadow
  245. then packages up the results of the system call and sends them
  246. back to the system call stub in the special C library on the remote
  247. machine.
  248. The remote system call stub then returns its result to the calling procedure
  249. which is unaware that the call was done remotely rather than locally.
  250. Note that the
  251. .b shadow
  252. runs with its UID set to the owner of the remotely
  253. running job so that it has the correct permissions into the local
  254. file system, and the remotely running job runs with its UID set to
  255. .q condor.
  256. Condor is an ordinary user on the remote system, and thus has no special
  257. privileges into that file system.
  258. The remotely running user program runs in a 
  259. .q changeroot'd
  260. environment to further protect the owner of the remote machine from
  261. unwanted file system accesses by the foreign job it is hosting.
  262. .(b
  263. .GS C
  264. file 02_syscall_remote.grn
  265. 3 8
  266. 4 12
  267. height 3
  268. .GE
  269. .)b
  270. .sh 1 Checkpointing
  271. .pp
  272. To checkpoint a UNIX process, several things must be preserved.
  273. The text, data, stack, and register contents are needed, as well as
  274. information about what files are open, where they are seek'd to,
  275. and what mode they were opened in.
  276. The data, and stack are available in a core file,
  277. while the text is available in the original executable.
  278. Condor gathers the information about currently open files through
  279. the special C library.
  280. In condor's special C library the system call stubs for
  281. .q open ,
  282. .q close ,
  283. and
  284. .q dup
  285. not only do those things remotely, but they also record which files
  286. are opened in what mode, and which file descriptors correspond to
  287. which files.
  288. .pp
  289. Condor causes a running job to checkpoint by sending it a signal.
  290. When the program is linked, a special version of
  291. .q crt0
  292. is included which sets up CKPT() as that signal handler.
  293. When CKPT() is called, it updates the table of
  294. open files by seeking each one to the current location and recording
  295. the file position.
  296. Next a setjmp(3) is executed to save key register contents in a global
  297. data area, then the process sends itself a signal which results in a
  298. core dump.
  299. The condor software then combines the original executable file, and the
  300. core file to produce a
  301. .q checkpoint
  302. file, (figure 3).
  303. The checkpoint file is itself executable.
  304. .pp
  305. When the checkpoint file is restarted, it starts from the crt0 code
  306. just like any UNIX executable, but again this code is special,
  307. and it will set up the restart() routine as a signal handler with
  308. a special signal stack, then send itself that signal.
  309. When restart() is called, it will operate in the temporary stack area
  310. and read the saved stack in from the checkpoint file,
  311. reopen and reposition all files from the saved file state information,
  312. and execute a longjmp(3) back to CKPT().
  313. When the restart routine returns, it does so with respect to
  314. the restored stack, and CKPT() returns to the routine which was active
  315. at the time of the checkpoint signal, not crt0.
  316. To the user code, checkpointing looks exactly like a signal handler
  317. was called, and restarting from a checkpoint looks like a return from
  318. that signal handler.
  319. .(b
  320. .GS C
  321. file 03_checkpoint.grn
  322. 3 8
  323. 4 12
  324. height 3
  325. .GE
  326. .)b
  327. .sh 1 "Control Software"
  328. .pp
  329. Each machine in the condor pool runs two daemons, the
  330. .b schedd
  331. and the
  332. .b startd .
  333. In addition, one machine runs two other daemons called the
  334. .b collector
  335. and the
  336. .b negotiator .
  337. While the
  338. .b collector
  339. and the
  340. .b negotiator
  341. are separate processes, they
  342. work closely together, and for purposes of this discussion can
  343. be considered one logical process called the
  344. .b "central manager" .
  345. The
  346. .b "central manager"
  347. has the job of keeping track of which machines are idle,
  348. and allocating those machines to other machines which have condor jobs
  349. to run.
  350. On each machine the
  351. .b schedd
  352. maintains a queue of condor jobs,
  353. and negotiates with the
  354. .b "central manager"
  355. to get permission to run those jobs on remote machines.
  356. The
  357. .b startd
  358. determines whether its machine is idle, and also
  359. is responsible for starting and managing foreign jobs which it
  360. may be hosting.
  361. On machines running the X window system,
  362. an additional daemon the
  363. .b kbdd
  364. will periodically inform the
  365. .b startd
  366. of the keyboard and mouse
  367. .q "idle time" .
  368. Periodically the
  369. .b startd
  370. will examine its machine, and update the
  371. .b "central manager"
  372. on its degree of "idleness".
  373. Also periodically the
  374. .b schedd
  375. will examine its job queue and update the
  376. .b "central manager"
  377. on how many jobs it wants to run and how many jobs
  378. it is currently running, (figure 4).
  379. .(b
  380. .GS C
  381. file 04_control_A.grn
  382. 3 8
  383. 4 12
  384. height 3
  385. .GE
  386. .)b
  387. .pp
  388. At some point the
  389. .b "central manager"
  390. may learn that
  391. .i "machine b"
  392. is idle, and decide that
  393. .i "machine c"
  394. should execute one of its jobs remotely on
  395. .i "machine b" .
  396. The
  397. .b "central manager"
  398. will then contact the
  399. .b schedd
  400. on
  401. .i "machine c"
  402. and give it
  403. .q permission
  404. to run a job on
  405. .i "machine b" .
  406. The
  407. .b schedd
  408. on
  409. .i "machine c"
  410. will then select a job from its queue and spawn off a
  411. .b shadow
  412. process to run it.
  413. The
  414. .b shadow
  415. will then contact the
  416. .b startd
  417. on
  418. .i "machine b"
  419. and tell it that it would
  420. like to run a job.
  421. If the situation on
  422. .i "machine b"
  423. hasn't changed since the last update to the
  424. .b "central manager" ,
  425. .i "machine b"
  426. will still be idle, and will respond with an OK.
  427. The
  428. .b startd
  429. on
  430. .i "machine b"
  431. then spawns a process called the
  432. .b starter .
  433. It's the
  434. .b starter's
  435. job to start and manage the remotely running job
  436. (figure 5).
  437. .(b
  438. .GS C
  439. file 05_control_B.grn
  440. 3 8
  441. 4 12
  442. height 3
  443. .GE
  444. .)b
  445. .pp
  446. The
  447. .b shadow
  448. on
  449. .i "machine c"
  450. will transfer the checkpoint file to the
  451. .b starter
  452. on
  453. .i "machine b" .
  454. The
  455. .b starter
  456. then sets a timer and spawns off the remotely running job
  457. from
  458. .i "machine c"
  459. (figure 6).
  460. The
  461. .b shadow
  462. on
  463. .i "machine c"
  464. will handle all system calls for the job.
  465. When the
  466. .b starter's
  467. timer expires it
  468. will send the user job a checkpoint signal,
  469. causing it to save its file state and stack, then dump core.
  470. The
  471. .b starter
  472. then builds a new version of the checkpoint file which
  473. is stored temporarily on
  474. .i "machine b" .
  475. The
  476. .b starter
  477. restarts the job from the new checkpoint file, and the
  478. cycle of execute and checkpoint continues.
  479. At some point, either the job will finish, or
  480. .i "machine b's"
  481. user will
  482. return.
  483. If the job finishes, the job's owner is notified by mail, and the
  484. .b starter
  485. and
  486. .b shadow
  487. clean up.
  488. If
  489. .i "machine b"
  490. becomes busy, the
  491. .b startd
  492. on
  493. .i "machine b"
  494. will detect that either by
  495. noting recent activity on one of the tty or pty's, or by the rising
  496. load average.
  497. When the
  498. .b startd
  499. on
  500. .i "machine b"
  501. detects this activity, it will send a
  502. .q suspend
  503. signal to the
  504. .b starter ,
  505. and the
  506. .b starter
  507. will temporarily suspend the user job.
  508. This is because frequently the owners of machines are active for only
  509. a few seconds, then become idle again.
  510. This would be the case if the owner were just checking to see if there were
  511. new mail for example.
  512. If
  513. .i "machine b"
  514. remains busy for a period of about 5 minutes, the
  515. .b startd
  516. there will send a
  517. .q vacate
  518. signal to the
  519. .b starter .
  520. In this case, the
  521. .b starter
  522. will abort the user job and return the latest
  523. checkpoint file to the
  524. .b shadow
  525. on
  526. .i "machine c" .
  527. If the job had not run long enough on
  528. .i "machine b"
  529. to reach a checkpoint,
  530. the job is just aborted, and will be restarted later from the most
  531. recent checkpoint on
  532. .i "machine c" .
  533. Notice that the
  534. .b starter
  535. checkpoints the condor user job periodically rather than waiting
  536. until the remote workstation's owner wants it back.
  537. Checkpointing, and in particular core dumping, is an I/O intensive
  538. activity which we avoid doing when the hosting workstation's owner is active.
  539. .(b
  540. .GS C
  541. file 06_control_C.grn
  542. 3 8
  543. 4 12
  544. height 3
  545. .GE
  546. .)b
  547. .sh 1 "Control Expressions"
  548. .pp
  549. The condor control software is driven by a set of powerful
  550. .q "control expressions" .
  551. These expressions are read from the file
  552. .q ~condor/condor_config
  553. on each machine at run time.
  554. It is often convenient for many machines of the same type to share
  555. common control expressions, and this may be done through a fileserver.
  556. To allow flexibility for control of individual machines, the file
  557. .q ~condor/condor_config.local
  558. is provided, and expressions defined there take precedence over those
  559. defined in condor_config.
  560. Following are examples of a few of the more important condor control
  561. expressions with explanations.
  562. See condor_config(5) for a detailed description of all the control expressions.
  563. .sh 2 "Starting Foreign Jobs"
  564. .pp
  565. This set of expressions is used by the
  566. .b startd
  567. to determine when to allow
  568. a foreign job to begin execution.
  569. .ta 15n
  570. .(l
  571. BackgroundLoad    = 0.3
  572. StartIdleTime    = 15 * $(MINUTE)
  573. CPU_Idle    = LoadAvg <= $(BackgroundLoad)
  574. START        : $(CPU_Idle) && KeyboardIdle > $(StartIdleTime)
  575. .)l
  576. .lp
  577. This example of the START expression specifies that
  578. to begin execution of a foreign job
  579. the load average must be less than 0.3, and there must have been no keyboard
  580. activity during the past 15 minutes.
  581. .lp
  582. Other expressions are used to determine when to suspend, resume, and
  583. abort foreign jobs.
  584. .sh 2 "Prioritizing Jobs"
  585. .pp
  586. The
  587. .b schedd
  588. must prioritize its own jobs and negotiate with the
  589. .b "central manager"
  590. to get permission to run them.
  591. It uses a control expression to assign priorities to its local jobs.
  592. .(l
  593. PRIO        : (UserPrio * 10) + $(Expanded) - (QDate / 1000000000.0)
  594. .)l
  595. .lp
  596. .q UserPrio
  597. is a number defined by the jobs owner in a similar spirit to
  598. the UNIX
  599. .q nice
  600. command.
  601. .q Expanded
  602. will be 1 if the job has already completed some execution, and
  603. 0 otherwise.
  604. This is an issue because expanded jobs require more disk space than
  605. unexpanded ones.
  606. .q QDate
  607. is the UNIX time when the job was submitted.
  608. The constants are chosen so that
  609. .q UserPrio
  610. will be the major criteria,
  611. .q Expanded
  612. will be less important, and
  613. .q QDate
  614. will be the minor criteria
  615. in determining job priority.
  616. .q UserPrio ,
  617. .q Expanded ,
  618. and
  619. .q QDate
  620. are variables known to the
  621. .b schedd
  622. which it determines for each job before applying the PRIO expression.
  623. .sh 2 "Prioritizing Machines"
  624. .pp
  625. The
  626. .b "central manager"
  627. does not keep track of individual jobs on the member
  628. machines.
  629. Instead it keeps track of how many jobs a machine wants to run, and how
  630. many it is running at any particular time.
  631. This keeps the information that must be transmitted between the
  632. .b schedd
  633. and the
  634. .b "central manager"
  635. to a minimum.
  636. The
  637. .b "central manager"
  638. has the job of prioritizing the machines which want to
  639. run jobs, then it can give permission to the
  640. .b schedd
  641. on high priority
  642. machines and let them make their own decision about what jobs to run.
  643. .(l
  644. UPDATE_PRIO : Prio + Users - Running
  645. .)l
  646. .lp
  647. Periodically the
  648. .b "central manager"
  649. will apply this expression to all of the
  650. machines in the pool.
  651. The priority of each machine will be incremented by the number of individual
  652. users on that machine who have jobs in the queue, and decremented by the
  653. number of jobs that machine is already executing remotely.
  654. Machines which are running lots of jobs will tend to have low priorities,
  655. and machines which have jobs to run, but can't run them, will accumulate
  656. high priorities.
  657. .sh 1 "Acknowledgements"
  658. .pp
  659. This project is based on the idea of a
  660. .q "processor bank" ,
  661. which was introduced by Maurice Wilkes in connection with his work on the
  662. Cambridge Ring.\**
  663. .(f
  664. \**Wilkes, M. V.,
  665. Invited Keynote Address,
  666. 10th Annual International Symposium on Computer Architecture,
  667. June 1983.
  668. .)f
  669. .pp
  670. We would like to thank Don Neuhengen and Tom Virgilio for their
  671. pioneering work on the remote system call implementation;
  672. Matt Mutka and Miron Livny
  673. for first convincing us that a general checkpointing mechanism
  674. could be practical and for ideas on how to distribute control and
  675. prioritize the jobs;
  676. and David Dewitt and Marvin Solomon for their continued guidance
  677. and support throughout this project.
  678. .pp
  679. This research was supported by the National Science Foundataion under
  680. grants MCS81-05904 and DCR-8512862 and by a  Digital Equipment Corporation
  681. External Research Grant.
  682. .sh 1 "Copyright Information"
  683. .lp
  684. Copyright 1986, 1987, 1988, 1989 University of Wisconsin
  685. .lp
  686. Permission to use, copy, modify, and distribute this software and its
  687. documentation for any purpose and without fee is hereby granted,
  688. provided that the above copyright notice appear in all copies and that
  689. both that copyright notice and this permission notice appear in
  690. supporting documentation, and that the name of the University of
  691. Wisconsin not be used in advertising or publicity pertaining to
  692. distribution of the software without specific, written prior
  693. permission.  The University of Wisconsin makes no representations about
  694. the suitability of this software for any purpose.  It is provided "as
  695. is" without express or implied warranty.
  696. .lp
  697. THE UNIVERSITY OF WISCONSIN DISCLAIMS ALL WARRANTIES WITH REGARD TO
  698. THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
  699. FITNESS. IN NO EVENT SHALL THE UNIVERSITY OF WISCONSIN  BE LIABLE FOR
  700. ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
  701. WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  702. ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  703. OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  704. .lp
  705. .ta 10n
  706. Authors:    Allan Bricker and Michael J. Litzkow,
  707. .br
  708.     University of Wisconsin, Computer Sciences Dept.
  709. .sh 1 "Bibliography"
  710. .np
  711. Mutka, M. and Livny, M.
  712. .q "Profiling Workstations' Available Capacity For Remote Execution" .
  713. .i
  714. Proceedings of Performance-87, The 12th IFIP W.G. 7.3
  715. International Symposium on Computer Performance Modeling,
  716. Measurement and Evaluation.
  717. .r
  718. Brussels, Belgium, December 1987.
  719. .np
  720. Litzkow, M.
  721. .q "Remote Unix \(em Turning Idle Workstations Into Cycle Servers" .
  722. .i
  723. Proceedings of the Summer 1987 Usenix Conference.
  724. .r
  725. Phoenix, Arizona.
  726. June 1987
  727. .np
  728. Mutka, M.
  729. .i
  730. Sharing in a Privately Owned Workstation Environment.
  731. .r
  732. Ph.D. Th.,
  733. University of Wisconsin, May 1988.
  734. .np
  735. Litzkow, M., Livny, M. and Mutka, M.
  736. .q "Condor \(em A Hunter of Idle Workstations" .
  737. .i
  738. Proceedings of the
  739. 8th International Conference on Distributed Computing Systems.
  740. .r
  741. San Jose, Calif.
  742. June 1988
  743. .np
  744. Bricker, A. and Litzkow M.
  745. .q "Condor Installation Guide" .
  746. May 1989
  747. .np
  748. Bricker, A. and Litzkow, M.
  749. Unix manual pages: condor_intro(1), condor(1), condor_q(1), condor_rm(1),
  750. condor_status(1), condor_summary(1),
  751. condor_config(5),
  752. condor_control(8), and condor_master(8).
  753. May 1989
  754.