Скажімо, у мене є набір детермінованих програм, які приймають деякі дані як вхідні дані. Мені цікаво розрахувати "час", поки програма не закінчиться для різних вхідних даних. Я не дбаю про фактичний час, але це мені потрібно
- відтворюваний (якщо я запускаю конкретну програму з конкретними даними двічі, то отримую принаймні приблизно той же результат) і
- можна порівняти (якщо я запускаю, наприклад, дві різні програми з однаковими даними, а повернута метрика для першої програми - 100, а для другої - 50, це повинно дозволити стверджувати, що перша програма займає вдвічі довше, щоб працювати з цим вхідних даних).
Моя установка - це віртуальна машина, яка розміщена на сервері з різними навантаженнями в різний час дня. Моє обмежене розуміння могло б припустити, що у випадку, якщо хост-сервер сильно використовується, гостьова віртуальна машина отримує менше часу обчислень і працює повільніше, тому використання щось на зразок настінного часу, звичайно, не працюватиме. Я маю повний контроль над віртуальною машиною. Я не маю контролю над хост-сервером.
Хто-небудь з вас знає, як я можу надійно досягти своєї мети?
Ви повинні створити метрику, яка дозволить вам врахувати завантаження хоста. Залежно від рішення віртуалізації, ви зможете надати VM "гарантований" / більш високий пріоритет доступу до ресурсів. Одним із способів пояснити це, можливо, було б рішення, подібне до того, що зробив Ден Камінський для розмови «Я хочу ці помилки мого Інтернету». По суті запустити фіксований таймер (під секунду), який використовує мітку часу і порівнює час між кожним. Якщо він більше, ніж ваш інтервал, ви знаєте, що машина завантажена (~ slide 12 / nice.js). Іншим варіантом буде підрахунок циклів ЦП для цього додатка.
—
Seth
Вітаємо, Сет, Дякуємо за вашу нотатку. У вас є досвід підрахунку циклів процесорів? Це звучить як чудовий спосіб продовжити це.
—
So Well
Ні, але повинні бути доступні ресурси Як отримати кількість циклів процесора, що використовуються процесом . Ймовірно, вам доведеться адаптувати його до коду, який ви вивчаєте.
—
Seth