我正在 S3 讀/寫上運行一些非常基本的時間命令。問題是,我不希望它受到系統IO的影響,並且想從記憶體中對其進行測試。一位朋友建議使用 /dev/null 作為管道,但我有一個包含 1000 個檔案的資料夾,大小約為 1GB。
我的 bash 命令現在看起來像這樣:
time aws s3 cp folder s3://mybucket/folder
你有什麼建議,只對記憶體中的寫入進行計時?
非常感謝
答案1
將目錄複製到 ramdisk,從那裡上傳(和測試)。
什麼虛擬磁碟?有幾個選項:
也許您的作業系統中已經有一個並且它的大小足夠大。檢查
df
(更方便的是:df -h
,如果支援的話)類型檔案系統的輸出tmpfs
。可能是/dev/shm
。我希望/dev/shm
它是世界可寫的,所以如果它是一個虛擬磁碟並且它不是太小,那麼你就可以使用它。可能有一個專門供您的用戶使用的單獨的 ramdisk。看這個資料夾是什麼
/run/user/1000
?在我的 Debian 或 Kubuntu 中,df -h "$XDG_RUNTIME_DIR"
我可以確認它是 tmpfs,了解它的大小和掛載點。這個答案給出瞭如何按需創建 tmpfs 的範例(大小為 16 GiB,根據您的需求和資源進行調整):
mount -o size=16G -t tmpfs none /mnt/tmpfs
您需要 root 存取權限才能執行此操作。
有這樣一個問題:tmpfs 的大小由什麼決定?滿了會發生什麼事?你可能會覺得很有趣。
作為替代方案,您可以使用vmtouch
讀取目錄中的所有檔案並映射到虛擬記憶體中。如果我是你,我會更喜歡 ramdisk。不過,如果由於某種原因您無法使用 ramdisk,那麼最好了解一下vmtouch
可以做什麼。
作為普通用戶,您可以使用vmtouch -t
:
-t
觸碰虛擬記憶體頁面。從文件的每一頁讀取一個位元組。如果該頁面未駐留在記憶體中,則會產生頁面錯誤,並且該頁面將從磁碟讀取到檔案系統的記憶體快取中。
-t
可能還不夠:
注意:雖然保證每個頁面都已進入內存,但在命令
vmtouch
完成時該頁面可能會從內存中逐出。
作為 root 您可以使用vmtouch -l
:
-l
將頁面鎖定到實體記憶體。此選項的工作原理與此相同,-t
只是它調用mlock(2)
所有記憶體映射並且完成後不關閉描述符。爬行結束時,如果成功,vmtouch 將無限期阻塞。檔案將被鎖定在實體記憶體中,直到vmtouch
進程被終止。