この投稿は、Windows 上の Linux での共有メモリのパフォーマンスの計算に関するものです。
私は Linux 開発の初心者です。
共有メモリからのパケット (サイズ 2048 バイト) がクライアント (プロセス 1) からサーバー (プロセス 2) に 1 秒間に転送される数を計算するクライアント サーバー アプリケーションを作成しました。
ウィンドウでは、
CreateFileMapping
OpenFileMapping
MapViewOfFile
関数を使用しています。共有メモリの同期には、クライアントとサーバーの両方で名前付きイベント (createevent) を使用しているため、共有メモリ ブロックで一度に読み取りまたは書き込み操作を実行できます。
また、構造内の循環バッファを共有メモリ ブロックとして使用しているため、サイズ 4096 の 512 共有ブロックになります。
struct block{
BYTE Data[4096];
long amount;
}
struct MemBuffer{
block m_Blocks[512];
...
...
}
FIFO方式として機能するように、何らかのロジックが実装されています。
Linuxの場合、posix共有メモリAPI
shm_open
ftruncate
mmap を使用しています
共有メモリ ブロックは同じです (Windows の場合と同じ) 同期セマフォが使用されます
今のパフォーマンス
Windows カウントは 1 秒あたり 700000 パケットです
Linux カウントは名前付きセマフォを使用して 1 秒あたり 500000 パケットです
Linux カウントは名前なしセマフォを使用して 1 秒あたり 600000 パケットです
このアプリケーション全体での私の観察によると、オーバーヘッドは同期であるため、同期のためのより良いアプローチや、Linux の共有メモリの全体的なパフォーマンスを向上させる方法を誰かが提案できますか?
前もって感謝します
アップデート:
Windows 2003 サーバーと Red Hat Enterprise Linux 6.0 でデュアル ブート マシンを使用しています。マシン構成は次のとおりです Intel Quad Core with 2.4 Ghz , 4GB RAM