рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЙрди рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ Embox GNU / Linux рд╕реЗ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреА рд╣реИрдВред рдпрд╣ рдИрдерд░рдиреЗрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдкрд░ рдкреНрд░реЗрд╖рд┐рдд рдПрдХ рдкреИрдХреЗрдЯ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдПрдХ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛ рдмреИрдВрдбрд╡рд┐рдбреНрде рд╣реИ, рдФрд░ рдЬреАрдПрдирдпреВ / рд▓рд┐рдирдХреНрд╕ рдЗрд╕рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд░ рд░рд╣рд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдПрдХрд▓ рдиреЗрдЯрд╡рд░реНрдХ рдкреИрдХреЗрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ / рд╕рдВрдЪрд╛рд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИрдВред рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, рдЧреНрд░рд╛рд╣рдХ рдХреЗ рдкрд╛рд╕ рд▓рд┐рдирдХреНрд╕ рдХреЗ рд╕рд╛рде DE0-рдиреИрдиреЛ-рдПрд╕рдУрд╕реА рдмреЛрд░реНрдб рдерд╛, рдФрд░ рдЗрд╕ рдмреЛрд░реНрдб рдХреА рдорджрдж рд╕реЗ рдореИрдВ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╡рд╕реНрддреБ рдХреЛ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдиреЗрдЯрд╡рд░реНрдХ рдЯреЛрдкреЛрд▓реЙрдЬреА рдкреЙрдЗрдВрдЯ-рдЯреВ-рдкреЙрдЗрдВрдЯ рд╣реИ, рдХреЛрдИ рд░рд╛рдЙрдЯрд░ рдФрд░ рд╣рдм рдирд╣реАрдВ рд╣реИрдВред рдирд┐рдпрдВрддреНрд░рдг рдореЙрдбрд▓ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдордп 100 ╬╝s рд╕реЗ рдХрдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд▓рд┐рдирдХреНрд╕-рдЖрдзрд╛рд░рд┐рдд рдкрд░ рдХреЗрд╡рд▓ 500 ╬╝s рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╕рдВрдЪрд░рдг рд╕рдордп рдХрд╛ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рджреЛ рдореЗрдЬрдмрд╛рдиреЛрдВ рд╕реЗ рдорд┐рд▓рдХрд░ рдПрдХ рд╕реНрдЯреИрдВрдб рдмрдирд╛рддреЗ рд╣реИрдВред
GNU/Linux, тАФ DE0-Nano-SoC Kit Embox. FPGA HPS (Hard Processing System, .. ARM), . , UDP- :
while (1) {
char buf[BUFLEN];
recvfrom(s, buf, BUFLEN);
sendto(s, buf, BUFLEN);
}
, DE0-Nano-SoC.
, :
for (int i = 0; i < N; i++) {
char buf_tx[BUFLEN], buf_rx[BUFLEN];
sprintf(buf_tx, "This is packet %d\n", i);
time_t time_begin = time_now();
sendto(s, buf_tx, BUFLEN);
recvfrom(s, buf_rx, BUFLEN);
time_t time_end = time_now();
if (memcmp(buf_tx, buf_rx, sizeof(buf))) {
printf("%d: Buffer mismatch\n", i);
}
if (time_end - time_begin > TIME_LIMIT) {
printf("Slow answer #%d: %d\n", i, time_end - time_begin);
}
}
, .
Github.
, , :
500 000 ( ) :
Avg: 4.52ms
Min: 3.12ms
Max: 12.24ms
, , тАФ . , Linux . , .
, ? , .
, - , , ? тАФ .
, ethernet- тАФ USB-, 100/, .
1 :
Avg: 0.08ms
Min: 0.07ms
Max: 4.31ms
Linux
Linux. -: arm-linux-gnueabihf-gcc server.c -O2
. ELF :
Avg: 0.77ms
Min: 0.74ms
Max: 5.31ms
, Embox "" 9 , !
, "", , .
, , , UDP- .
, UDP-.
, UDP . , . . :
int net_tx(...) {
if (is_udp_packet()) {
timestamp2 = timer_get();
memcpy(packet[UDP_OFFT],
×tamp1,
sizeof(timestamp1));
memcpy(packet[UDP_OFFT + sizeof(timestamp2)],
×tamp2,
sizeof(timestamp2));
...
}
}
, , , Embox.
Avg: 8673
Min: 6191
Max: 11950
, ( ) 25%, (Avg: 0.08ms Max: 4.31ms). ( , , , ), . , , 25%.
, ?
тАФ Linux, .
?
, тАФ :
nice -n -20 ./client
тАФ , , .
тАФ round robin , chrt
:
chrt --rr 99 ./client
тАФ . ( , .. ).

Embox , 10 . , , . , Linux, - bpfilter.
- тАФ embox-devel@googlegroups.com, -, .