
在Linux下的高效能設定(許多並發更新)中,這是更新磁碟上30k檔案的最有效方法:
1. 只需更新對應文件
2. 刪除舊文件並儲存新文件
我最關心的是磁碟存取時間,但處理器負載也可能是這裡的一個因素。
答案1
您使用的磁碟子系統和檔案系統將在這裡產生巨大的影響。事實上,有很多不同的可能結果,您可能應該對其進行基準測試。然而 :
- 請記住,SATA 硬碟的實際同步 IO 限制為大約 100 IOPS,SAS 硬碟限制為 200 IOPS,SSD 的限制為 10 IOPS 到 10000 IOPS。將 IOPS 數量乘以數據驅動器數量。
- 現代檔案系統將寫入操作聚集在一起。正確的檔案系統選擇和詳細的調整將使結果改變 10 到 100 倍。
- 現代儲存控制器可以快取寫入。正確的回寫式快取設定將再次將結果改變 10 到 1000 倍。
因此,適當的硬體(帶有WB 快取、SSD 的真正RAID 控制器)、適當的軟體(現代檔案系統、ext3 在這裡絕對是不可能的,我會選擇xfs,但ext4 是一個選項)和適當的調整(測試各種核心IO 調度程式) 、IO大小等設定)都會產生巨大的影響。
答案2
如果您經常更新它,那麼文件內容過時對您來說不太可能是問題。如果是這樣,請將其貼到 tmpfs 上,在更新時截斷檔案並重寫到其中。這將是最便宜的方法,因為它根本不可能使用磁碟。
接下來最接近的是截斷/寫入具有以下內容的檔案系統諾阿泰姆安裝選項設定和日誌記錄已關閉。但如果你崩潰了,這也是有風險的,因為你可能會失去資料。
之後,又到了午休時間,日記功能也打開了。
請記住,Linux 以確定的時間間隔緩衝寫入並同步到磁碟,因此從I/O 的角度來看,您通常不會「感受到」寫入的影響(除非寫入非常繁重,但這是可調的)。您也可以變更同步到磁碟的條件,這樣您就可以在同步到磁碟之前讓寫入緩衝區填滿相當長的時間。
如果您在做了一些非常聰明的事情之後..使用fallocate為文件預先分配空間,這將是其最大可能值。然後,mmap打開檔案將其直接讀取到記憶體中。然後重寫將幾乎是瞬時的(但如果斷電就會有損)。然後,您可以透過 msync 呼叫控制何時刷新回磁碟。
答案3
假設是平面文件,而不是資料庫文件,這兩種方法的優點和缺點確實是:
如果您只是就地覆蓋文件的內容,那麼您肯定會阻止重新分配步驟。所以你可能會在那裡節省一點時間。然而,碎片的放置可能不是最佳的。
根據磁碟碎片情況,您可能會獲得更優化的資料放置。但它會慢一點,因為必須分配空間,並且如果您在更安全的設定中運行,則在分配之前需要時間將區塊清除。