cout << ", server = " << data.cps << endl;
tim = new uint64_t[num];
uint64_t tim2;
uint8_t *bufin = new uint8_t[blk];
*bufou = new uint8_t[blk];
// ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°
int32_t node = netmgr_strtond(PATH, NULL);
// ΡΡΠΎ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ: Π΅ΡΠ»ΠΈ Π² ΠΈΠΌΠ΅Π½ΠΈ Π½Π΅Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΏΡΠ΅ΡΠΈΠΊΡΠ° ΠΏΡΡΠΈ,
// Π½ΠΎ ΡΡΠΎ ΠΈΠΌΡ ΡΠ΄Π°Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡ, ΡΠΎ ΡΡΠΎ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Ρ ΠΎΡΡ!
if (node == -1 && fd > 0 && errno == ENOENT)
node = ND_LOCAL_NODE;
// ΠΏΠΎ Π°Π΄ΡΠ΅ΡΠ½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΌ ΡΠ°Π½Π΅Π΅ ΠΏΠΎ read(), ΡΠΎΠ·Π΄Π°Π΅ΠΌ ΠΊΠ°Π½Π°Π»
// Π΄Π»Ρ ΠΏΡΡΠΌΠΎΠ³ΠΎ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠΌ:
int coid = ConnectAttach(node, data.pid, data.chid, _NTO_SIDE_CHANNEL, 0);
if (coid < 0) exit("connect to message channel");
cout << " - message exchange:" << flush;
// ΠΎΠ±ΠΌΠ΅Π½ ΠΏΠΎ ΠΊΠ°Π½Π°Π»Ρ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
for (int i = 0; i < num; i++) {
tim[i] = ClockCycles();
if (MsgSend(coid, bufou, blk, bufin, blk) == -1)
exit("exchange data with channel");
tim[i] = ClockCycles() - tim[i];
}
outtim();
ConnectDetach(coid);
// ΠΏΠΎΠ²ΡΠΎΡΡΠ΅ΠΌ Π² ΡΠΎΡΠ½ΠΎΡΡΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΠΌΠ΅Π½, Π½ΠΎ ΠΏΠΎ Π·Π°ΠΏΡΠΎΡΡ devctl()
unsigned int DCTL = (blk<<16) + DCMD_SRR;
cout << "- manager exchange:" << flush;
for (int i = 0; i < num; i++) {
tim[i] = ClockCycles();
if (devctl(fd, DCTL, bufou, blk, NULL) ! = EOK)
exit("DEVCTL error");
tim[i] = ClockCycles() - tim[i];
}
outtim();
close(fd);
delete [] bufin;
delete [] bufou;
delete [] tim;
return EXIT_SUCCESS;
}
Π‘ΠΌΠΎΡΡΠΈΠΌ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈ ΠΎΡΠ΅Π½ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π°Π΅Ρ Π½Π°ΠΌ ΡΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° (Π·Π½Π°ΠΊΠΎΠΌ ΠΎΡΠΌΠ΅ΡΠ΅Π½ΠΎ Π‘.Π.Π. ΠΏΡΠ΅Π΄ΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Π΅ΠΌΡ Π² Π²ΡΠ²ΠΎΠ΄Π΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠ΅Π΄Π½Π΅ΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Ρ, ΠΏΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ β ΠΏΡΠΎΡΠ΅Π½ΡΠ½ΠΎΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ Π‘.Π.Π. ΠΊ ΠΈΠ·ΠΌΠ΅ΡΡΠ΅ΠΌΠΎΠΉ Π²Π΅Π»ΠΈΡΠΈΠ½Π΅):
# nice -n-19 cli -b1 -m1000
SRR client: vers. 1.03
server path: /dev/srr, block size = 1 bytes, repeat = 1000
CPU speed [c.p.s.]: client = 534639500, server = 534639500
- message exchange: 2693 ~168 {6%}
- manager exchange: 6579 ~357 {5%}
# nice -n-19 cli -b10 -m1000
SRR client: vers. 1.03
server path: /dev/srr, block size = 10 bytes, repeat = 1000
CPU speed [c.p.s.]: client = 534639500, server = 534639500
- message exchange: 2726 ~258 {9%}
- manager exchange: 6725 ~378 {6%}
# nice -n-19 cli -b100 -m1000
SRR client: vers. 1.03
server path: /dev/srr, block size = 100 bytes, repeat = 1000
CPU speed [c.p.s.]: client = 534639500, server = 534639500
- message exchange: 3351 ~190 {6%}
- manager exchange: 7055 ~414 {6%}
# nice -n-19 cli -b1000 -m1000
SRR client: vers 1.03
server path: /dev/srr, block size = 1000 bytes, repeat = 1000
CPU speed [c.p.s.]: client = 534639500, server = 534639500
- message exchange: 3912 ~369 {9%}
- manager exchange: 8312 ~4024 {48%}
# nice -n-19 cli -b4000 -m1000
SRR client: vers 1.03
server path: /dev/srr, block size = 4000 bytes, repeat = 1000
CPU speed [c.p.s.] client = 534639500, server = 534639500
- message exchange: 5393 ~518 {10%}
- manager exchange: 10666 ~770 {7%}
# nice -n-19 cli -b6000 -m1000
SRR client vers 1.03
server path /dev/srr, block size = 6000 bytes, repeat = 1000
CPU speed [c.p.s.]: client = 534639500, server = 534639500
- message exchange: 7373 ~612 {8%}
- manager exchange: 12423 ~995 {8%}
# nice -n-19 cli -b1000 -m1000
SRR client: vers. 1.03
server path /dev/srr, block size = 10000 bytes, repeat = 1000
CPU speed [c.p.s.]: client = 534639500, server = 534639500
- message exchange: 14365 ~953 {7%}
- manager exchange: 16018 ~5399 {34%}
ΠΡΠΎ Π΄Π°Π΅Ρ Π½Π°ΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ:
β’ ΠΠ±ΠΌΠ΅Π½ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ Π½Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ Ρ ΠΎΡΡΠ΅, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ: ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΏΠ΅ΡΠ΅ΡΠ»Π°Π² Π·Π°ΠΏΡΠΎΡ ΡΠ΅ΡΠ²Π΅ΡΡ, Π±Π»ΠΎΠΊΠΈΡΡΠ΅ΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΠΎΡΠ²Π΅ΡΠ° ΠΎΡ Π½Π΅Π³ΠΎ. Π ΡΡΠΈΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΠΌΡ Π·Π°Π³ΡΡΠΆΠ°Π΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π½Π° 100% ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ Π°ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ°.
β’ ΠΠ±ΠΌΠ΅Π½ Π² ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΌ ΠΊΠ°ΠΊ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ ΡΠ΅ΡΡΡΡΠ°, ΡΡΠ΅Π±ΡΠ΅Ρ (Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ Ρ ΠΏΡΡΠΌΡΠΌ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠΌ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ) Π² 1,12β2,44 ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅Π΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ² Π½Π° ΡΠ²ΠΎΠ΅ ΠΎΠ±ΡΠ»ΡΠΆΠΈΠ²Π°Π½ΠΈΠ΅, ΠΈΠ»ΠΈ, Π² ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ°Ρ , ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π΄ΠΎΡΡΠΈΠΆΠΈΠΌΠ°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΠΌΠ΅Π½ΡΡΠ΅ Π½Π° 12β144% .
β’ Π‘Π°ΠΌΡΠ΅ Π½Π΅Π±Π»Π°Π³ΠΎΠΏΡΠΈΡΡΠ½ΡΠ΅ (144%) Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ (1β10 Π±Π°ΠΉΡ); Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΎΡΡΡΠΈΠΌΠΎΠ΅ (~2) Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΡΠΎΠ³ΠΎ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π΄ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π±Π»ΠΎΠΊΠΎΠ² Π΄Π°Π½Π½ΡΡ , ΡΠ°Π²Π½ΡΡ 8β10 ΠΠ±Π°ΠΉΡ.
β’ ΠΠ°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ Π½Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΅Π΄ΠΈΠ½ΠΈΡΠ½ΠΎΠ³ΠΎ Π±Π°ΠΉΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ Π²Π΅Π»ΠΈΠΊΠΈ (2693 ΡΠΈΠΊΠ»ΠΎΠ² Π½Π° Π±Π°ΠΉΡ ΠΏΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ 6579 ΡΠΈΠΊΠ»ΠΎΠ² Π½Π° Π±Π°ΠΉΡ β Π΄Π»Ρ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ°) ΠΏΡΠΈ ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠΎΡΠΎΡΠΊΠΈΠΌΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ. Π‘ ΡΠΎΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΌΠ° Π΄Π°Π½Π½ΡΡ , ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠΈΠΊΠ» ΠΎΠ±ΠΌΠ΅Π½Π°, ΡΡΠΎΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΎΡΠ΅Π½Ρ ΡΠ΅Π·ΠΊΠΎ ΠΏΠ°Π΄Π°Π΅Ρ (Π½Π° Π±Π»ΠΎΠΊΠ°Ρ ΠΏΠΎ 100 Π±Π°ΠΉΡ ΡΠΆΠ΅ 33,5 ΠΈ 70 ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Ρ.Π΅. 2 ΠΏΠΎΡΡΠ΄ΠΊΠ°). ΠΠ»Ρ ΡΠΈΡΡΠ΅ΠΌ Ρ ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΡΡΡΠ΅ΠΌΠΈΡΡΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΡΠΈΡΠ»ΠΎ Π°ΠΊΡΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π°.
Π’Π΅ΠΏΠ΅ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΠΌ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅, Π½ΠΎ ΠΏΡΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Ρ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π»ΠΎΠΊΠ°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π½ΡΠΌ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ Ρ ΠΎΡΡΠ΅ ΡΠ΅ΡΠΈ (ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ Π½ΠΈΠ·ΠΊΠΎΡΠΊΠΎΡΠΎΡΡΠ½ΡΡ ΡΠ΅ΡΡ 10 ΠΠ±ΠΈΡ/ΡΠ΅ΠΊ, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅ ΡΡΡΠ΅ΠΊΡΡ Π±ΠΎΠ»Π΅Π΅ Π½Π°Π³Π»ΡΠ΄Π½Ρ):
# nice -n-19 cli -nrtp -b1 -m500
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 1 bytes, repeat = 500
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 671017 ~391587 {58%}
- manager exchange: 712181 ~394844 {55%}
# nice -n-19 cli -nrtp -b10 -m500
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 10 bytes, repeat = 500
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 642456 ~380313 {59%}
- manager exchange: 743094 ~423717 {57%}
# nice -n-19 cli -nrtp -b100 -m500
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 100 bytes, repeat = 500
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 878686 ~432230 {49%}
- manager exchange: 907474 ~420140 {46%}
# nice -n-19 cli -nrtp -b1000 -m500
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 1000 bytes, repeat = 500
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 2064542 ~358333 {17%}
- manager exchange: 2113638 ~372487 {18%}
# nice -n-19 cli -nrtp -b3000 -m200
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 3000 bytes, repeat = 200
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 4134249 ~418168 {10%}
- manager exchange: 4181481 ~418139 {10%}
# nice -n-19 cli -nrtp -b5000 -m200
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 5000 bytes, repeat = 200
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 5805056 ~252663 {4%}
- manager exchange: 5825837 ~229120 {4%}
# nice -n-19 cli -nrtp -b8000 -m200
SRR client: vers. 1.03
server path /net/rtp/dev/srr, block size = 8000 bytes, repeat = 200
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 8741090 ~446299 {5%}
- manager exchange: 8788642 ~427459 {5%}
# nice -n-19 cli -nrtp -b10000 -m200
SRR client: vers. 1.03
server path: /net/rtp/dev/srr, block size = 10000 bytes, repeat = 200
CPU speed [c.p.s.]: client = 534639500, server = 451163200
- message exchange: 8971296 ~451857 {5%}
- manager exchange: 9731224 ~301409 {3%}
Π ΡΡΠΎΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ Π²Π½ΠΎΡΠΈΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ΠΉ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΠΊΠ°Π½Π°Π»Ρ; ΡΠ°Π·Π½ΠΈΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΠΌΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ ΠΈ ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΠ° ΡΠ΅ΡΡΡΡΠΎΠ² Π² Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΡΠ΅ΠΏΠ΅Π½ΠΈ Π½ΠΈΠ²Π΅Π»ΠΈΡΠΎΠ²Π°Π½Π°.
ΠΠ°Ρ Π²ΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½Ρ (ΡΠ°ΠΉΠ» clr.cc), Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ Ρ ΡΠ΅ΠΌ ΠΆΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ, Π²Π΅ΡΡΠΌΠ° ΠΏΠΎΡ ΠΎΠΆ Π½Π° ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ, Π½ΠΎ ΠΎΠ½ ΠΌΠ°ΡΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ Β«Π³ΠΎΠ½ΠΈΡΒ» ΠΏΠΎΡΠΎΠΊ Π΄Π°Π½Π½ΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ, ΠΏΠΎΠ»ΡΠ·ΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² (ΠΊΠ»ΡΡ -d) Π΄ΠΎ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ΅Π½ΠΈΡ Π΅Π³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ ΠΏΠΎ ^C. Π Π΅Π·ΡΠ»ΡΡΠ°Ρ Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ β ΡΡΠ΅Π΄Π½ΡΡ ΠΏΠ»ΠΎΡΠ½ΠΎΡΡΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ Π·Π° Π²Π΅ΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΡΠ°Π±ΠΎΡΡ.
ΠΡΠΎΡΠΎΠΉ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡ#include "common.h"
static bool conti = true;
// Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΏΠΎ ΡΠΈΠ³Π½Π°Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (SIGINT - ^C)
inline static void trap(int signo) { conti = false; }
int main(int argc, char **argv) {
cout << "SRR repeater: " << VERSION << endl;
int opt, val;
unsigned int blk = 100;
char PATH[_POSIX_PATH_MAX] = "";
bool lowlvl = true;
while ((opt = getopt(argc, argv, "n:b:d")) != -1) {
switch(opt) {
case 'n': // ΠΈΠΌΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π°
strcpy(PATH, "/net/");
strcat(PATH, optarg);
break;
case 'b': // ΡΠ°Π·ΠΌΠ΅Ρ Π±Π»ΠΎΠΊΠ° Π΄Π°Π½Π½ΡΡ
if (sscanf(optarg, "%i", &blk) ! = 1)
exit("parse command line failed");
break;
case 'd': // ΠΎΠ±ΠΌΠ΅Π½ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ
lowlvl = false;
break;
default:
exit(EXIT_FAILURE);
}
}
strcat(PATH, DEVNAME);
cout << "server path: " << PATH
<< ", block size = " << blk << " bytes" << endl;
// ΠΏΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΡ ΡΡΠ°Π·Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΊΠ»ΠΈΠ΅Π½ΡΠ°
result data;
cout << "CPU speed [c.p.s.]: client = " << data.cps;
uint64_t cps = data.cps;
// ΠΏΡΡΠ°Π΅ΠΌΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠΈΡΡΡΡ ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ-ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅ΡΡ
int fd = open(PATH, O_RDONLY);