理由使用自定義的分配器在第三方過濾器:強制第三方DirectShow過濾器使用自定義的分配器
我有一個NUMA系統,並具有過濾器的性能問題,並丟棄錯誤的NUMA節點結果分配內存從相機收到的圖像。
我目前的做法:
我會寫的遍歷所有的過濾器,並要求他們,如果他們輸入引腳的分配的功能。然後,我要求這個分配器爲我的特殊分配器接口,最後如果沒有找到接口,我創建新的自定義分配器,並應用與以前的分配器相同的屬性。然後我在輸入引腳上調用NotifyAllocator
來通知它有關新的分配器。
我試圖在圖形構建的不同時間調用這個函數;目前在IMediaControl::Pause
和IMediaControl::Run
之前,但我的自定義分配器沒有被任何第三方過濾器使用。這些示例位於錯誤的NUMA節點上。
此外,我還跟蹤IMediaControl::Pause
通話過程中創建的線程和改變自己的線程關聯到正確的CPU因此通常這些DirectShow過濾器應該有正確的NUMA節點,他們應該自己動作CPU的NUMA節點上分配。
我猜測,但如何確保樣本在同一個NUMA節點上?分配器接口或「ALLOC_PROPERTIES」沒有任何選項來確保這種屬性。 也許我應該更專注於線程親和力,但這不是100%的工作解決方案 –
我不確定您是否可以可靠地實現這一點,所有工作都使用已建立的過濾器,而過濾器對NUMA一無所知。你應該有更多的選擇,你正在做一個自定義的過濾器 - 你自然選擇分配器,然後,你也可以控制你創建的線程和你從更遠流的線程。 –
在這種情況下,我們所說的第三方過濾器是一個視頻壓縮過濾器。所以最初的計劃是讓用戶從已安裝的壓縮過濾器中進行選擇,而不是創建自定義壓縮過濾器。 我能想到的唯一的其他解決方案是在視頻內存中完成所有處理。但是如果我沒有記錯的話,我需要重寫MFT中的所有內容。 –