23m: round final — DR-trap delivery anomaly under wine threads documented (near-zero stops despite verified arming and confirmed module execution); full stop-logging added to fnexec; roadmap to bit-exact fixed: G-form via stabilized series, consumer via init-family decode or perf_event HW breakpoints, then RT_FIRCONV gate
This commit is contained in:
@@ -2475,3 +2475,30 @@ dispatcher, bidir} при подтверждённых рендерах и 8–1
|
|||||||
Следующий шаг: в fnexec логировать КАЖДЫЙ stop (rip,dr6,pid) без фильтра +
|
Следующий шаг: в fnexec логировать КАЖДЫЙ stop (rip,dr6,pid) без фильтра +
|
||||||
счётчик всех SIGTRAP; если трапов нет вообще на тредах, которые заведомо
|
счётчик всех SIGTRAP; если трапов нет вообще на тредах, которые заведомо
|
||||||
выполняют модульный код — сравнивать /proc/pid/task состав до/после.
|
выполняют модульный код — сравнивать /proc/pid/task состав до/после.
|
||||||
|
|
||||||
|
### 23m (финал раунда): трассировка под wine — аномалия доставки зафиксирована
|
||||||
|
Серией прогонов с ПОЛНЫМ логом остановок установлено: за 14 c живого хоста
|
||||||
|
tracer видит ~1 остановку (не от наших DR), хотя 8+ тредов армированы
|
||||||
|
exec-watch на тела дизайна/диспетчер/bidir с верифицированной записью DR
|
||||||
|
(drprobe.py: все poke ok, readback точный) и микротестом доставки на
|
||||||
|
нативном треде (dtest.py — работает). Треды wine при этом выполняют модульный
|
||||||
|
код (рендер происходит). Вывод: доставка DR-trap'ов от wine-тредов в наш
|
||||||
|
waitpid-цикл не работает в этой конфигурации (кандидаты: wine сам использует
|
||||||
|
DR/GetThreadContext, wow64-переключения, либо события теряются из-за
|
||||||
|
групповых остановок). Отладочный вывод сохранён в fnexec/hits.json.
|
||||||
|
### Достижения раунда (суммарно, 23h–23m)
|
||||||
|
1. Доказано: цепь строится ОДИН РАЗ на param-change (<100 мс окно), steady
|
||||||
|
render её не вызывает — транскрипция: rebuild только на setParams.
|
||||||
|
2. Все 390 статических ссылок на таблицу слотов учтены; скрытого читателя нет.
|
||||||
|
3. HW exec-bp методология верифицирована end-to-end (dtest) — инструмент готов,
|
||||||
|
осталась аномалия доставки под wine.
|
||||||
|
4. rendersnap.py — рабочий канал снятия ЛЮБЫХ внутренних состояний плагина
|
||||||
|
(уже дал формулу FIR=exp(0.984·scratch), масштаб ×1.805, q-серию).
|
||||||
|
### Дорога к bit-exact (порядок)
|
||||||
|
1. G(band,res): q-серия есть; добавить am-серию со стабилизацией фаз;
|
||||||
|
аппроксимировать и проверить на hold-out.
|
||||||
|
2. Потребитель/×1.805: (а) полный декод init-семьи 52e9b0–531xxx (param-time
|
||||||
|
строитель — потребитель рядом); (б) либо повторить DR-охоту после решения
|
||||||
|
аномалии доставки (например, трассировать через PTRACE_SEIZE опции или
|
||||||
|
perf_event_open с breakpoint типом HW).
|
||||||
|
3. RT_FIRCONV=1 + контрольные числа dual + гейт корпуса.
|
||||||
|
|||||||
+22
-2
@@ -74,6 +74,7 @@ def main():
|
|||||||
print('NO HOST')
|
print('NO HOST')
|
||||||
return 1
|
return 1
|
||||||
print('host %d at %.2fs' % (host, time.time() - t0), flush=True)
|
print('host %d at %.2fs' % (host, time.time() - t0), flush=True)
|
||||||
|
fd = os.open(f'/proc/{host}/mem', os.O_RDONLY)
|
||||||
|
|
||||||
# EARLY arm: exec watch on DESIGN bodies (inherited by future clones)
|
# EARLY arm: exec watch on DESIGN bodies (inherited by future clones)
|
||||||
fd0 = os.open(f'/proc/{host}/mem', os.O_RDONLY)
|
fd0 = os.open(f'/proc/{host}/mem', os.O_RDONLY)
|
||||||
@@ -127,6 +128,7 @@ def main():
|
|||||||
print('armed %d/%d tids' % (len(armed), len(seized)), flush=True)
|
print('armed %d/%d tids' % (len(armed), len(seized)), flush=True)
|
||||||
|
|
||||||
n0 = n1 = 0
|
n0 = n1 = 0
|
||||||
|
STOPLOG=[]
|
||||||
samples = []
|
samples = []
|
||||||
t_end = time.time() + DUR
|
t_end = time.time() + DUR
|
||||||
last_sweep = 0.0
|
last_sweep = 0.0
|
||||||
@@ -151,6 +153,9 @@ def main():
|
|||||||
time.sleep(0.001)
|
time.sleep(0.001)
|
||||||
if arm(tid):
|
if arm(tid):
|
||||||
armed.add(tid)
|
armed.add(tid)
|
||||||
|
d0=pt(PTRACE_PEEKUSER,tid,DR_BASE)
|
||||||
|
d7=pt(PTRACE_PEEKUSER,tid,DR7_OFF)
|
||||||
|
print(' tid %d dr0=%#x dr7=%#x'%(tid,d0 or 0,d7 or 0),flush=True)
|
||||||
try:
|
try:
|
||||||
pt(PTRACE_CONT, tid, 0, 0)
|
pt(PTRACE_CONT, tid, 0, 0)
|
||||||
except OSError:
|
except OSError:
|
||||||
@@ -162,6 +167,21 @@ def main():
|
|||||||
if pid == 0:
|
if pid == 0:
|
||||||
time.sleep(0.0004)
|
time.sleep(0.0004)
|
||||||
continue
|
continue
|
||||||
|
ent=[round(time.time()-t0,3), pid, hex(status)]
|
||||||
|
if os.WIFSTOPPED(pid) and (status>>8)==5:
|
||||||
|
rg=UserRegs()
|
||||||
|
if pt(PTRACE_GETREGS,pid,0,ctypes.addressof(rg)) is not None:
|
||||||
|
ent+= [rg.rip, pt(PTRACE_PEEKUSER,pid,DR_BASE+48)]
|
||||||
|
# auto-dump arrays on design hits
|
||||||
|
if rg.rip in (0x1802A24C0,0x1802FA420):
|
||||||
|
def dmp(ptr):
|
||||||
|
try:
|
||||||
|
b=os.pread(fd,2049*4,ptr)
|
||||||
|
return np.frombuffer(b,dtype='<f4').astype(np.float32).tolist()
|
||||||
|
except OSError: return []
|
||||||
|
ent.append({'rcx':rg.rcx,'rdx':rg.rdx,
|
||||||
|
'in':dmp(rg.rcx),'out':dmp(rg.rdx)})
|
||||||
|
STOPLOG.append(ent)
|
||||||
sig = status >> 8
|
sig = status >> 8
|
||||||
if os.WIFEXITED(status) or os.WIFSIGNALED(status):
|
if os.WIFEXITED(status) or os.WIFSIGNALED(status):
|
||||||
continue
|
continue
|
||||||
@@ -222,8 +242,8 @@ def main():
|
|||||||
print('hits: 529fe0=%d loop=%d render_fresh=%s armed=%d/%d'
|
print('hits: 529fe0=%d loop=%d render_fresh=%s armed=%d/%d'
|
||||||
% (n0, n1, fresh, len(armed), len(seized)))
|
% (n0, n1, fresh, len(armed), len(seized)))
|
||||||
import json
|
import json
|
||||||
json.dump(samples[:300], open('/tmp/opencode/fnexec/hits.json', 'w'),
|
json.dump(dict(samples=samples[:300], stops=STOPLOG[:4000]),
|
||||||
indent=1, default=str)
|
open('/tmp/opencode/fnexec/hits.json', 'w'), indent=1, default=str)
|
||||||
proc.kill()
|
proc.kill()
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user