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.
|
|
|
#!/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
|
|
|
|
import time
|
|
|
|
|
|
|
|
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()
|