Direct Cache Accessについて理解を深める為、NICのデータシートも読んでみる
DCA対応NICはいくつかあるようだが、例えばIntel® 82598 10 GbE Controller Datasheetの3.5.6 DCAに書いてある。
これによると、初期化時にドライバは送り先CPU ID・CPU Bus IDを設定してDCAを初期化する必要があり、DCAが有効化されるとPCIe TLBヘッダのTAG fieldにprefetchに必要な情報が入るようになるらしい。
DCAの設定はDCA_RXCTRLレジスタとDCA_TXCTRLレジスタで設定出来る。
DCA_RXCTRL(0x02200-0x0223C; RW)のフィールドは以下のとおり:
CPUID | 4:0 |
RX Descriptor DCA EN | 5 |
RX Header DCA EN | 6 |
RXdescReadNSEn | 8 |
RXdescReadROEn | 9 |
RXdescWBNSen | 10 |
RXdescWBROen | 11 |
RXdataWriteNSEn | 12 |
RXdataWriteROEn | 13 |
RXRepHeaderNSEn | 14 |
RxRepHeaderROEn | 15 |
CPUIDは送り先CPUの指定で、次の二つはDescriptorとヘッダに対してDCAを有効化するか、残りはキャッシュの挙動に対する設定の模様。