-
Notifications
You must be signed in to change notification settings - Fork 2k
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
buildsystem/CI: Use of BOARD_INSUFFCIENT_MEMORY
becomes a maintainace burdon
#11128
Comments
@RIOT-OS/maintainers: Please have a look and extend the brainstorming above as you see fit. (Both new possible approaches and pros/cons I didn't thought about.) |
Funny, we had the same discussion over lunch today 😄 My conclusion was that all these lists, i.e., So ideally (IMHO) we should get rid of such manually maintained lists in RIOT, and e.g. let compiling or linking fail. Because, as you already pointed out, the lists are hard to maintain and once a board is on such a list it likely stays there, even if issues are fixed. Again, these lists mostly serve one purpose: to make Murdock not fail and to me that's not how a CI should run. I'm in favour of option 1. My 2 cents ... |
I like (1). I'm trying to investigate what is the best way to reliably report that certain step in make failed, and also if there is a reliable way of knowing how much space it would have taken. |
Not true, currently for all boards in BOARD_INSUFFICIENT_MEMORY, all compilation is done, just the linking step is skipped. |
I don't think it is that simple. The lists represent what we expect to succeed. In these things, it is beneficial to be explicit. In case of the "BOARDS_INSUFFICIENT_MEMORY", if we'd come up with a way to determine whether the link failed because - well, it failed, or because of insufficient memory, and treat the latter as an "OK fail", boards would cross the line without anyone noticing. A change could increase code size so much that a couple of low end boards suddenly don't fit anymore. The currently used size determination wouldn't catch this, as it only works with completed binaries. In case of BOARD_BLACKLIST, there are many reasons why a board might be listed there.
This is important, as "CI succeeded" is a prerequisite for merging a PR.
I propose two things:
|
The current approach is hardly solving this issue. Most tests and examples are already blacklisted for the lower end hardware anyway. And e.g. if a board still has 512B RAM free and one PR adds 511B more RAM requirements, this PR will likely get merged without anyone noticing. The next PR that adds 2B more and will however get all the blame. To actually get feedback on which PRs do bloat RIOT, it would be better to provide statistics at the end of Murdock. E.g. did the number of link failures increase/decrease compared to the current master HEAD? What is the impact on the size I'm aware this is something that will not happen over night. But considering the man power invested to keep |
The sizes are already collected. There are no comparisons ATM because it would require a re-build of master after each merge in order to get a proper baseline. |
AFAIK the ld flag |
This might be a good idea regardless of this discussion. E.g. lets say for PR A and PR B the CI tests pass individually, but when both are merged they fail. Currently both could end up being merged with noone noticing the issue. |
True, but that's what nightly is for. If we keep all the sizes from nighly and keep track of them we could spot any jump in FLASH usage. The "real" solution would be to have reliable incremental builds. We'll get there eventually. |
The size are saved and accessible already: Just look at the nightlies and for any run replace "output.html" by "sizes.json" https://ci.riot-os.org/RIOT-OS/RIOT/master/d562af40e625485bc3e2eefdca8659c5b942ffc5/sizes.json It was monitored for some time by @bergzand here https://riot-graphs.snt.utwente.nl/d/000000004/full-grid-diff-boards-vertical?orgId=1 |
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. If you want me to ignore this issue, please mark it with the "State: don't stale" label. Thank you for your contributions. |
Description
Currently for every test and application the
BOARD_INSUFFICIENT_MEMORY
variable needs to be manually maintained. This makes adding new boards with low RAM/FLASH a nightmare. Also, boards will practically never be removed fromBOARD_INSUFFCIENT_MEMORY
, even though newer toolchains and improvements in code could result in lower RAM/ROM requirements.Additionally, theBOARD_INSUFFICIENT_MEMORY
approach reduces compilation test coverage. E.g. a test will not be compiled at all when blacklisted viaBOARD_INSUFFCIENT_MEMORY
, but only the linking stage will fail because of insufficient RAM/flash. Any possible issue that the compilation stage would uncover remain unrevealed.Update: Only the linking step is skipped when blacklisted via
BOARD_INSUFFICIENT_MEMORY
Brainstorming of Possible Alternatives
RAM_PROVIDED
andFLASH_PROVIDED
to every MCU, let boards override those in case of bootloaders. AddRAM_REQUIRED
andFLASH_REQUIRED
to every test and exampleThe text was updated successfully, but these errors were encountered: