データが処理され、圧縮され、4TBのメモリマッピングファイルに書き込まれている間、DMA転送を使用してハードウェアデバイスから〜4 * 50 MB / sの速度でデータを読み取るプロセスがあります。
各DMA転送は平均して20ミリ秒未満かかります。ただし、5分ごとに複数回DMAを送信すると最大300ミリ秒かかることがあります。これは大きな問題です。
これは、カーネルがダーティメモリマッピングページをディスクにフラッシュすることに関連している可能性があると思います。マッピングされたメモリへの書き込みを中止すると、DMA転送期間は大丈夫です。しかし、これがDMA転送にどのように/なぜ影響を与えるのかを混乱させ、これを防ぐ方法はありますか?
ハードウェアデバイスにはデータをバッファリングするメモリがありますが、DMA転送速度が遅すぎるとデータが失われます。
現在、私たちは4.1.10 ltsカーネルを使ってArch Linuxでテストしていますが、Ubuntu 14.04でもほとんど悪い結果を得ています。ハードウェアは、HP z820ワークステーション、32GB RAM、およびデュアルXeon E5-2637 @ 3.50Ghz(http://www8.hp.com/h20195/v2/GetPDF.aspx/c04111177.pdf)。
また、Windows版のソフトウェアを試しましたが、この特定の問題はありませんでしたが、他にも多くの問題がありました。
ベストアンサー1
Linuxには少しリアルタイムオプションですが、それ自体はリアルタイムカーネルではありません。これにより、プロセスは準備ができたらすぐに非リアルタイムプロセスの前にスケジュールするように要求し、必要に応じてCPUをスケジュールできます。
デフォルトでは、プロセスはSCHED_OTHERスケジューリングポリシーを提供します。実行中のpidが与えられたら、それをリアルタイムSCHED_FIFOに設定または起動するときにchrt -f -p prio pid
コマンドの前にプレフィックスを付けることができます。chrt -f prio
優先順位はprio
通常のプロセスとは関係がなく、リアルタイムプロセスがリソースを配置して競合する場合にのみ使用されます。 ps
これらの優先順位を負の値として表示します(例:リアルタイム優先順位20の場合は-21)。
ionice --class 1 -p pid
また、リアルタイムIOキューの優先順位を指定してプロセスをスケジュールするのに役立ちます。