Games / Log forensics / The machine, not the design

The machine, not the design

Each case shows the tail of a real run, ending where the tool stopped or warned. Say what caused it, or what to do about it. A case you miss returns later in the round and starts its schedule over; one you get right returns after 1, 3, 7, then 21 days. Keys 1 to 4 choose an option, h shows a hint, and Enter moves on. Progress is stored in this browser.

SourceEach case is the tail of a real run of the gcd design on Nangate45 in the openroad/orfs container, with one thing wrong. The same failures happen on commercial tools in different words: what carries across is the reasoning from the last few lines back to the cause. Reference: the OpenROAD documentation (OpenROAD-flow-scripts on GitHub).
All 2 cases in this stage, with answers
  • The grid was built, and then this. What would you check first?
    2_4_floorplan_pdn log
    [INFO PDN-0500] Runtime: 0.00s
    Design area 676 um^2 58% utilization.
    write_db ./results/nangate45/gcd/dfull/2_4_floorplan_pdn.odb
    Error: close for ./results/nangate45/gcd/dfull/2_4_floorplan_pdn.odb failed: basic_ios::clear: iostream error
    Error: pdn.tcl, 24 basic_ios::clear: iostream error
    Elapsed time: 0:00.38[h:]min:sec. CPU time: user 0.33 sys 0.05 (98%). Peak memory: 117448KB.
    make[1]: *** [Makefile:429: do-2_4_floorplan_pdn] Error 1
    make: *** [Makefile:429: results/nangate45/gcd/dfull/2_4_floorplan_pdn.odb] Error 2
    Whether there is room on the disk to write the file.

    Hint: Read what the tool was doing when it failed, not what it was doing before.

    The grid was inserted and the area reported, so the work succeeded. The failure is in closing the file it was written to, and a stream error on close is what a full disk looks like from inside a program. Nothing in the message says disk, which is exactly why this one is worth recognizing: check the filesystem before you doubt the design.

    df -h .
    make clean_all   # or point the flow somewhere with room
  • The router was making progress and then stopped. What happened?
    5_2_route log
    [INFO DRT-0195] Start 0th optimization iteration.
        Completing 20% with 0 violations.
        elapsed time = 00:00:01, memory = 278.67 (MB).
        Completing 50% with 25 violations.
        elapsed time = 00:00:02, memory = 302.66 (MB).
        Completing 70% with 45 violations.
        elapsed time = 00:00:03, memory = 324.15 (MB).
        Completing 100% with 67 violations.
        elapsed time = 00:00:04, memory = 342.52 (MB).
    Elapsed time: 0:05.62[h:]min:sec. CPU time: user 15.44 sys 0.14 (277%). Peak memory: 350108KB.
    make[1]: *** [Makefile:552: do-5_2_route] Error 247
    make: *** [Makefile:552: results/nangate45/gcd/oom/5_2_route.odb] Error 2
    The machine killed it for taking too much memory.

    Hint: One column climbs on every line. Read that one, then read the exit code.

    There is no tool error here at all: the last line the tool wrote was a normal progress line at 342 megabytes, having started the stage at 267. An exit code in the 240s with no message is the shell reporting that something outside the tool ended it, and the growing memory column says what. On a shared machine, look at the job's memory limit before you look at the design.

    # give the job room, or ask the router for fewer threads
    make DESIGN_CONFIG=... NUM_CORES=4