從記憶體上傳到 S3 並對其進行基準測試

從記憶體上傳到 S3 並對其進行基準測試

我正在 S3 讀/寫上運行一些非常基本的時間命令。問題是,我不希望它受到系統IO的影響,並且想從記憶體中對其進行測試。一位朋友建議使用 /dev/null 作為管道,但我有一個包含 1000 個檔案的資料夾,大小約為 1GB。

我的 bash 命令現在看起來像這樣:

time aws s3 cp folder s3://mybucket/folder

你有什麼建議,只對記憶體中的寫入進行計時?

非常感謝

答案1

將目錄複製到 ramdisk,從那裡上傳(和測試)。

什麼虛擬磁碟?有幾個選項:

  1. 也許您的作業系統中已經有一個並且它的大小足夠大。檢查df(更方便的是:df -h,如果支援的話)類型檔案系統的輸出tmpfs。可能是/dev/shm。我希望/dev/shm它是世界可寫的,所以如果它是一個虛擬磁碟並且它不是太小,那麼你就可以使用它。

  2. 可能有一個專門供您的用戶使用的單獨的 ramdisk。看這個資料夾是什麼/run/user/1000在我的 Debian 或 Kubuntu 中,df -h "$XDG_RUNTIME_DIR"我可以確認它是 tmpfs,了解它的大小和掛載點。

  3. 這個答案給出瞭如何按需創建 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進程被終止。

相關內容