當前位置:首頁 » 操作系統 » linux磁碟讀寫

linux磁碟讀寫

發布時間: 2022-12-08 03:25:16

A. linux 關於文件讀寫的問題

1. 文件write操作是原子的,多個進程同時寫文件,原理上是沒問題的。但是問題會出現在:如果多個進程寫文件時是先lseek再write,就會出現覆蓋。打開文件時使用append標志可以使先lseek再write這個操作變成原子操作,這樣可以避免覆蓋。
2. 多線程共享一個文件句柄的話,是不會有問題的。
3.
4.linux讀寫磁碟文件過程中,一般情況下並不是直接操作磁碟上的文件,而是讀寫內存中的磁碟高速緩存,內核選擇合適的時機把臟頁同步到磁碟。所以讀寫文件時不立刻調用io不是因為你說的緩沖區,read和write是沒有緩沖區的。
5. fprintf和printf一樣,是有緩沖區的,不過大小我不知道,也沒必要知道吧。

B. linux下簡單的測試磁碟讀寫速率(轉載)

sudo hdparm -tT /dev/md0
/dev/md0:
Timing cached reads: 35164 MB in 1.99 seconds = 17656.01 MB/sec
Timing buffered disk reads: 818 MB in 3.01 seconds = 272.14 MB/sec

使用time命令和dd命令可以簡單測試硬碟的寫速率

C. Linux下測試磁碟讀寫速度(轉)

理論上復制量越大測試越准確。

命令解釋:

time 有計時作用,dd 用於復制,從 if 讀出,寫到 of。

if=/dev/zero 不產生 IO,因此可以用來測試純寫速度。

同理 of=/dev/null 不產生 IO,可以用來測試純讀速度。

bs 是每次讀或寫的大小,即一個塊的大小,count 是讀寫塊的數量。

D. Linux 系統下進行iozone 硬碟讀寫

iozone是一個文件系統的基準測試工具,可以全面測試不同操作系統中文件系統的讀寫性能

方法/步驟


命令及參數說明

-a:使用全面自動模式,使用的塊大小從4k到16M,在文件大於 32MB時將自動停止使用低於64K的塊大小測試,這節省了許多時間。

-z:與-a連用,測試所有的塊,強制iozone 在執行自動測試時包含小的塊;

-R:生成Excel報告。iozone將生成一個兼容Excel的標准輸出報告,這個文件可以使用Microsoft Excel打開,可以創建一個文件系統性能的圖表。注意:3D圖表是面向列的,畫圖時需要選擇這項,因為Excel默認處理面向行的數據;

-b filename : iozone輸出結果時將創建一個兼容Excel的二進制格式的文件。

-n:設置測試時最小文件大小

-g:設置測試時最大文件大小

-s:設置測試時文件大小

-f filename: 指定測試文件的名字,完成後會自動刪除(這個文件必須指定你要測試的那個硬碟中)

-y:指定測試塊的大小范圍,表示測試最小塊大小,需要和-a同時使用;

-q:指定測試塊的大小范圍,表示測試最大塊大小,需要和-a同時使用;

-r:指定測試的塊大小測試。

如果只在意讀/寫的性能,並不想花時間執行所有測試,可以像如下一樣限制測試內容

./iozone –Ra –g 2G –i 0 –i 1

-i :設置I/O測試模式(0=write/Re-write,1=read/Re-read,2=random-read/write,3=Read-backwards … 12=preadv/Re-preadv),這些別的詳細內容請查man

首先需要進入iozone3_397/src/current/路徑下,然後再執行下列命令

全面的自動測試模式,所有參數都是預設的,並且測試完成所有的操作,生成輸出結果iozone.xls,這個文件可以使用Microsoft Excel打開,執行下列命令:

./iozone -a -Rb /home/loongson/iozone.xls

自定義模式,設置最小測試文件為64M,最大測試文件為1G,只進行讀寫測試,並在當前路徑下生成輸出結果iozone.xls,在終端執行下列命令:

./iozone -a -n 64m -g 1G -i 0 -i 1 -Rb ./iozone.xls

設備當前內存大小是8G,需要指定內存大小的兩倍,並且從塊大小4K到16M結束全面測試;

./iozone -a -s 16g -Rb ./iozone.xls

6

掛載盤的測試,比如U盤等;首先要現將測試盤掛載到/mnt目錄下;

./iozone -a -n 1g -g 4g -i 0 -i 1 -f /mnt/iozone -Rb ./iozone.xls

7

設備當前內存大小是8G,需要指定內存大小的兩倍,並且從指定塊64k大小開始到16M結束全面測試;

./iozone -a -y 64k -s 16g -Rb ./iozone.xls

8

指定塊大小測試案例

./iozone -a -i 0 -i 1 -i 2 -s 8g -r 16m -Rb iozone.xls


E. linux怎麼計算io讀寫速度

Linux下測試磁碟的讀寫IO速度,使用hdparm命令,下面是測試方法:

#hdparm-Tt/dev/sda
/dev/sda:
Timingcachedreads:6676MBin2.00seconds=3340.18MB/sec
Timingbuffereddiskreads:218MBin3.11seconds=70.11MB/sec
#可以看到,2秒鍾讀取了6676MB的緩存,約合3340.18MB/sec;
#在3.11秒中讀取了218MB磁碟(物理讀),讀取速度約合70.11MB/sec;

F. Linux 如何測試 IO 性能(磁碟讀寫速度

linux下測試磁碟IO讀寫速度
[root@node3 /]# time dd if=/dev/sda2 of=/dev/null bs=8k count=524288
524288+0 records in
524288+0 records out
4294967296 bytes (4.3 GB) copied, 37.4222 seconds, 115 MB/s
real 0m37.497s
user 0m0.036s
sys 0m1.320s
了4.3G的數據,平均速度為115M/s

[root@node3 /]# hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 284 MB in 3.00 seconds = 94.55 MB/sec

[root@node3 /]# hdparm -t /dev/sda2
/dev/sda2:
Timing buffered disk reads: 292 MB in 3.02 seconds = 96.82 MB/sec

讀了將近300M的數據,平均速度大約為95M/s
經過以上的測試數據大體估算該磁碟的性能大約為100M/s

G. 【Linux入門】Linux系統中如何提高磁碟的讀寫性能嗎

Linux操作系統一般指Linux,它是一種免費使用和自由傳播的類Unix操作系統,被廣泛的應用於伺服器、桌面、嵌入式等領域。那麼你知道Linux系統中如何提高磁碟的讀寫性能嗎?如何實現磁碟冗餘?raid和lvm可以幫你輕松解決。

說起raid和lvm,相信很多人就會說既然他們都可以解決問題,那麼raid和lvm有什麼區別?我通過這篇文章為大家簡單介紹一下。

LVM:主要側重動態磁碟擴容

全稱邏輯卷管理,是一個動態擴展磁碟分區容量的功能性工具,對於測試環境,可以用來管理磁分區滿了,擴容,但是在大規模環境性能低下,盡量不要使用它。

RAID:主要側重磁碟性能和數據安全

磁碟陣列可以把多個磁碟驅動器通過不同的連接方式連接在一起協同工作,大大提高了讀取速度,同時把磁碟系統的可靠性提高到接近無錯的境界,使其可靠性極高。

用RAID最直接的好處是:

1)提升數據安全性。2)提升數據讀寫性能。3)提供更大的單一邏輯磁碟數據容量存儲

H. linux怎樣提升磁碟讀寫性能

關於頁面緩存的信息,可以用
cat /proc/meminfo
看到。其中的Cached 指用於pagecache的內存大小(diskcache-SwapCache)。隨著寫入緩存頁,Dirty 的值會增加。
一旦開始把緩存頁寫入硬碟,Writeback的值會增加直到寫入結束。

Linux 用pdflush進程把數據從緩存頁寫入硬碟,查看有多少個pdflush進程
cat /proc/sys/vm/nr_pdflush_threads

pdflush的行為受/proc/sys/vm中的參數的控制
/proc/sys/vm/dirty_writeback_centisecs (default 500):
1/100秒, 多長時間喚醒pdflush將緩存頁數據寫入硬碟。默認5秒喚醒2個(更多個)線程。
如果wrteback的時間長於dirty_writeback_centisecs的時間,可能會出問題。

pdflush的第一件事是讀取
/proc/sys/vm/dirty_expire_centiseconds (default 3000)
1/100秒。緩存頁里數據的過期時間(舊數據),在下一個周期內被寫入硬碟。默認30秒是一個很長的時間。

第二件事是判斷內存是否到了要寫入硬碟的限額,由參數決定:
/proc/sys/vm/dirty_background_ratio (default 10)
百分值,保留過期頁緩存(臟頁緩存)的最大值。是以MmeFree+Cached-Mapped的值為基準的

pdflush寫入硬碟看兩個參數:
1 數據在頁緩存中是否超出30秒,如果是,標記為臟頁緩存;
2 臟頁緩存是否達到工作內存的10%;

以下參數也會影響到pdflush
/proc/sys/vm/dirty_ratio (default 40)
總內存的最大百分比,系統所能擁有的最大臟頁緩存的總量。超過這個值,開啟pdflush寫入硬碟。如果cache增長快於pdflush,那麼整個系統在40%的時候遇到I/O瓶頸,所有的I/O都要等待cache被pdflush進硬碟後才能重新開始。

對於有高度寫入操作的系統
dirty_background_ratio: 主要調整參數。如果需要把緩存持續的而不是一下子大量的寫入硬碟,降低這個值。
dirty_ratio: 第二調整參數。

Swapping參數
/proc/sys/vm/swappiness
默認,linux傾向於從物理內存映射到硬碟緩存,保持硬碟緩存盡可能大。未用的頁緩存會被放進swap區。
數值為0,將會避免使用swapping
100,將會盡量使用swapping
少用swapping會增加程序的響應速度;多用swapping將會提高系統的可用性。

如果有大量的寫操作,為避免I/O的長時間等待,可以設置:
$ echo 5 > /proc/sys/vm/dirty_background_ratio
$ echo 10 > /proc/sys/vm/dirty_ratio

文件系統數據緩沖需要頻繁的內存分配。加大保留內存的值能提升系統速度和穩定。小於8G的內存,保留內存為64M,大於8G的設置為256M
$ echo 65536 > /proc/sys/vm/min_free_kbytes


I/O 調度器
cat /sys/block/[disk]/queue/scheler

4中調度演算法
noop anticipatory deadline [cfq]
deadline : deadline 演算法保證對既定的IO請求以最小的延遲時間。
anticipatory: 有個IO發生後,如果又有進程請求IO,則產生一個默認6ms猜測時間,猜測下一個進程請求IO是干什麼。這對於隨機讀取會造成較大的延時。
資料庫應用很糟糕,而對於Web Server等則會表現不錯。
cfq: 對每個進程維護一個IO隊列,各個進程發來的IO請求會被cfq以輪循方式處理,對每一個IO請求都是公平。適合離散讀的應用。
noop: 對所有IO請求都用FIFO隊列形式處理。默認IO不會存在性能問題。

改變調度器
$ echo deadline > /sys/block/sdX/queue/scheler
對於資料庫伺服器,deadline演算法是推薦的。

提高調度器請求隊列的
$ echo 4096 > /sys/block/sdX/queue/nr_requests

有大量的讀請求,默認的請求隊列應付不過來,可以提高這個值。缺點是要犧牲一定的內存。
為了增加連續讀取的吞吐量,可以增加預讀數據量。預讀的實際值是自適應的,所以使用一個較高的值,不會降低小型隨機存取的性能。
$ echo 4096 > /sys/block/sdX/queue/read_ahead_kb
如果LINUX判斷一個進程在順序讀取文件,那麼它會提前讀取進程所需文件的數據,放在緩存中。伺服器遇到磁碟寫活動高峰,導致請求處理延遲非常大(超過3秒)。通過調整內核參數,將寫活動的高峰分布成頻繁的多次寫,每次寫入的數據比較少。這樣可以把尖峰的寫操作削平成多次寫操作。以這種方式執行的效率比較低,因為內核不太有機會組合寫操作。但對於繁忙的伺服器,寫操作將更一致地進行,並將極大地改進互動式性能。

/proc/sys/vm/dirty_ratio

控制文件系統的寫緩沖區的大小,單位是百分比,表示占系統內存的百分比,表示當寫緩沖使用到系統內存多少的時候,開始向磁碟寫出數據。增大之會使用更多系統內存用於磁碟寫緩沖,也可以極大提高系統的寫性能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值。

/proc/sys/vm/dirty_background_ratio

控制文件系統的pdflush進程,在何時刷新磁碟。單位是百分比,表示系統內存的百分比,pdflush用於將內存中的內容和文件系統進行同步,比如說,當一個文件在內存中進行修改,pdflush負責將它寫回硬碟.每當內存中的垃圾頁(dirty page)超過10%的時候,pdflush就會將這些頁面備份回硬碟.增大之會使用更多系統內存用於磁碟寫緩沖,也可以極大提高系統的寫性能。但是,當你需要持續、恆定的寫入場合時,應該降低其數值:

/proc/sys/vm/dirty_writeback_centisecs

控制內核的臟數據刷新進程pdflush的運行間隔。單位是 1/100 秒。預設數值是500,也就是 5 秒。如果你的系統是持續地寫入動作,那麼實際上還是降低這個數值比較好,這樣可以把尖峰的寫操作削平成多次寫操作。
如果你的系統是短期地尖峰式的寫操作,並且寫入數據不大(幾十M/次)且內存有比較多富裕,那麼應該增大此數值。
該參數的設置應該小於dirty_expire_centisecs,但也不能太小,太小I/O太頻繁,反而
使系統性能下降。具體可能需要在生產環境上測試。據說1:6 (dirty_expire_centisecs : dirty_writeback_centisecs )的比例比較好。

/proc/sys/vm/dirty_expire_centisecs

聲明Linux內核寫緩沖區裡面的數據多「舊」了之後,pdflush進程就開始考慮寫到磁碟中去。單位是 1/100秒。預設是 30000,也就是 30 秒的數據就算舊了,將會刷新磁碟。對於特別重載的寫操作來說,這個值適當縮小也是好的,但也不能縮小太多,因為縮小太多也會導致IO提高太快。
當然,如果你的系統內存比較大,並且寫入模式是間歇式的,並且每次寫入的數據不大(比如幾十M),那麼這個值還是大些的好。

/proc/sys/vm/vfs_cache_pressure

表示內核回收用於directory和inode cache內存的傾向;預設值100表示內核將根據pagecache和swapcache,把directory和inode cache保持在一個合理的百分比;降低該值低於100,將導致內核傾向於保留directory和inode cache;增加該值超過100,將導致內核傾向於回收directory和inode cache

/proc/sys/vm/min_free_kbytes

表示強制Linux VM最低保留多少空閑內存(Kbytes)。
預設設置:724(512M物理內存)

/proc/sys/vm/nr_pdflush_threads

表示當前正在運行的pdflush進程數量,在I/O負載高的情況下,內核會自動增加更多的pdflush進程。

/proc/sys/vm/overcommit_memory

指定了內核針對內存分配的策略,其值可以是0、1、2。

0, 表示內核將檢查是否有足夠的可用內存供應用進程使用;如果有足夠的可用內存,內存申請允許;否則,內存申請失敗,並把錯誤返回給應用進程。

1, 表示內核允許分配所有的物理內存,而不管當前的內存狀態如何。

2, 表示內核允許分配超過所有物理內存和交換空間總和的內存(參照overcommit_ratio)。

預設設置:0

/proc/sys/vm/overcommit_ratio

如果overcommit_memory=2,可以過載內存的百分比,通過以下公式來計算系統整體可用內存。系統可分配內存=交換空間+物理內存*overcommit_ratio/100
預設設置:50(%)

/proc/sys/vm/page-cluster

表示在寫一次到swap區的時候寫入的頁面數量,0表示1頁,1表示2頁,2表示4頁。
預設設置:3(2的3次方,8頁)

/proc/sys/vm/swapiness

表示系統進行交換行為的程度,數值(0-100)越高,越可能發生磁碟交換。

更改:
/etc/sysctl.conf

vm.dirty_ratio=40

sysctl -p

查看:

find /proc/sys/vm -name dirty* -print | while read name; do echo $name ;cat ${name}; done

I. 如何測試linux磁碟的讀寫速度

功能說明:顯示與設定硬碟的參數。

語法:hdparm [-CfghiIqtTvyYZ][-a <快取分區>][-A <0或1>][-c ][-d <0或1>][-k <0或1>][-K <0或1>][-m <分區數>][-n <0或1>][-p ][-P <分區數>][-r <0或1>][-S <時間>][-u <0或1>][-W <0或1>][-X <傳輸模式>][設備]

補充說明:hdparm可檢測,顯示與設定IDE或SCSI硬碟的參數。

測試各硬碟讀取速度判斷硬碟故障

在服務端命令窗口中執行如下命令

hdparm -t /dev/hda (IDE硬碟)

hdparm -t /dev/sda (SATA、SCSI、硬RAID卡陣列)

hdparm -t /dev/md0 (軟RAID設備)

測試結果在空載情況下應 >40M/s ,在負載情況下平均應 > 20M/s 為正常,如測試結果極低則需要進一步使用硬碟專用檢測工具測試是否為硬碟故障。

參數:

-a<快取分區> 設定讀取文件時,預先存入塊區的分區數,若不加上<快取分區>選項,則顯示目前的設定。

-A<0或1> 啟動或關閉讀取文件時的快取功能。

-c 設定IDE32位I/O模式。

-C 檢測IDE硬碟的電源管理模式。

-d<0或1> 設定磁碟的DMA模式。

-f 將內存緩沖區的數據寫入硬碟,並清楚緩沖區。

-g 顯示硬碟的磁軌,磁頭,磁區等參數。

-h 顯示幫助。

-i 顯示硬碟的硬體規格信息,這些信息是在開機時由硬碟本身所提供。

-I 直接讀取硬碟所提供的硬體規格信息。

-k<0或1> 重設硬碟時,保留-dmu參數的設定。

-K<0或1> 重設硬碟時,保留-APSWXZ參數的設定。

-m<磁區數> 設定硬碟多重分區存取的分區數。

-n<0或1> 忽略硬碟寫入時所發生的錯誤。

-p 設定硬碟的PIO模式。

-P<磁區數> 設定硬碟內部快取的分區數。

-q 在執行後續的參數時,不在屏幕上顯示任何信息。

-r<0或1> 設定硬碟的讀寫模式。

-S<時間> 設定硬碟進入省電模式前的等待時間。

-t 評估硬碟的讀取效率。

-T 平谷硬碟快取的讀取效率。

-u<0或1> 在硬碟存取時,允許其他中斷要求同時執行。

-v 顯示硬碟的相關設定。

-W<0或1> 設定硬碟的寫入快取。

-X<傳輸模式> 設定硬碟的傳輸模式。

-y 使IDE硬碟進入省電模式。

-Y 使IDE硬碟進入睡眠模式。

-Z 關閉某些Seagate硬碟的自動省電功能。

熱點內容
隨機啟動腳本 發布:2025-07-05 16:10:30 瀏覽:525
微博資料庫設計 發布:2025-07-05 15:30:55 瀏覽:24
linux485 發布:2025-07-05 14:38:28 瀏覽:304
php用的軟體 發布:2025-07-05 14:06:22 瀏覽:754
沒有許可權訪問計算機 發布:2025-07-05 13:29:11 瀏覽:431
javaweb開發教程視頻教程 發布:2025-07-05 13:24:41 瀏覽:698
康師傅控流腳本破解 發布:2025-07-05 13:17:27 瀏覽:240
java的開發流程 發布:2025-07-05 12:45:11 瀏覽:685
怎麼看內存卡配置 發布:2025-07-05 12:29:19 瀏覽:283
訪問學者英文個人簡歷 發布:2025-07-05 12:29:17 瀏覽:834