clflush
意図的に DTLB をスラッシングし、TLB エントリが指すアドレスとは (おそらく) 切り離されたメモリ領域を使用して、L1-3 から特定のキャッシュ ラインをフラッシュしたいとします。これは実際に、フラッシュしているキャッシュラインのページベースアドレスを TLB に戻しますか?
要するに、clflush
まったくTLBに触れますか? コヒーレンシを尊重するこの命令により、その後、その行がメモリに書き戻されると想定しています (明らかに TLB ルックアップが必要です)。
clflush
意図的に DTLB をスラッシングし、TLB エントリが指すアドレスとは (おそらく) 切り離されたメモリ領域を使用して、L1-3 から特定のキャッシュ ラインをフラッシュしたいとします。これは実際に、フラッシュしているキャッシュラインのページベースアドレスを TLB に戻しますか?
要するに、clflush
まったくTLBに触れますか? コヒーレンシを尊重するこの命令により、その後、その行がメモリに書き戻されると想定しています (明らかに TLB ルックアップが必要です)。
Intel® 64 and IA-32 Architectures Software Developer's Manual, Volume 2A: Instruction Set Reference, AL: 「プロセッサ キャッシュ階層 (データと命令) のすべてのレベルから、ソース オペランドで指定された線形アドレスを含むキャッシュ ラインを無効にします。 ."
リニア (仮想) アドレスを使用するため、アドレスを変換する必要があります。つまり、TLB ミスの場合はページ テーブル ウォークが必要になります。(L1 キャッシュは通常 x86 用に物理的にタグ付けされているため、キャッシュ エントリをより高いレベルのキャッシュにプッシュする別の種類の命令の場合でも、これは一般的に当てはまります。一般に、仮想アドレスによるタグ付けは支持されなくなりました。タグの物理アドレスは、キャッシュのヒットをチェックするために物理アドレスが必要であることを意味するため、メモリに送信されなかったとしても、変換が必要になります。)
そのようなアクセスのために TLB のロードを回避することは可能ですが、CLFLUSH が一般的に使用されていないことを考えると、そのような特別なケースの処理の余分な複雑さは、ほとんどの場合、面倒な価値があるとは見なされません。