Python занят чем-то другим на моем компьютере с Windows

#python #windows #performance-testing

#python #Windows #тестирование производительности

Вопрос:

Тест является однопоточным и вызывает 1000 раз функцию «рассчитать». Эта функция суммирует все целое число от 0 до 10 000 000 примерно за 0,6 секунды. Он возвращает фактическое время, затраченное на выполнение этого вычисления. Тест отслеживает минимальное время, сумму раз и сумму раз в квадрате. После 1000 вызовов вычисляются и печатаются значения среднего, стандартного отклонения и заняты чем-то другим.

Занят чем-то другим: sum_time — minimum_time * number_of_loops

Значение занято чем-то на macOS, Linux / Ubuntu и iPad составляет от 0,493% до 4,050%. Это ожидаемый ущерб от ОС.

Результаты в Windows постоянно выше (лучшие и худшие из 10):

 >python test.py 
Busy with something else 9.723% or 58.734 from 604.051 seconds 
min = 0.545 mean = 0.604 stdev = 0.133 

>python test.py 
Busy with something else 16.230% or 105.709 from 651.320 seconds 
min = 0.546 mean = 0.651 stdev = 0.194
  

Информация о моем компьютере с Windows:

 2.4 GHz Intel Core i5-6300U, Memory 4 GB 
Microsoft Windows [Version 10.0.17763.379] 
Python version 3.7.2, Executing in 64bit
  

Тест:

 import time
import sys


def calculate():
    start = time.perf_counter()
    result = 0
    for i in range(10000000):
        result  = i
    stop = time.perf_counter()
    return stop - start


number_of_loops = 1000

min_time = sys.maxsize
sum_time = 0.0
sum_time_square = 0.0
for _ in range(number_of_loops):
    t = calculate()
    min_time = min(min_time, t)
    sum_time  = t
    sum_time_square  = t ** 2

mean = sum_time / number_of_loops
stdev = ((sum_time_square   number_of_loops * mean**2 - 2.0 * mean * sum_time) /
         (number_of_loops - 1.0)) ** 0.5
busy_with_else = sum_time - min_time * number_of_loops
print('Busy with something else %.3f%% or %.3f from %.3f seconds' %
      (100.0 * busy_with_else / sum_time, busy_with_else, sum_time))
print('min = %.3f mean = %.3f stdev = %.3f' % (min_time, mean, stdev))
  

Все тесты, выполняемые на системах в состоянии ожидания перед тестированием. Результат аналогичного теста C в Windows составляет от 0,626% до 2,059%. Итак, виновата не Windows.

Это просто мое программное / аппаратное обеспечение или его можно воспроизвести и / или объяснить?

Комментарии:

1. sum_time - minimum_time * number_of_loops есть (average_time - minimum_time) * number_of_loops . Значение показывает разницу между самым быстрым запуском и средним запуском, умноженным на количество запусков по какой-то причине. Значение имеет очень мало значения, если оно есть. Сейчас не busy with something else время.

2. @Poolka вот почему я использую первую версию: время тестирования — самый быстрый запуск * количество запусков. Самый быстрый запуск или лучше должен достигаться каждый раз в идеальной ОС. Мы не знаем лучшего времени, но мы знаем самый быстрый запуск. Все, что медленнее этого значения, занято чем-то другим, а не выполнением наших вычислений.

3. busy with something else not with the performing our calculation — как будто ваш веб-браузер решил быстро просмотреть некоторые темные уголки вашего компьютера? В любом случае, Windows не является операционной системой реального времени, поэтому не ожидайте, что время выполнения будет согласованным с высокой точностью.

4. @Poolka и я не пытаюсь продвигать это как новую метрику для тестирования: я просто вызвал ее, когда запускал тесты 🙂 Это ни в коем случае не идеально. Например, в Ubuntu лучший общий результат был оштрафован за достижение лучшего ускорения выполнения: (1) Занят чем-то другим 4,050% или 22,094 с 545,455 секунды; min = 0,523 среднее значение = 0,545 stdev = 0,025 против (2) Занят чем-то другим 2,902% или 16,211 с 558,525 секунды; min = 0,542среднее значение = 0,559 stdev = 0,018

5. @Poolka Я немного знаю о системах реального времени: программировал на них около 11 лет. Вот почему мой тест выполняет 1000 вызовов, а не только один. Значения стандартного отклонения в Windows в 10 раз больше, и я ожидаю, что мне ответят, почему.