Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Code-generate for federated programs #175

Merged
merged 59 commits into from
Jan 21, 2025
Merged

Code-generate for federated programs #175

merged 59 commits into from
Jan 21, 2025

Conversation

erlingrj
Copy link
Collaborator

@erlingrj erlingrj commented Dec 13, 2024

TODOs:

  • Nasty FlexPRET bug?
  • Dont generate federate launch script unless we are targeting native
  • Have LFC generate binaries for each federate into bin together with a simple shell script to invoke them (just like reactor-c)
  • We should likely create a UcFederatedPlatformGenerator which is similar to UcStandaloneGenerator but fixes all of this for federated programs
  • Main federate should likely be something like SimpleFederate_r for a program called SimpleFederate.lf and a federate instance called r.
  • Consider doing all federated code-gen first, and then invoke CMake (now we do code-gen -> cmake , code-gen -> cmake).
  • The sources variable seems to be global and shared between federates. Investigate
  • Handle federated connections
  • Disallow any reactions in top-level
  • Propose an initial attribute syntax for federated connections

@erlingrj erlingrj marked this pull request as draft December 13, 2024 19:19
Copy link
Contributor

github-actions bot commented Dec 14, 2024

Memory usage after merging this PR will be:

Memory Report

action_empty_test_c

from to increase (%)
text 59711 60179 0.78
data 744 752 1.08
bss 10112 11360 12.34
total 70567 72291 2.44

action_microstep_test_c

from to increase (%)
text 60582 61018 0.72
data 752 760 1.06
bss 10112 11424 12.97
total 71446 73202 2.46

action_overwrite_test_c

from to increase (%)
text 60419 60855 0.72
data 744 752 1.08
bss 10112 11424 12.97
total 71275 73031 2.46

action_test_c

from to increase (%)
text 60323 60791 0.78
data 752 760 1.06
bss 10112 11424 12.97
total 71187 72975 2.51

deadline_test_c

from to increase (%)
text 55918 56421 0.90
data 760 768 1.05
bss 10784 10784 0.00
total 67462 67973 0.76

delayed_conn_test_c

from to increase (%)
text 61386 61783 0.65
data 744 752 1.08
bss 10112 10272 1.58
total 72242 72807 0.78

event_payload_pool_test_c

from to increase (%)
text 18331 18331 0.00
data 624 624 0.00
bss 320 320 0.00
total 19275 19275 0.00

event_queue_test_c

from to increase (%)
text 27518 27616 0.36
data 736 736 0.00
bss 480 480 0.00
total 28734 28832 0.34

nanopb_test_c

from to increase (%)
text 42886 42886 0.00
data 904 904 0.00
bss 320 320 0.00
total 44110 44110 0.00

port_test_c

from to increase (%)
text 61334 61731 0.65
data 744 752 1.08
bss 10112 10272 1.58
total 72190 72755 0.78

reaction_queue_test_c

from to increase (%)
text 27318 27448 0.48
data 736 736 0.00
bss 480 480 0.00
total 28534 28664 0.46

request_shutdown_test_c

from to increase (%)
text 60554 60990 0.72
data 744 752 1.08
bss 10112 11424 12.97
total 71410 73166 2.46

startup_test_c

from to increase (%)
text 55617 56120 0.90
data 752 760 1.06
bss 10784 10784 0.00
total 67153 67664 0.76

tcp_channel_test_c

from to increase (%)
text 93856 96186 2.48
data 1224 1256 2.61
bss 21312 21376 0.30
total 116392 118818 2.08

timer_test_c

from to increase (%)
text 55508 56011 0.91
data 744 752 1.08
bss 10784 10784 0.00
total 67036 67547 0.76

Copy link
Contributor

github-actions bot commented Jan 8, 2025

Benchmark results after merging this PR:

Benchmark results

Performance:

PingPongUc:
Best Time: 180.878 msec
Worst Time: 185.171 msec
Median Time: 182.685 msec

PingPongC:
Best Time: 169.909 msec
Worst Time: 176.293 msec
Median Time: 169.635 msec

ReactionLatencyUc:
Best latency: 22435 nsec
Median latency: 60492 nsec
Worst latency: 261235 nsec

ReactionLatencyC:
Best latency: 22281 nsec
Median latency: 60560 nsec
Worst latency: 83837 nsec

Memory usage:

PingPongUc:
text data bss dec hex filename
40364 760 8496 49620 c1d4 bin/PingPongUc

PingPongC:
text data bss dec hex filename
45826 880 360 47066 b7da bin/PingPongC

ReactionLatencyUc:
text data bss dec hex filename
30201 744 2080 33025 8101 bin/ReactionLatencyUc

ReactionLatencyC:
text data bss dec hex filename
41536 848 360 42744 a6f8 bin/ReactionLatencyC

@erlingrj
Copy link
Collaborator Author

@tanneberger and @LasseRosenow this is a big PR and a big task to review it. But I hope you will take a look and give some feedback. Unfortunately the code-generator is still a little quirky trying to fit this federated generation into the existing non-federated architecture. But I think it is better to get this merged now and improve it as we go

Copy link
Collaborator

@LasseRosenow LasseRosenow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Very nice! I have looked at the code so far and only have a few small questions :)

I will try to get a federated RIOT Coap example running and then approve :)

examples/riot/hello_lf/run/build.sh Outdated Show resolved Hide resolved
include/reactor-uc/environment.h Show resolved Hide resolved
include/reactor-uc/logging.h Show resolved Hide resolved
include/reactor-uc/logging.h Show resolved Hide resolved
include/reactor-uc/network_channel.h Show resolved Hide resolved
src/platform/posix/tcp_ip_channel.c Show resolved Hide resolved
Copy link
Contributor

Coverage after merging lfc-federated into main will be

71.16%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
src
   action.c77.69%65.63%100%81.18%134–135, 24, 42–45, 48, 50–51, 54–56, 62–63, 70–72, 72, 72–75, 81–82, 93–94
   builtin_triggers.c90.91%70%100%96.77%14, 18, 40, 43
   connection.c78.52%51.16%100%88.66%10, 104, 11, 110, 123–124, 136–137, 14, 14, 143, 145, 16–17, 21–22, 22, 22–23, 25, 27–28, 33, 48, 48, 48–49, 55, 60–62, 97
   environment.c82.18%60%92.31%86.76%12–13, 18, 20–21, 31, 35–36, 42–43, 59–60, 64–65, 97–99
   event.c95.35%92.86%100%96.15%14–15
   federated.c5.44%2.91%7.69%6.51%10, 100, 100, 100–101, 104, 107–108, 108, 108–109, 111–112, 114, 118–119, 12, 121–123, 126, 128–133, 135–137, 14, 14, 14, 140–142, 142, 142–143, 143, 143–145, 147, 15, 150–151, 153–157, 159, 16, 160–164, 166, 166, 166–169, 17, 171, 171, 171–173, 173, 173–174, 178–179, 179, 179, 18, 18, 18, 182–183, 187–189, 191, 191, 191, 193–197, 200, 200, 200–203, 206–207, 207, 207–208, 21, 210–211, 214–215, 22, 220–221, 221, 221–222, 224, 226, 226, 226–229, 229, 229, 229, 229, 23, 23, 23, 230–238, 238, 238–239, 24, 241, 243–249, 25, 25, 25, 253, 256, 256, 256–258, 26, 262, 265–266, 266, 266, 266–269, 27, 270–274, 276, 28, 28, 28, 282–284, 29, 29, 29, 29, 29, 296–297, 30, 300–303, 305, 305, 305–306, 310–311, 311, 311, 313, 315–316, 316, 316–317, 317, 317–318, 318, 318–319, 319, 319, 32, 320, 320, 320–321, 321, 321, 323, 323, 323–324, 324, 324–325, 325, 325–326, 326, 326, 328, 35, 35, 35, 35, 35–36, 40–41, 45–46, 48–51, 53, 53, 53–54, 54, 54, 56, 56, 56–58, 58, 58–60, 64–65, 69–70, 72–75, 77, 79, 79, 79–80, 80, 80–81, 81, 81–82, 82, 82, 85–86, 88–89, 9, 90–91, 93, 93, 93–96, 98
   logging.c88.52%83.33%100%89.36%25, 38–40, 47, 60–61
   network_channel.c69.23%62.50%100%70.59%40, 40, 40, 45–48, 57
   port.c78.08%45.83%100%93.33%10, 10, 10, 16, 20, 25, 25–27, 27, 27–28, 39, 39, 39–40
   queues.c89.94%80.36%100%94.06%108, 113, 119, 21–23, 47–48, 60–61, 84–88, 91–92
   reaction.c71.19%54.55%100%79.71%15, 17, 21, 28–31, 31, 31–32, 42, 45, 47, 52–53, 53, 53–55, 55, 55–56, 73, 89–91, 91, 91–94, 94, 94–95
   reactor.c69.33%51.52%100%82.28%10, 101–102, 14–19, 22, 28, 30, 32–37, 37, 37–38, 38, 38, 43, 55, 58–59, 59, 59–60, 60, 60–61, 63, 77–78, 81–82, 82, 82–83, 83, 83–84, 86, 91
   serialization.c50%50%50%50%16–17, 26–27, 33–35, 38–40
   tag.c40.19%31.48%60%47.92%14, 14–15, 17, 17–18, 23–24, 24, 24, 24, 24–25, 27, 27, 27, 27, 27–28, 30, 30, 30–31, 33–34, 34, 34–35, 37, 37, 37, 37, 37–38, 40, 40, 40, 40, 40–41, 43, 53–54, 63, 63–64, 83–85, 85, 85, 85, 85, 85, 85, 85, 85, 85, 85–87, 89
   timer.c95%66.67%100%100%14, 25
   trigger.c100%100%100%100%
   util.c41.67%33.33%33.33%46.67%12–13, 13, 13–16, 18–20, 4–5
src/platform/posix
   posix.c53.15%30%66.67%56.58%100–101, 101, 101–103, 107, 16, 18, 20–21, 35–37, 39–41, 49–50, 55–60, 60, 60–63, 63, 63–65, 68, 74–75, 79, 82, 93–95, 95, 95–97, 99
   tcp_ip_channel.c65.10%51.42%94.12%74.36%100, 103–104, 104, 104–105, 119–120, 122, 124, 128–129, 137, 140–141, 141, 141–142, 147–148, 148, 148–149, 155–156, 156, 156–158, 172, 175, 179, 179, 179, 179, 179–180, 180, 180–181, 181, 181–182, 184, 186, 186, 186–187, 196, 203–204, 208–209, 213, 213, 213–215, 215, 215–216, 218, 218, 218–219, 219, 219, 221, 223–224, 228, 228, 228–229, 249, 262–263, 263, 263–264, 270, 275–276, 276, 276–277, 277, 277–278, 280–281, 281, 281–282, 282, 282, 284–287, 297, 297–298, 298, 298–299, 323–324, 324, 324–326,

@erlingrj erlingrj merged commit c592b89 into main Jan 21, 2025
8 checks passed
@erlingrj erlingrj deleted the lfc-federated branch January 21, 2025 15:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants