2013-04-06 15 views
13

Qualcuno sa quale tipo di comportamento della cache della CPU (ad esempio combinazione di scritture non memorizzabili) è assegnato a con supporto di file, I/O mappato in memoria sui sistemi x86 moderni? C'è un modo per rilevare quale è il caso, ed eventualmente sovrascrivere il comportamento predefinito?Comportamento della cache di I/O con mappatura della memoria

Windows e Linux sono i principali sistemi operativi di interesse.

+0

Potrei sbagliarmi molto, ma dubito che facciano qualcosa di speciale a riguardo. Le pagine di memoria con backup di file vengono trattate come qualsiasi altra area di memoria tipica e memorizzate nella cache normalmente. Dico questo perché ho un accesso profilato alla memoria di backup di file (alcuni anni fa però) e non ho osservato alcuna irregolarità che potrebbe essere stata causata dal caching speciale. Non ho più i risultati o il codice. Inoltre, ciò che ho provato sono stati file di memoria mappati, e non tutti i dispositivi I/O e simili. – yzt

+0

La mia esperienza è d'accordo con @ YaserZhian. In effetti, Windows (almeno) sembra trattare la memoria normale in qualche modo come un file mappato in memoria che sembra essere mappato al file di scambio invece di qualche altro file. –

+1

[Questo potrebbe aiutarti] (http://kerneltrap.org/mailarchive/linux-kernel/2008/4/29/1657814) – DOOM

risposta

13

Il criterio di memorizzazione nella cache applicato alla regione dello spazio indirizzo è generalmente indipendente dal sistema operativo e dipende esclusivamente dal tipo di dispositivo dietro la pagina dello spazio indirizzo. In realtà, il sistema operativo è libero di applicare qualsiasi criterio di memorizzazione nella cache in qualsiasi area di memoria, ma la politica di memorizzazione nella cache assegnata in modo errato può ridurre le prestazioni del sistema o la logica del sistema di interruzione del tutto.

ci sono tre politiche di caching:

  1. caching completa (write-back). Applicato allo spazio indirizzo fisico mappato alla memoria principale (RAM). Utilizzato per aumentare le prestazioni delle prestazioni del sottosistema di memoria. La proprietà principale di tali dispositivi è che lo stato può essere modificato solo dal software e può influire solo sul software. L'implementazione dei file mappati in memoria utilizza il caching completo perché è implementato completamente da un software (sistema operativo) che legge il blocco di file dal disco e lo colloca nella memoria, quindi inserisce questo blocco (eventualmente modificato) sul disco.
  2. Cache di scrittura. Applicato ai dispositivi di output come memoria video mappata in memoria. La proprietà principale di tali dispositivi è che lo stato può essere modificato solo dal software, ma la modifica deve avere un effetto immediato sul dispositivo. In base a questa politica, i dati scritti sul registro IO Device mappato in memoria verranno posizionati contemporaneamente in due punti: nella cache e nel dispositivo. Ma quando verranno avviati i dati letti, i dati verranno catturati dalla cache senza un accesso expencive al dispositivo.
  3. Memorizzazione nella cache disabilitata. Applicato a quasi tutti gli IO Device, poiché la scrittura sul registro IO Device mappato in memoria deve avere immediato effetto e la lettura dal registro IO device mappato in memoria deve restituire al lettore dati effettivi dal dispositivo. Se il caching verrà applicato all'IO Device mappato in memoria, verranno introdotti due effetti negativi:
    1. La scrittura sul registro IO device mappato in memoria verrà ritardata fino al momento in cui il controller della cache deciderà di svuotare la riga della cache con dati scritti Come risultato, il guidatore non sarà in grado di sapere quando il comando scritto sul dispositivo avrà effetto.
    2. I dati di lettura dal registro IO Device mappato in memoria possono essere memorizzati nella cache. E i dati successivi letti dallo stesso registro IO-device mappato in memoria possono restituire dati non reali dal dispositivo, ma dati obsoleti dalla cache. A causa di ciò, sarà difficile guidare il driver per acquisire lo stato effettivo del dispositivo.

causa del fatto che il modo con cui il software può specificare politica caching è unico processore dipende lo stesso algoritmo può essere applicato in qualsiasi sistema operativo. Il modo più semplice è quello di acquisire il contenuto del registro CR3 e utilizzarlo per individuare la voce della tabella di pagina appropriata per l'indirizzo che si desidera sapere sulla politica di memorizzazione nella cache e controllare i flag PCD e PWT. Ma questo modo non è completo perché ci sono poche altre funzionalità che possono influenzare il caching (ad esempio, la memorizzazione nella cache può essere completamente disabilitata su CR0, vedere anche MTRR, PAT).

+0

Sono sorpreso che nessuno lo abbia ancora pubblicizzato. Bella risposta! –

1

Per aggiungere alla risposta esistente di ZarathustrA: Su Windows, SEC_NOCACHE giri di questa memorizzazione nella cache.C'è un SEC_WRITECOMBINE, ma sembra non funzionare (funziona solo con SEC_RESERVE o SEC_COMMIT, che significa solo con il file di pagina, e non si desidera impostare SEC_WRITECOMBINE su quello).

Problemi correlati