2014-01-14 33 views
0

我有三個應用程序同時運行在一臺健壯的機器上(32GB內存)和32個CPU。這三個應用程序必須並行運行。其中兩個應用程序是C應用程序,它們是IO密集型的(它們不斷向磁盤寫入大量數據)。第三個應用程序是一個java應用程序,它基本讀取前兩個應用程序寫入的文件並寫入不同的文件。我可以順利地運行每個應用程序而沒有任何問題,但是當我嘗試將三者一起運行時,似乎第一個應用程序的CPU使用率很高,第三個應用程序的CPU使用率顯示爲0%。我正在使用Ubuntu Linux。我正試圖給予這些應用程序同等的進程優先權。任何想法是什麼問題?給予三種不同應用程序同等優先權

+1

默認情況下,它們具有相同的美好的事物(如優先級)設置你的IO調度檢查當前的調度。在其他文件正在寫入時,您如何安全地訪問文件進行讀取? –

+0

另一方面,寫入文件不是一個非常好的進程間通信(IPC)機制。對於你想解決的任何問題,可能有更好的解決方案。 –

+3

等待,如果它們是I/O限制的,爲什麼你關心它們消耗多少CPU時間?您不應該更關心您是否有效地利用(有限)I/O帶寬? – NPE

回答

1

好的我會回答我的問題,以防有人遇到同樣的問題。我的問題是我有一個不公平的磁盤調度器。對於Linux,有很多類型的IO調度器(截止時間,cfq,noop)。 CFQ是一個公平的調度程序,它是許多Linux發行版中的默認值......除了我的猜測!我將調度程序更改爲CFQ,現在它工作正常。 您可以使用命令

cat /sys/block/{device name}/queue/scheduler 

您可以使用命令

echo cfq > /sys/block/{device name}/queue/scheduler