Index: batchsim/batchsim.scm ================================================================== --- batchsim/batchsim.scm +++ batchsim/batchsim.scm @@ -46,11 +46,11 @@ (include "events.scm") ;; System spec (to be moved into loaded file) ;; ;; x y w gap x-min x-max -(define *cpu-grid* (vector 500 50 15 2 500 645)) +(define *cpu-grid* (vector 500 50 15 2 500 600)) (define (make-cpu:grid)(make-vector 6)) (define *queues* (make-hash-table)) ;; name -> (list (list user duration num-cpus num-gigs) ... ) (define *cpus* (make-hash-table)) ;; cpu-name => (vector user job-len num-cpu mem x-loc y-loc) (define *obj-locations* (make-hash-table)) ;; name -> (x y layer) (define *queue-spec* @@ -338,19 +338,17 @@ (if *use-log* (inexact->exact (round (log (+ 1 (* *job-log-scale* numjobs))))) numjobs))) (x1 (- x2 bar-width)) (y2 (- origin-y h))) - (print "x1 " x1 ", origin-y " origin-y ", x2 " x2 ", y2 " y2) + ;; (print "x1 " x1 ", origin-y " origin-y ", x2 " x2 ", y2 " y2) (ezx-fillrect-2d *ezx* x1 y2 x2 origin-y (get-user-color user)) (if (not (null? tal)) (loop (car tal)(cdr tal) x1))))) (ezx-redraw *ezx*))))))) - - ;; (let* ((args (argv)) ;; (fname (if (> (length args) 1) ;; (cadr args) ;; "default.scm"))) (load "default.scm") Index: batchsim/default.scm ================================================================== --- batchsim/default.scm +++ batchsim/default.scm @@ -1,8 +1,8 @@ ;; run sim for four hours ;; -(define *end-time* (* 60 40)) +(define *end-time* (* 60 50)) ;; create the cpus ;; (let loop ((count 200)) (add-cpu (conc "cpu_" count) 1 1) @@ -32,24 +32,42 @@ (add-job "normal" "m" 600 1 1) (if (> count 0)(loop (- count 1)))))) ;; every minute user j runs ten jobs ;; -(define *user-j-jobs* 500) +(define *user-j-jobs* 300) (event (+ 600 *start-time*) (lambda () (let f () (schedule 60) (if (> *user-j-jobs* 0) (begin - (let loop ((count 10)) ;; add 100 jobs + (let loop ((count 5)) ;; add 100 jobs (add-job "quick" "j" 600 1 1) (if (> count 0)(loop (- count 1)))) - (set! *user-j-jobs* (- *user-j-jobs* 10)))) + (set! *user-j-jobs* (- *user-j-jobs* 5)))) + (if (and (not *done*) + (> *user-j-jobs* 0)) + (f))))) ;; Megatest user running 200 jobs + +;; every minute user j runs ten jobs +;; +(define *user-j-jobs* 300) +(event (+ 630 *start-time*) + (lambda () + (let f () + (schedule 60) + (if (> *user-j-jobs* 0) + (begin + (let loop ((count 5)) ;; add 100 jobs + (add-job "quick" "n" 600 1 1) + (if (> count 0)(loop (- count 1)))) + (set! *user-j-jobs* (- *user-j-jobs* 5)))) (if (and (not *done*) (> *user-j-jobs* 0)) (f))))) ;; Megatest user running 200 jobs + ;; ;; ;; (event *start-time* ;; (lambda () ;; (let f ((count 200)) ;; (schedule 10) @@ -62,11 +80,11 @@ ;; (event *start-time* (lambda () (let f () (schedule 3) - (let ((queue-names (hash-table-keys *queues*))) + (let ((queue-names (random-sort (hash-table-keys *queues*)))) (let loop ((cpu (get-cpu)) (count (+ (length queue-names) 4)) (qname (car queue-names)) (remq (cdr queue-names))) (if (and cpu Index: batchsim/events.scm ================================================================== --- batchsim/events.scm +++ batchsim/events.scm @@ -8,10 +8,15 @@ (define *start-time* 0) (define *end-time* (* 60 60 4)) ;; four hours (define *now* *start-time*) (define *done* #f) +(define (random-sort l) + (sort l + (lambda (x y) + (equal? 0 (random 2))))) + ;; Each item in the event list is a list of a scheduled time and the thunk ;; (time thunk). Sort the list so that the next event is the earliest. ;; (define event-sort (lambda (@a @b)