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

linux讀寫磁碟

發布時間: 2022-05-26 01:24:00

A. linux 內核怎麼讀寫磁碟扇區

linux下可以使用hdparm命令查看硬碟的信息。 你可以在C語言裡面,調用hdparm,並獲取其輸出信息即可。 也可以查找hdparm程序的源代碼,把查找序列號的代碼加進來。

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

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

C. 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

D. linux如何記錄讀寫硬碟的程序

應該有個lsof -i吧,查看當前所有有文件都寫的進程

E. 如何測試Linux磁碟的讀寫速度

用法:
1.測試IO讀
hdparm -t --direct /dev/sda3

IO讀用上面的命令測試即可,不過 hdparm 這個工具需要自己安裝,而且需要root用戶去執行。

2.測試IO寫
sync;/usr/bin/time -p bash -c "(dd if=/dev/zero of=test.dd bs=1000K count=20000;sync)"

dd bs=1M count=20000 if=/dev/zero of=test.dd conv=fdatasync dd命令測試是IO的順序寫和讀方式。

3.查看文件系統塊大小

tune2fs -l /dev/sda1 | grep Block

上面的命令行有些復雜,做下詳細的解釋:
(1)sync 命令用來刷新文件系統的緩沖區,執行sync命令實際的作用是把內存中的數據緩沖寫入到磁碟中。
先執行下sync命令,是為了減少對後面測試的影響。也可以使用 echo 3 > /proc/sys/vm/drop_caches 來清除緩存。
(2)time 命令用來測試命令的執行時間,shell內建還有一個time命令,我們這里使用全路徑來指定使用的是非內建命令。
-p 選項設置時間的輸出格式為POSIX預設時間格式,單位是秒,在後面的測試小節可以看到time -p 的輸出形式。
(3)bash 命令 -c 選項的作用是將後面的字元串參數當作bash腳本來執行,看起來有些畫蛇添足,好像直接執行也是可行的,
其實不然,因為後面字元串中包含了兩條命令行,而time命令需要統計這兩條命令行的執行時間。
(4)小括弧的意思是另起一個子進程來執行括弧中的腳本,dd 這條命令行這里就不講了,不知道的話Bai吧。
重點是sync命令,因為當dd退出時,這條命令行提交的大部分內容都在內存緩沖區(寫緩存),甚至如果機器的內存相比於你提交的數據要大得多,
那可能數據都在內存中,而再執行sync才能將內存中的數據寫入到磁碟中,否則就成了測試內存的寫速度,那顯然不是你想要的結果。

F. 如何測試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硬碟的自動省電功能。

G. linux怎麼把信息直接寫入磁碟

如果想在Linux系統下,把信息直接寫入磁碟,一般是採用文本編輯器vim來創建文件的方法寫入的:vim file 是一個新文件,也可以是原有文件。這樣的命令執行後將打開編輯器,顯示文件file的內容。如果是一個新文件,底部左邊會顯示"file"
[新文件]的字樣,右邊顯示0,0-1表示當前游標所在行數和字元數。如果打開的是一個老文件,底部左邊顯示"file" 3L,
66C字樣,表示文件名,當前游標所處行號,文件總位元組數。文件中沒有字元的地方會以字元~開頭。

文本編輯器vim的具體使用方法,樓主可以參考這篇文章:http://www.linuxprobe.com/linux-vim-commend.html
更多Linux操作知識,樓主可以網路《Linux就該這么學》,希望能幫到樓主!

H. 在linux中查看有多少磁碟讀寫請求

安裝 yum install -y sysstat
或者

用iostat查看磁碟/dev/sdc3的磁碟i/o情況,每兩秒刷新一次
$ iostat -d -x /dev/sdc3 2

I. 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


J. 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

熱點內容
學cnc數控編程 發布:2024-10-27 11:04:56 瀏覽:226
mallat演算法 發布:2024-10-27 11:03:57 瀏覽:33
講腳本 發布:2024-10-27 10:47:54 瀏覽:713
存儲免疫細胞 發布:2024-10-27 10:46:56 瀏覽:493
粉標溯源碼 發布:2024-10-27 10:44:28 瀏覽:139
網吧伺服器如何搭建 發布:2024-10-27 10:27:49 瀏覽:391
安卓手機如何設置不讓玩王者榮耀 發布:2024-10-27 10:27:43 瀏覽:762
沒有配置的游戲怎麼玩 發布:2024-10-27 10:25:32 瀏覽:431
c語言好看 發布:2024-10-27 10:14:25 瀏覽:604
java寫入數組 發布:2024-10-27 10:06:59 瀏覽:178