2011-05-16 51 views
0

我設計的服務器用於以下情形:的Linux:需要設計預取緩存文件從NAS到系統內存

  1. 一系列單個圖像的存儲在NAS,可以說100他們
  2. 一個客戶端連接到服務器通過TCP套接字,並請image39
  3. 服務器從NAS讀取image39並在插座
  4. 很可能是客戶端也將請求其他圖片來自系列中,因此發回給客戶端:
  5. 我想啓動一個線程,通過圖像迭代,讀取它們,並做了cat image39 > /dev/null強制緩存到內存中的服務器
  6. 線程將如下獲取圖像:image38,image40,image37,image41等
  7. 獲取已影像被忽略
  8. 如果客戶現在要求image77,我想重置取線程獲取:image76,image78等

這有可能擴展到許多系列和客戶端。大概在1000個併發的 預取的順序。我知道如果線程太多,線程可能會導致性能下降。換一個新的流程會更好嗎?有沒有比線程或進程更有效的方法?

謝謝!

回答

1

這是過早的優化。試着實現你的系統,不用伎倆來「強制」緩存,看看它是如何工作的。我敢打賭它會沒事的 - 而且如果事實證明你的詭計在系統上的其他事情上表現不佳,那麼你就不必擔心令人討厭的驚喜。

+0

謝謝,約翰。但是,我*需要這種優化。沒有它,客戶端每次請求映像時,NAS讀取都會增加延遲。增加預取可以消除這種延遲,但代價很複雜。 – Jacko 2011-05-16 10:57:30

+0

哦。你說你正在設計一個服務器,我認爲這是一個相當新的項目。如果您確定需要這樣的優化,我的兩個建議是制定一些基準來展示當前的性能,然後嘗試在固態驅動器(SSD)上運行它。 – 2011-05-17 01:52:06