Есть две проблемы с кешем и устройствами.Первая проблема - это основная функциональная правильность.А именно, система должна обычно размещать регистры отображения памяти устройства в диапазоне адресов, который полностью обходит кэш.Представьте, что этого не произошло, и кеш был "в пути".В этом случае программное обеспечение, пытающееся прочитать регистр состояния на устройстве, вместо этого считывает устаревшее значение, предоставленное кешем!Удачи в получении драйверов вашего устройства.Некоторые процессоры предоставляют специальные инструкции для доступа без кэширования, но основной результат тот же: кэш не дает никаких преимуществ и только усложняет работу с памятью устройства.
Вторая проблема - это проблема производительности интеллектуальных устройств, способныхвыполнение транзакций прямого доступа к памяти (DMA) с памятью.Когда устройство выполняет запись в DMA, тогда логика аппаратной шины в системе полностью отсекает строки кэша от процессора, следуя протоколу MESI.Ядра сильно зависят от хранения данных в закрытых кешах для эффективности.Теперь устройство только что вырвало все строки кэша, что заставляет ядро перезагружать строки с высокой задержкой при следующем доступе к программному обеспечению.Такое же отслеживание обычно происходит даже для операций чтения DMA, поскольку ЦП часто избегают строк данных в общем состоянии.
Устройства, встроенные в сам ЦП, могут оставлять строки кэша в постоянном кэше последнего уровня ЦП, что может значительно повысить производительность по сравнению с устройствами вне пакета ЦП.