Repository navigation
v0.0.26
0.0.26
- (EN) A request that may take long on the probe is waited for that long (core §6.1: the probe does not count the lease while it runs one):
Host.expecting(ms)(andrequest(..., expect_ms=)/call(..., expect_ms=)) makes the link wait at least that and 0.5 s (link.EXPECT_MARGIN_S) for each answer, at any rate - so the raised-rate wait of a quarter of the lease applies to ordinary requests only. Passed down by riscv-dm run (timeout_ms), dmi (its wait_us and poll_us steps,riscv.dmi_wait_ms), attach with a reset (hold_ms, riscv and arm), capture start (the configuredblocking_ms; a group's the longest of its tracks) and probe.config save (config.SAVE_EXPECT_MS, 2 s). Such a request that times out at a raised rate still falls back. The link's own confirms, keepalives, the step down's revert andpumpnever wait longer. Fix: the keepalive a raised link sends after 1 s of quiet now goes out before the request takes its corr (Host.before_request); it used to go out with a higher corr first, so the probe took the request for an old one (rejected result_lost). - (JA) probe で長くかかりうる要求はその間待つ(core §6.1: probe は要求の実行中 lease を数えない):
Host.expecting(ms)(とrequest(..., expect_ms=)/call(..., expect_ms=))で、link はどの速さでも応答ごとに少なくともその時間と 0.5 秒(link.EXPECT_MARGIN_S)待つ。上げた速さでの lease の 4 分の 1 の待ちは普通の要求だけに掛かる。riscv-dm の run(timeout_ms)、dmi(wait_us と poll_us の step の和、riscv.dmi_wait_ms)、reset 付きの attach(hold_ms、riscv と arm)、capture の start(configure のblocking_ms。組はトラックの最長)、probe.config の save(config.SAVE_EXPECT_MS、2 秒)が渡す。そうした要求も上げた速さで時間切れなら戻る。link 自身の confirm・keepalive・降りるときの戻す・pumpは長く待たない。修正: 上げた link が 1 秒黙った後に送る keepalive を、要求が corr を取る前に送るようにした(Host.before_request)。これまでは大きい corr で先に出ていたため、probe が要求を古いものとみなした(rejected result_lost)。 - (EN) port_speed (core §3.5 items 3 and 7), after a V003 jig (classic ESP32 + CH340) passed 921600 each way alone but broke a frame every ~0.5 s under sustained duplex use, the probe reverted by itself and the session's lease lapsed:
raise_speedadds a duplex phase after the in / out phases - link_source and link_sink (max_frame) interleaved, pipelined at the in-flight that passed, forduplex_s(1.0) and at leastduplex_frames(64); a broken frame fails the rate ("broke both ways at once").SpeedTrial.duplex_bytes/duplex_kb_s/broken_duplex,SpeedReport.duplex_kb_s, a duplex column into_text(),oep speed --duplex-s. In use: while a raised rate is in force, the link counts broken frames and resends; 3 within 5 s (STRIKE_MAX,STRIKE_WINDOW_S) step down - port_speed step 2 at the raised rate (0.2 s, never sent again), the boot speed, a confirm, the request again there. A request at a raised rate that gets no answer at all keeps the old fallback (back, confirm, once more there), but each wait is now at most a quarter of the lease (at least 0.3 s), so it ends well inside the lease. Either way the rate is not used again in that session (SpeedReport.stepped_down,.down_why, a line into_text();raise_speedskips it, "stepped down from earlier in this session"). Fake:BrokenRate(duplex=True)breaks only while a request ofmin_sizecomes in with such an answer still unread (the request towards the probe, that answer towards the host),BrokenRate(every=N)only every Nth frame;fake_serve --broken-rate RATE[:MIN][:in|out][:duplex][:everyN]. - (JA) port_speed(core §3.5 の 3 と 7)。V003 のジグ(classic ESP32 + CH340)で 921600 が向きごとには通ったのに、両方向を続けて使うと約 0.5 秒ごとにフレームが壊れ、probe が自分で戻り、セッションの lease が切れたため:
raise_speedは in / out の後に両方向同時の確かめを足した - link_source と link_sink(max_frame)を交互に、通った同時の数で並べ、duplex_s(1.0)かつduplex_frames(64)以上。1 つでも壊れればその速さは使わない("broke both ways at once")。SpeedTrial.duplex_bytes/duplex_kb_s/broken_duplex、SpeedReport.duplex_kb_s、to_text()に duplex の列、oep speed --duplex-s。使っている間: 上げた速さの間、link は壊れたフレームと送り直しを数え、5 秒の内に 3 つ(STRIKE_MAX、STRIKE_WINDOW_S)で降りる - 上げた速さで port_speed の step 2(0.2 秒、送り直さない)、起動時の速さ、confirm、要求をそこでもう一度。上げた速さで応答がまったく来ない要求はこれまでの戻り方(戻る、confirm、そこでもう一度)のままだが、待つ 1 回を lease の 4 分の 1(最短 0.3 秒)までにしたので lease の内に十分収まる。どちらでもその速さはそのセッションの間使わない(SpeedReport.stepped_down、.down_why、to_text()に 1 行。raise_speedは飛ばす: "stepped down from earlier in this session")。偽の probe:BrokenRate(duplex=True)はmin_size以上の要求が、同じ大きさの応答が読まれないうちに来たときだけ壊す(probe へはその要求、host へはその応答)、BrokenRate(every=N)は N 個に 1 つだけ壊す。fake_serve --broken-rate RATE[:MIN][:in|out][:duplex][:everyN]。
Repository: https://github.com/Open-Embedded-Probe/oep-client-python
Full Changelog: v0.0.25...v0.0.26