NTFS硬碟第一次寫操作很慢

2021-06-27 16:42:20 字數 817 閱讀 6614

之前將ntfs-3g移植到了ucos平台(硬體是mips), 測試中發現乙個問題: "某個大的硬碟(1t)第一次複製小檔案的速度很慢, 要1幾十秒的時間. 但是第二次就很快."

開啟ntfs的log, 發現是ntfs_cluster_alloc 這個函式呼叫 ntfs_attr_pread 幾千次去讀取bitmap檔案(1t硬碟的bitmap檔案大約是32m = 1t/4k/8).

這個函式會搜尋bitmap這個檔案, 根據需要的大小去尋找適合的位置去作為檔案的存放空間.

具體的過程是先從zone_data1先找合適的地方, 一直找到分割槽結束.

然後找zone_data2, 也就是從分割槽開始到zone_mft.

如果都找不到才打zone_mft的主意.

結果發現, 這個zone_data1前100g的空間所對應的cluster在bitmap中都被標記成了ff, 也就是說前100g的空間中沒有一點剩餘的空間了.

這樣的話, 需要去順序搜尋bitmap, 每次搜尋256個位元組(預設值是2048), 256b表示 256*8*4k 也就是8m的空間(因為系統記憶體限制, 幾乎沒有可能一次寫8m大小的檔案,預設值對應64m).

而100g的空間對應差不多3m的bitmap, 每次搜尋256b的話, 就很慢了.

修改方式就是針對大的硬碟, 將每次搜尋的範圍擴大到8k*8*4k=256m,這樣搜尋合適的剩餘空間的速度就大大加快, 只要4-5s就能完成搜尋分配空間.

而第二次之後都會比較快, 因為第一次操作後, 會更新vol->data1_zone_pos, 在函式ntfs_cluster_update_zone_pos中(在ntfs_cluster_alloc中呼叫).

第一次訪問頁面很慢

最近幾天遇到乙個問題,鬱悶了很久 只要 有一段時間沒有人訪問,那麼接下來第一次訪問 的人訪問速度變得很慢。在這裡記錄下解決的方式,希望可以幫助遇到同樣問題的朋友 asp.net 版本的 先說說我的執行環境 之所以會出現上面的問題,很明顯的乙個原因就是應用程式池被自動 了,再次訪問 速度就變慢了 不知...

第一次寫部落格

今天是我第一次寫自己的部落格 感到很激動 我是乙個程式設計師 之前一直看一些關於如何學習程式語言的貼子 大家都說學習一門語言 在於積累 而積累不能都考腦子儲存起來 需要整理成乙個自己的小金庫 在這個小金庫中有我在工作開發中遇到的乙個乙個的問題 我們往往對於新的問題要花費相對較長的時間去解決,對於我 ...

第一次寫部落格

這是我第一次寫部落格,也不知道到底該寫點什麼,感覺很多需要寫,但還是不那麼的自信,不論怎麼樣,還是希望能夠記錄一下自己作為一名程式猿這點點滴滴的事情,算是一段經歷吧。希望看到的人不要噴我。我是菜鳥,菜的不能再菜的鳥。大神就不要來嘲笑小弟了。剛開始寫程式還是跟著一群有志向大四的學長。可能就是這一點點的...