![]() |
|
|
Googleのunix.com
|
|||||||
| 高レベルのプログラミング は、 C 、 C + +についての質問の投稿は、 Java 、 SQL 、および他のプログラミング言語です。 |
その他のUNIXおよびLinuxフォーラムトピックは参考にすること
|
||||
| スレッド | スレッドスターター | フォーラム | 返信 | 最後の投稿 |
| セマフォ | raguramtgr | UNIXのダミー質問と回答のため | 7 | 2009年6月15日 10:39午前 |
| セマフォ | Jaken | シェルプログラミングとスクリプティング | 2 | 2009年4月4日 06:10午後 |
| dmidecode 、 RAMの速度\u003d "現在の速度:不明" | サンティ | ファイルシステムは、ディスクとメモリ | 0 | 2006年2月16日 06:16午前 |
| セマフォ | vjsony | UNIXのダミー質問と回答のため | 3 | 2003年4月7日 03:06午後 |
| セマフォ | yls177 | UNIXのダミー質問と回答のため | 1 | 2002年10月9日 12:18午前 |
![]() |
|
|
LinkBack | スレッドツール | このスレッドを検索 |
評価:
|
表示モード |
|
|
|
||||
|
セマフォのアクセス速度
私はいくつかの方式を使用してセマフォのロックを調べている。私はいくつかの基本的なシステムセマフォ情報取得して表示するループの実行速度を評価するには: 一方: ;行う。 / semshow ;行わ> res.txt 私は3箱- SCOの一OpenServer 5を実行し、他のフェドーラ2.6.9 2つの似たような現代のHPのXeonボックス、および1つのボックスにLinux近代の下に古いPIII ( )は、この情報が走った。 その結果非常に直感的なカウンターがあります: 時間/週| OSの|の平均数秒のBERを実行 ---- | --- | ------------------------- のXeon |上海協力機構| 1700 のXeon |フェドーラ| 500 PIII | Linuxの(最近のディストリビューションは、不明) | 900 すべての3つのシステムのほとんどは、テスト実行時にアイドル状態だった。 私はお尋ねしたいのですが、何をアウトパフォームするには、モダンなOSに対応する方法を同じような古代のUnix OSの下で、現代のXeon PIIIボックスアウトパフォームボックス付属の要因も、となる。任意のpontersいただければ幸いです。 このプログラムは非常semshowは、下記を参照してください基本的な一覧です: コード:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/timeb.h>
#include <time.h>
#include "semlib.h"
#define MODE_CREATE 0
#define MODE_REMOVE 1
key_t IPCKEY;
main(int argc, char *argv[])
{
int sid, i;
pid_t last_rpid, last_wpid;
char dbuf[80];
union semun arg;
unsigned short vals[NSEMS];
struct timeb tb;
struct tm *tp;
if((IPCKEY = get_ipc_key()) == -1)
{
errexit("Can Not Obtain IPC Key");
}
if((sid = semget(IPCKEY, NSEMS, 0)) == -1)
{
errexit("Can Not Get Semaphore ID");
}
memset(vals, 0, sizeof(vals));
arg.array = &vals[0];
if(semctl(sid, NSEMS, GETALL, arg) == -1)
{
errexit("Can Not Get Semaphore Values");
}
if((last_rpid = semctl(sid, RDLOCK, GETPID)) == -1)
{
errexit("Can Not Get Semaphore R-Pid");
}
if((last_wpid = semctl(sid, WRLOCK, GETPID)) == -1)
{
errexit("Can Not Get Semaphore W-Pid");
}
ftime(&tb);
tp = localtime(&tb.time);
strftime(dbuf, sizeof(dbuf) - 1, "%T", tp);
printf("%12li.%03i %s RD:[%i] WR:[%i] %i/%i\n",
tb.time, tb.millitm, dbuf,
vals[RDLOCK], vals[WRLOCK],
last_rpid, last_wpid);
exit(0);
}
semlib.hこれらdefsしている: コード:
#define NSEMS 2
#define RDLOCK 0
#define WRLOCK 1
union semun {
int val;
struct semid_ds *buf;
unsigned short *array;
};
|
|
||||
|
はFedoraボックスをしている
/lib/tls/libc.so.6 - > libcの- 2.3.5.so そのためには、私は、バージョン2.3.5だと仮定します。 しかし、それは的外れだ。 第2回のシステムは、システム全体の電力を示すと、純粋なコード内のプログラムを実行したので、話をしてください。私の驚きPIIIにはLinuxで、多くのサイクルとしてのLinuxの下で2番目のXeon 3.2GHz以上withi 、ほぼ2回実行するように管理されます。昔の上海協力機構の下で次に同じOSRのXeon時間/週2回の速PIIIボックスとして実行してください。 |
|
||||
|
私は非常に基本的な最小限度には、 IPCのキーが私のプログラムを簡素化セマフォIDを取得し、セマフォの値を読み込み、それをラインに(時間とセマフォの値を出力) 。それは、すべてのことです。 それから次のように実行します: $ながら: ;行うtstshow ;行わ> x.txt キー割り込みと私はしばらく待ってからだった。 x.txtファイルのコンテンツのサンプル: 1221785538 [ 1,99 ] 1221785538 [ 1,99 ] 1221785538 [ 1,99 ] その後何回システムを実行するようにすれば見ることができた: $カット- cを- 12 x.txt | uniq - cを 出力のサンプル: 616 1221785538 615 1221785539 612 1221785540 tels私は、システムが1秒間に約600回はこの単純なプロセスを実行することが可能です。 私はここを繰り返すだけの結果と整合するように: PIII Linuxで- 900 回/秒 のXeon 3.2のLinux - 600 回/秒 SCO社のXeon 3.2 - 1800 回/秒 システムのテストの時にアイドル状態にしている。 どのようにして私が得た結果を説明するのでしょうか?私は、現代の時間にしようとしているボトルネックを見つける/ wでLinuxを実行している。 私の新たな簡素化コードの下を参照してください: コード:
#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <time.h>
#define NSEMS 2
main(int argc, char *argv[])
{
int sid;
ushort vals[NSEMS] = {0, 0};
if((sid = semget(get_ipc_key(), NSEMS, 0)) == -1)
{
errexit("Can Not Get Semaphore ID");
}
if(semctl(sid, NSEMS, GETALL, vals) == -1)
{
errexit("Can Not Get Semaphore Values");
}
printf("%12li [%i,%i]\n", time(NULL), vals[0], vals[1]);
exit(0);
}
|
![]() |
| ブックマーク |
| スレッドツール | このスレッドを検索 |
| 表示モード | このスレッド |
|
|