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を有効化するか、残りはキャッシュの挙動に対する設定の模様。