You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitogen/tests/soak/cpu_load.py

35 lines
754 B
Python

#!/usr/bin/env python
"""
Put the machine's CPUs under pressure to increase the likelihood of scheduling
weirdness. Useful for exposing otherwise difficult to hit races in the library.
"""
import ctypes
import multiprocessing
import os
LIBC = ctypes.CDLL('libc.so.6')
sched_yield = LIBC.sched_yield
def burn():
while 1:
a, b, c = os.urandom(3)
n = int(((ord(a) << 16) |
(ord(b) << 8) |
(ord(c) << 0)) / 1.6)
print(n)
for x in xrange(n): pass
sched_yield()
mul = 1.5
count = int(mul * multiprocessing.cpu_count())
print(count)
procs = [multiprocessing.Process(target=burn)
for _ in range(count)]
for i, proc in enumerate(procs):
print([i])
proc.start()