1 (load-shared-object "/home/nikodemus/Desktop/sb-sched.so")
3 (define-alien-variable cpu-setsize int
)
5 (define-alien-variable cpu-masksize int
)
7 (defun make-cpu-mask ()
8 (make-alien (unsigned 8) cpu-masksize
))
10 (define-alien-routine get-cpu-affinity-mask int
(mask (* (unsigned 8))))
12 (define-alien-routine set-cpu-affinity-mask int
(mask (* (unsigned 8))))
14 (define-alien-routine clear-cpu-affinity-mask void
(mask (* (unsigned 8))))
16 (define-alien-routine cpu-affinity-p int
(cpu int
) (mask (* (unsigned 8))))
18 (define-alien-routine set-cpu-affinity void
(cpu int
) (mask (* (unsigned 8))))
20 (define-alien-routine clear-cpu-affinity void
(cpu int
) (mask (* (unsigned 8))))
22 (defmacro with-cpu-affinity-mask
((mask &key save
) &body body
)
26 (setf ,mask
(make-cpu-mask))
27 (unless (zerop (get-cpu-affinity-mask ,mask
))
28 (error "Could not read CPU affinity mask."))
32 (unless (zerop (set-cpu-affinity-mask ,mask
))
33 (error "Could not set CPU affinity mask.")))
34 ;; FIXME: This leaks 128 bytes per call, but glibc complains about
35 ;; double free if we free this! Not sure what is going on.
37 (free-alien ,mask
)))))
43 (with-cpu-affinity-mask (mask)
44 (dotimes (i cpu-setsize
)
45 (when (plusp (cpu-affinity-p i mask
))
46 (print (list :cpu i
)))))
48 (with-cpu-affinity-mask (mask :save t
)
49 (clear-cpu-affinity 0 mask
))
51 (with-cpu-affinity-mask (mask)
52 (dotimes (i cpu-setsize
)
53 (when (plusp (cpu-affinity-p i mask
))
54 (print (list :cpu i
))))))