Фон (перейдите к вопросу ниже, если не заинтересованы)
У меня есть симулятор, который проходит через три состояния:
- Однопоточный запуск (ввод/вывод в порядке)
- Многопоточный блок моделирования с привязкой к памяти в режиме (I/O не нормально)
- пост-симуляция, однопоточный этап после объединения (I/O ok)
Что за черт! Во время стандартного тестирования загрузка процессора снизилась с на 100% до 20%, а общий прогон занял около в 30 раз дольше, чем обычно (130 сек. Против 4.2 сек.).
Когда Callgrind
не обнаружил ничего подозрительного, моя голова жужжала, когда я был на обрыве качки назад к последнему фиксации, потеряв все исправления ошибок.
Не поощряя, я вошел в серверную комнату во время пробега и заметил неприятные звуки измельчения, подтвержденные позже, которые были вызваны записью в сокеты Mysql в qaru.site/info/435257/...!!! Оказалось, что код Mysql, несколько слоев в глубине этапа 2, вызывал проблемы.
Извлеченные уроки
- Случайный ввод-вывод может быть смертельным для приложения реального времени.
- Тестирование модулей не достаточно: мне также нужен бенчмаркинг
Fix. Я расскажу об IOSentinels с локальным ядром и утвердит() на ReadAllowed() и WriteAllowed(), чтобы гарантировать, что потоки Stage 2 никогда не будут выполнять IO.
Вопрос
Кому-нибудь повезло с прикреплением/записью рамки сравнения с googletest?
К сожалению, все мои googleests прошли на этот раз. Если бы я немного отошел и вернусь, не заметив время выполнения, это было бы катастрофическим фиксацией и, возможно, намного сложнее исправить.
Я бы хотел, чтобы googletest потерпел неудачу, если пробег занимает > 2 или 3 раза больше последней версии: эта последняя часть сложна, потому что для очень быстрых запусков состояние системы может привести к тому, что что-то займет в два раза больше, но все равно будет нормально. Но для долгого симулятора/теста я не ожидаю, что время автономной работы сильно изменится ( > 50% будет необычным).
Я открыт для предложений здесь, но было бы неплохо провести проверку с низким уровнем обслуживания, которая будет работать с автоматическим тестированием, поэтому будет очевидно, что система внезапно стала медленной, даже если все выходы выглядят нормально.