My English Study매일 만나는 비즈니스 영어
← 시스템 이슈 분석 학습 목록

SYSTEM SW / 2026-08-03 / System issue triage

Root-Causing a UFS Kernel Panic after the Orion Maintenance Release

Orion 유지보수 릴리스 이후 UFS 커널 패닉 원인 분석

Orion 유지보수 버전 ORN.2.1.0 배포 후 SQE 스트레스 테스트에서 UFS 스토리지 드라이버 관련 kernel panic이 재현되었습니다. SQE, 사내 커널 스토리지 팀, 칩셋 벤더 Qorvix, 메모리 벤더 Kestrel이 램덤프 분석 결과와 가설, 다음 실험 계획을 논의합니다.

가상의 비즈니스 회의 · 중급~고급 · 2,202단어 · 약 18분

Minji Seo · SQETom Ahn · SQEJiwoo Lee · Kernel StorageHyunsoo Bae · Kernel StorageLaura Chen · Qorvix Customer EngineeringStefan Brandt · Kestrel Memory

01 / English script

Attendance and Ground Rules

01 · Minji SeoSQE

Okay, it's two minutes past, so let's get started. Thanks, everyone, for joining on a Monday morning with such short notice. I'm Minji, the SQE lead for the Orion maintenance releases, and I called this meeting because we have a kernel panic that's reproducing in our stress lab, and I don't want it anywhere near the next OTA until we understand it. Let's go around quickly.

02 · Tom AhnSQE

I'm Tom, also from SQE. I run the stress lab and I'm the one who has been collecting the ramdumps over the weekend, so if you have questions about test conditions, I'm your person.

03 · Jiwoo LeeKernel Storage

Jiwoo Lee, Kernel Storage. I own the UFS driver integration on Orion, including the patches that went into 2.1.0. I've been looking at the dumps since Saturday night.

04 · Hyunsoo BaeKernel Storage

Hyunsoo Bae, also Kernel Storage. I mostly work on runtime power management for storage, which may turn out to be relevant today.

05 · Laura ChenQorvix Customer Engineering

Hi, Laura Chen from Qorvix customer engineering in Taipei. I support the UFS host controller on your chipset. I've read the initial report but not the dumps yet.

06 · Stefan BrandtKestrel Memory

Stefan Brandt, field application engineer at Kestrel Memory, joining from Munich. We supply the UFS storage parts for Orion, and the firmware update in this release came from us, so I suspect I'll be getting some questions.

07 · Minji SeoSQE

Thank you all. One ground rule before we start: this meeting is about facts and next experiments, not about who is to blame. We have three components that changed in the same release, so it's very tempting to point at each other. Let's not do that. Tom, can you walk us through what we're seeing?

Symptom and Reproduction Data

08 · Tom AhnSQE

Sure. The build is ORN.2.1.0, which went to our lab on July 28th. We run a 72-hour stress profile on two hundred devices: heavy file I/O, camera recording, app installs, and frequent screen on and off cycles. Over the first run, eleven devices hit a kernel panic, which is a rate of five and a half percent per 72 hours. On the previous release, 2.0.3, we had zero panics on the same profile.

09 · Jiwoo LeeKernel Storage

Just to clarify, are all eleven panics the same signature, or are we looking at several different crashes that happen to show up together?

10 · Tom AhnSQE

Good question. Nine of the eleven have the same signature: a NULL pointer dereference in the UFS completion handler, specifically in the function that completes a request after the controller signals it's done. The other two are different; one is a watchdog bite in the display driver and one is an out-of-memory panic. I'd treat those two as separate issues for now.

11 · Minji SeoSQE

Agreed. Let's park those two and focus on the nine. Tom, is there any pattern in when they happen?

12 · Tom AhnSQE

There is. In seven of the nine, the panic happens within two seconds of the screen turning off, while there's still heavy write traffic in flight. In the other two, the logs are truncated, so we can't say for sure. We also noticed that all nine devices have the same storage firmware version, which is the new one from Kestrel. But to be fair, every device in this run has that firmware, so that alone doesn't prove anything.

13 · Stefan BrandtKestrel Memory

Thank you for saying that, Tom. I'd just like to add that the new firmware has been in mass production with two other customers since May, with no reports of this kind of crash. That's not proof either, but it's a data point.

Ramdump Analysis and Hypotheses

14 · Minji SeoSQE

Jiwoo, you've been in the dumps all weekend. What does the analysis tell us so far?

15 · Jiwoo LeeKernel Storage

Here's what I can say with confidence. In all nine dumps, the completion handler is processing a request whose tag has already been released. In other words, the controller tells us request number seventeen is done, but by the time we look it up, slot seventeen is empty. The pointer we dereference is the request structure for that empty slot, which is why we get a NULL pointer.

16 · Laura ChenQorvix Customer Engineering

So it's a double completion, or at least a completion arriving after the request was already cleaned up. Do you know who released the tag first?

17 · Jiwoo LeeKernel Storage

That's the key question, and I don't have a definitive answer yet. What I can see is that in six of the nine dumps, the UFS error handler ran within the previous few hundred milliseconds. The error handler aborts outstanding requests and releases their tags. So my working hypothesis is a race: the error handler aborts request seventeen and frees the slot, and then a late completion interrupt for the same request arrives from the controller.

18 · Hyunsoo BaeKernel Storage

And that would explain the screen-off timing. When the screen turns off, we start the runtime suspend sequence for storage. If there's heavy write traffic, the suspend request has to wait, and if it waits too long, it times out. That timeout is one of the triggers for the error handler. So the chain would be: screen off, suspend attempt, timeout, error handler, abort, and then a late completion hits an empty slot.

19 · Minji SeoSQE

That's a plausible chain. But why would it start in 2.1.0? What changed in that path?

20 · Jiwoo LeeKernel Storage

Two things changed. On the kernel side, we merged a patch that shortened the suspend timeout from five hundred milliseconds to two hundred, to improve standby battery life. And on the firmware side, Kestrel's update enabled a larger write buffer, which means the device can take longer to flush data before it's ready to suspend.

21 · Stefan BrandtKestrel Memory

I'd push back slightly on the framing there. A larger write buffer does increase the worst-case flush time, that's true, but it's still well within the specification. According to the standard, the host is supposed to tolerate flush times of up to one second in that state. If the kernel gives up after two hundred milliseconds, I'd argue that's a host-side timing issue rather than a firmware problem.

22 · Hyunsoo BaeKernel Storage

That's a fair point about the timeout, and honestly, I was the one who proposed the shorter value. In our testing with the old firmware, flushes never took more than eighty milliseconds, so two hundred looked very safe. We clearly didn't retest it with the new firmware. That's on us.

23 · Laura ChenQorvix Customer Engineering

Let me add one thing from the controller side, because I don't think the timeout is the whole story. Even if the timeout is too short, the driver should never crash because of a late completion. The host controller can legitimately report a completion for a request that the software has already aborted. The completion path needs to check whether the tag is still valid before using it. If it doesn't, that's a robustness bug in the driver, regardless of the timing.

24 · Jiwoo LeeKernel Storage

I agree with Laura. We may have two problems layered on top of each other: a timeout that's too aggressive, which makes the error handler run far more often, and a missing validity check, which turns a recoverable situation into a panic. Even if we fix the timeout, I'd want the validity check in place, because there are other ways to trigger the error handler.

Planning the Next Experiments

25 · Minji SeoSQE

Okay, this is helpful. We have a hypothesis, but we haven't proven it yet. What experiments would confirm or rule it out, and how quickly can we run them?

26 · Tom AhnSQE

From the lab side, I can split the next run into three groups of sixty devices each. Group A: current build, unchanged, as the control. Group B: the timeout restored to five hundred milliseconds. Group C: the old storage firmware with the current kernel. If the hypothesis is right, B and C should both drop to near zero, and A should keep crashing at about the same rate.

27 · Hyunsoo BaeKernel Storage

That's a clean design. I can have a test build with the restored timeout ready by this afternoon. It's a one-line change, so the risk is very low.

28 · Stefan BrandtKestrel Memory

For group C, downgrading the firmware is possible, but please be aware that the downgrade tool resets some of the device's internal health counters. It won't affect the test, but I'd recommend you don't ship those units to anyone afterward. I can send the tool and the old image within the hour.

29 · Jiwoo LeeKernel Storage

In parallel, I'd like to add a debug patch to group A that logs every tag allocation and release with a timestamp, and checks validity in the completion path. Instead of panicking, it would print a warning and dump the state. That would give us direct evidence of the race rather than inferring it from the dumps.

30 · Minji SeoSQE

Wait, if we change group A, it's no longer a clean control group. I'd rather keep A exactly as shipped, and put the debug patch on a fourth, smaller group. Tom, can we spare forty more devices?

31 · Tom AhnSQE

It's tight, but yes. I can borrow forty from the Atlas pre-validation pool for three days, as long as I give them back by Thursday.

32 · Laura ChenQorvix Customer Engineering

If you capture the controller register state in the debug dump, please send it to me directly. I can check whether the controller reported the completion before or after the abort command was acknowledged. That timing will tell us whether this is purely a software race or whether the controller is behaving unexpectedly.

33 · Jiwoo LeeKernel Storage

Will do. I'll capture the doorbell register, the task management registers, and the interrupt status for the last fifty events before each warning. If that's not enough, tell me what else you need and I'll add it to the next debug build rather than guessing.

34 · Laura ChenQorvix Customer Engineering

That should be plenty for a first pass. Thank you.

Release Impact

35 · Minji SeoSQE

Now, the uncomfortable part. ORN.2.1.0 is scheduled for OTA to the first market wave on August 6th. Given what we've seen, SQE cannot sign off on that build. I'd like to know if anyone disagrees with holding the OTA.

36 · Jiwoo LeeKernel Storage

No disagreement from me. A five percent panic rate in the lab is far too high to ship, even if real users don't stress the device the way our lab does. I'd rather explain a delay than explain field crashes.

37 · Hyunsoo BaeKernel Storage

Same here. And if the experiments confirm the timeout theory, the fix is small, so the delay could be short. We could realistically have a candidate build by the end of the week.

38 · Minji SeoSQE

Good. I'll inform the release management team that the August 6th OTA is on hold pending root cause, and that we expect to give a new date on Wednesday. I'd rather give them a realistic date once than move it three times.

39 · Tom AhnSQE

There's one more question we should answer before we close this topic. Are any other models affected? The shorter timeout patch went into the common kernel branch, so it's also in the Orion Lite build that's in our lab right now. Orion Lite uses a different storage part, but from the same supplier.

40 · Stefan BrandtKestrel Memory

The Orion Lite part uses an older controller generation, and it doesn't have the larger write buffer feature at all, so the flush times should be similar to the old firmware. I'd be surprised if you saw the same problem there. That said, I'd rather you verify it than take my word for it.

41 · Tom AhnSQE

Fair enough. Orion Lite has been running the same stress profile since Friday, and so far we have zero storage panics on a hundred devices. I'll keep it running and flag it immediately if that changes.

42 · Minji SeoSQE

Good. So for now, the hold applies to Orion only, and Orion Lite stays on its current schedule unless the data tells us otherwise. Let's write that down explicitly so nobody gets confused later.

Action Items

43 · Minji SeoSQE

Let me capture the action items. Hyunsoo: test build with the timeout restored, ready by 4 p.m. today. Jiwoo: debug build with tag tracing and the validity check, by end of day. Stefan: send the firmware downgrade tool and the previous image within the hour. Tom: start the four-group stress run tonight and share interim results on Wednesday morning. Laura: review controller register dumps as soon as Jiwoo sends them. And I'll handle communication with release management. Did I miss anything?

44 · Laura ChenQorvix Customer Engineering

One small addition. Could someone share the exact kernel commit for the timeout change? I'd like to compare it with our reference driver, because our reference value is actually one second, not five hundred milliseconds.

45 · Hyunsoo BaeKernel Storage

Interesting, I didn't know that. I'll send you the commit right after this call. If the reference is one second, we should probably understand why we ever moved away from it.

46 · Stefan BrandtKestrel Memory

And from our side, I'll ask our firmware team for the worst-case flush time distribution with the new buffer size, measured on your configuration. That should tell us how much margin any timeout value actually gives you.

Closing and Next Meeting

47 · Minji SeoSQE

Excellent. Thank you, everyone, for keeping this constructive. We're meeting again on Wednesday, August 5th, at 9 a.m. Korea time, which is 2 a.m. in Munich, so Stefan, I'll send you a written summary instead and we'll call you only if the firmware group looks suspicious. Laura, 8 a.m. Taipei time should work for you.

48 · Laura ChenQorvix Customer Engineering

That works. Talk to you on Wednesday.

49 · Stefan BrandtKestrel Memory

Thank you, Minji. I appreciate the summary, and please call me anytime if you need the firmware team involved.

50 · Tom AhnSQE

I'll post the run status in the channel every morning, so nobody has to wait until Wednesday to see the trend.

02 / 한국어 번역

참석자 확인 및 진행 원칙

01 · Minji SeoSQE

자, 2분 지났으니 시작하겠습니다. 월요일 아침에 이렇게 급하게 잡았는데 참석해 주셔서 모두 감사합니다. 저는 Orion 유지보수 릴리스의 SQE 리드 민지입니다. 저희 스트레스 랩에서 커널 패닉이 재현되고 있어서 이 회의를 소집했는데, 원인을 이해하기 전까지는 다음 OTA 근처에도 가지 않게 하고 싶습니다. 빠르게 한 바퀴 소개하죠.

02 · Tom AhnSQE

저는 같은 SQE의 Tom입니다. 스트레스 랩을 운영하고 있고 주말 동안 램덤프를 수집한 사람이라, 테스트 조건에 대해 질문이 있으면 저에게 물어보시면 됩니다.

03 · Jiwoo LeeKernel Storage

커널 스토리지팀 이지우입니다. 2.1.0에 들어간 패치를 포함해 Orion의 UFS 드라이버 통합을 담당하고 있습니다. 토요일 밤부터 덤프를 보고 있습니다.

04 · Hyunsoo BaeKernel Storage

같은 커널 스토리지팀 배현수입니다. 주로 스토리지 런타임 전원 관리를 담당하는데, 오늘 그게 관련 있을지도 모르겠네요.

05 · Laura ChenQorvix Customer Engineering

안녕하세요, 타이베이에 있는 Qorvix 고객 엔지니어링의 Laura Chen입니다. 귀사 칩셋의 UFS 호스트 컨트롤러를 지원하고 있습니다. 초기 보고서는 읽었지만 덤프는 아직 못 봤습니다.

06 · Stefan BrandtKestrel Memory

뮌헨에서 참석한 Kestrel Memory의 필드 애플리케이션 엔지니어 Stefan Brandt입니다. 저희가 Orion의 UFS 스토리지 부품을 공급하고 있고, 이번 릴리스의 펌웨어 업데이트도 저희가 제공한 거라 질문을 좀 받게 될 것 같네요.

07 · Minji SeoSQE

모두 감사합니다. 시작하기 전에 원칙 하나만 말씀드릴게요. 이 회의는 사실과 다음 실험에 관한 것이지, 누구 탓인지를 따지는 자리가 아닙니다. 같은 릴리스에서 세 가지 구성 요소가 바뀌었으니 서로를 지목하고 싶어지기 쉽습니다. 그러지 맙시다. Tom, 지금 보이는 현상을 설명해 주시겠어요?

증상과 재현 데이터

08 · Tom AhnSQE

네. 빌드는 ORN.2.1.0이고 7월 28일에 랩에 들어왔습니다. 200대 단말에서 72시간 스트레스 프로필을 돌립니다. 대량 파일 I/O, 카메라 녹화, 앱 설치, 잦은 화면 켜기·끄기 사이클이 포함됩니다. 첫 번째 실행에서 11대가 커널 패닉에 걸렸는데, 72시간당 5.5%의 비율입니다. 이전 릴리스인 2.0.3에서는 같은 프로필로 패닉이 한 건도 없었습니다.

09 · Jiwoo LeeKernel Storage

확인차 여쭤볼게요. 11건의 패닉이 모두 같은 시그니처인가요, 아니면 우연히 같이 나타난 여러 다른 크래시인가요?

10 · Tom AhnSQE

좋은 질문입니다. 11건 중 9건이 같은 시그니처입니다. UFS 완료 핸들러에서의 NULL 포인터 역참조인데, 구체적으로는 컨트롤러가 완료 신호를 보낸 뒤 요청을 완료 처리하는 함수에서 발생합니다. 나머지 2건은 다릅니다. 하나는 디스플레이 드라이버의 워치독 바이트이고, 하나는 메모리 부족 패닉입니다. 그 두 건은 일단 별도 이슈로 다루는 게 좋겠습니다.

11 · Minji SeoSQE

동의합니다. 그 두 건은 잠시 보류하고 9건에 집중하죠. Tom, 언제 발생하는지 어떤 패턴이 있나요?

12 · Tom AhnSQE

있습니다. 9건 중 7건은 화면이 꺼지고 2초 안에, 쓰기 트래픽이 아직 많이 진행 중일 때 패닉이 발생합니다. 나머지 2건은 로그가 잘려서 확실히 말할 수 없습니다. 또 9대 모두 같은 스토리지 펌웨어 버전, 즉 Kestrel의 새 펌웨어를 쓰고 있었습니다. 하지만 공정하게 말하면 이번 실행의 모든 단말이 그 펌웨어를 쓰고 있어서, 그것만으로는 아무것도 증명되지 않습니다.

13 · Stefan BrandtKestrel Memory

그렇게 말씀해 주셔서 감사합니다, Tom. 한 가지 덧붙이자면, 새 펌웨어는 5월부터 다른 고객사 두 곳에서 양산에 쓰이고 있는데 이런 종류의 크래시 보고는 없었습니다. 그것도 증거는 아니지만 하나의 데이터 포인트입니다.

램덤프 분석과 가설

14 · Minji SeoSQE

지우 님은 주말 내내 덤프를 보셨잖아요. 지금까지 분석 결과가 뭘 말해 주나요?

15 · Jiwoo LeeKernel Storage

확실하게 말할 수 있는 건 이렇습니다. 9개 덤프 모두에서 완료 핸들러가 이미 태그가 해제된 요청을 처리하고 있습니다. 다시 말해 컨트롤러는 17번 요청이 끝났다고 알려 주는데, 저희가 찾아볼 때는 17번 슬롯이 이미 비어 있습니다. 저희가 역참조하는 포인터가 그 빈 슬롯의 요청 구조체라서 NULL 포인터가 나오는 거죠.

16 · Laura ChenQorvix Customer Engineering

그러니까 이중 완료이거나, 최소한 요청이 이미 정리된 후에 완료가 도착한 거군요. 누가 먼저 태그를 해제했는지 아시나요?

17 · Jiwoo LeeKernel Storage

그게 핵심 질문인데 아직 확정적인 답은 없습니다. 제가 볼 수 있는 건 9개 덤프 중 6개에서 직전 수백 밀리초 안에 UFS 에러 핸들러가 실행됐다는 겁니다. 에러 핸들러는 진행 중인 요청을 중단시키고 태그를 해제합니다. 그래서 제 작업 가설은 경쟁 상태입니다. 에러 핸들러가 17번 요청을 중단하고 슬롯을 해제한 뒤, 같은 요청에 대한 늦은 완료 인터럽트가 컨트롤러에서 도착하는 거죠.

18 · Hyunsoo BaeKernel Storage

그러면 화면 꺼짐 타이밍도 설명이 됩니다. 화면이 꺼지면 스토리지의 런타임 서스펜드 시퀀스가 시작됩니다. 쓰기 트래픽이 많으면 서스펜드 요청이 기다려야 하고, 너무 오래 기다리면 타임아웃이 납니다. 그 타임아웃이 에러 핸들러를 트리거하는 조건 중 하나예요. 그러니까 연결 고리는 이렇게 됩니다. 화면 꺼짐, 서스펜드 시도, 타임아웃, 에러 핸들러, 중단, 그리고 늦은 완료가 빈 슬롯에 도달.

19 · Minji SeoSQE

그럴듯한 연결 고리네요. 그런데 왜 2.1.0에서 시작됐을까요? 그 경로에서 뭐가 바뀌었죠?

20 · Jiwoo LeeKernel Storage

두 가지가 바뀌었습니다. 커널 쪽에서는 대기 배터리 수명을 개선하려고 서스펜드 타임아웃을 500밀리초에서 200밀리초로 줄이는 패치를 머지했습니다. 그리고 펌웨어 쪽에서는 Kestrel 업데이트로 더 큰 쓰기 버퍼가 활성화됐는데, 그러면 단말이 서스펜드할 준비가 되기 전에 데이터를 플러시하는 데 더 오래 걸릴 수 있습니다.

21 · Stefan BrandtKestrel Memory

그 표현에 대해서는 조금 이의를 제기하고 싶습니다. 더 큰 쓰기 버퍼가 최악의 경우 플러시 시간을 늘리는 건 사실이지만, 여전히 규격 범위 안에 충분히 들어갑니다. 표준에 따르면 호스트는 그 상태에서 최대 1초까지의 플러시 시간을 허용해야 합니다. 커널이 200밀리초 후에 포기한다면, 그건 펌웨어 문제라기보다 호스트 쪽 타이밍 문제라고 봅니다.

22 · Hyunsoo BaeKernel Storage

타임아웃에 대해서는 타당한 지적이고, 솔직히 더 짧은 값을 제안한 게 저였습니다. 이전 펌웨어로 테스트했을 때는 플러시가 80밀리초를 넘은 적이 없어서 200이면 매우 안전해 보였거든요. 새 펌웨어로 다시 테스트하지 않은 건 분명합니다. 그건 저희 책임입니다.

23 · Laura ChenQorvix Customer Engineering

컨트롤러 쪽에서 하나 덧붙일게요. 타임아웃이 전부는 아니라고 생각하거든요. 타임아웃이 너무 짧다 해도, 드라이버가 늦은 완료 때문에 크래시가 나서는 안 됩니다. 호스트 컨트롤러는 소프트웨어가 이미 중단한 요청에 대해서도 정상적으로 완료를 보고할 수 있습니다. 완료 경로는 태그를 쓰기 전에 아직 유효한지 확인해야 합니다. 그렇지 않다면 타이밍과 무관하게 드라이버의 견고성 버그입니다.

24 · Jiwoo LeeKernel Storage

Laura 말씀에 동의합니다. 두 가지 문제가 겹쳐 있을 수 있습니다. 하나는 너무 공격적인 타임아웃이라 에러 핸들러가 훨씬 자주 실행되게 만드는 것이고, 다른 하나는 유효성 검사가 없어서 복구 가능한 상황을 패닉으로 바꾸는 것입니다. 타임아웃을 고치더라도 유효성 검사는 넣고 싶습니다. 에러 핸들러를 트리거하는 다른 경로도 있으니까요.

다음 실험 계획

25 · Minji SeoSQE

좋아요, 도움이 되네요. 가설은 있지만 아직 증명하지 못했습니다. 그걸 확인하거나 배제할 수 있는 실험은 뭐가 있고, 얼마나 빨리 돌릴 수 있나요?

26 · Tom AhnSQE

랩 쪽에서는 다음 실행을 60대씩 세 그룹으로 나눌 수 있습니다. A 그룹은 현재 빌드를 그대로 써서 대조군으로 둡니다. B 그룹은 타임아웃을 500밀리초로 되돌립니다. C 그룹은 현재 커널에 이전 스토리지 펌웨어를 씁니다. 가설이 맞다면 B와 C는 거의 0으로 떨어지고, A는 비슷한 비율로 계속 크래시가 나야 합니다.

27 · Hyunsoo BaeKernel Storage

깔끔한 설계네요. 타임아웃을 되돌린 테스트 빌드는 오늘 오후까지 준비할 수 있습니다. 한 줄 수정이라 위험도 매우 낮습니다.

28 · Stefan BrandtKestrel Memory

C 그룹의 경우 펌웨어 다운그레이드는 가능하지만, 다운그레이드 도구가 단말 내부의 상태 카운터 일부를 초기화한다는 점은 알아 두세요. 테스트에는 영향이 없지만, 그 단말들은 나중에 다른 사람에게 보내지 않는 걸 권합니다. 도구와 이전 이미지는 한 시간 안에 보내 드릴 수 있습니다.

29 · Jiwoo LeeKernel Storage

동시에 A 그룹에는 모든 태그 할당과 해제를 타임스탬프와 함께 기록하고, 완료 경로에서 유효성을 검사하는 디버그 패치를 넣고 싶습니다. 패닉 대신 경고를 출력하고 상태를 덤프하게 하는 거죠. 그러면 덤프에서 추정하는 대신 경쟁 상태의 직접적인 증거를 얻을 수 있습니다.

30 · Minji SeoSQE

잠깐만요, A 그룹을 바꾸면 더 이상 깨끗한 대조군이 아닙니다. A는 배포된 그대로 두고, 디버그 패치는 네 번째 소규모 그룹에 넣는 게 좋겠어요. Tom, 40대 더 낼 수 있나요?

31 · Tom AhnSQE

빠듯하지만 가능합니다. 목요일까지 돌려준다는 조건으로 Atlas 사전 검증 풀에서 40대를 3일간 빌려올 수 있어요.

32 · Laura ChenQorvix Customer Engineering

디버그 덤프에서 컨트롤러 레지스터 상태를 캡처하시면 저에게 직접 보내 주세요. 컨트롤러가 중단 명령이 확인되기 전에 완료를 보고했는지 후에 보고했는지 확인할 수 있습니다. 그 타이밍을 보면 순수한 소프트웨어 경쟁 상태인지, 아니면 컨트롤러가 예상과 다르게 동작하는 건지 알 수 있습니다.

33 · Jiwoo LeeKernel Storage

그렇게 하겠습니다. 각 경고 직전 50개 이벤트에 대해 도어벨 레지스터, 태스크 관리 레지스터, 인터럽트 상태를 캡처하겠습니다. 그걸로 부족하면 추측하지 말고 필요한 게 뭔지 알려 주세요. 다음 디버그 빌드에 추가하겠습니다.

34 · Laura ChenQorvix Customer Engineering

1차 분석에는 그 정도면 충분합니다. 감사합니다.

릴리스 영향

35 · Minji SeoSQE

이제 불편한 부분입니다. ORN.2.1.0은 8월 6일 첫 번째 시장 웨이브로 OTA가 예정되어 있습니다. 지금까지 본 걸 감안하면 SQE는 그 빌드를 승인할 수 없습니다. OTA 보류에 반대하시는 분이 있는지 알고 싶습니다.

36 · Jiwoo LeeKernel Storage

저는 반대하지 않습니다. 실제 사용자가 저희 랩처럼 단말을 혹사하지는 않더라도, 랩에서 5% 패닉률은 배포하기에 너무 높습니다. 시장 크래시를 해명하느니 지연을 해명하는 게 낫습니다.

37 · Hyunsoo BaeKernel Storage

저도 같은 생각입니다. 그리고 실험으로 타임아웃 이론이 확인되면 수정 범위가 작아서 지연이 짧을 수 있습니다. 현실적으로 이번 주 말까지 후보 빌드를 만들 수 있을 겁니다.

38 · Minji SeoSQE

좋습니다. 릴리스 관리팀에 8월 6일 OTA가 근본 원인 확인 때까지 보류되며, 수요일에 새 날짜를 알려 줄 수 있을 것 같다고 전하겠습니다. 날짜를 세 번 옮기는 것보다 현실적인 날짜를 한 번 주는 게 낫습니다.

39 · Tom AhnSQE

이 주제를 마무리하기 전에 답해야 할 질문이 하나 더 있습니다. 다른 모델도 영향을 받나요? 짧아진 타임아웃 패치가 공통 커널 브랜치에 들어갔기 때문에, 지금 랩에 있는 Orion Lite 빌드에도 들어가 있습니다. Orion Lite는 다른 스토리지 부품을 쓰지만 같은 공급사 제품입니다.

40 · Stefan BrandtKestrel Memory

Orion Lite 부품은 이전 세대 컨트롤러를 쓰고, 더 큰 쓰기 버퍼 기능이 아예 없어서 플러시 시간은 이전 펌웨어와 비슷할 겁니다. 거기서 같은 문제가 나온다면 놀랄 것 같아요. 그렇지만 제 말을 그대로 믿기보다는 직접 확인해 주셨으면 합니다.

41 · Tom AhnSQE

알겠습니다. Orion Lite는 금요일부터 같은 스트레스 프로필로 돌고 있고, 지금까지 100대에서 스토리지 패닉은 한 건도 없습니다. 계속 돌리다가 상황이 바뀌면 바로 알리겠습니다.

42 · Minji SeoSQE

좋습니다. 그럼 현재로서는 보류는 Orion에만 적용되고, 데이터가 달리 말해 주지 않는 한 Orion Lite는 현재 일정을 유지합니다. 나중에 아무도 헷갈리지 않도록 그 내용을 명시적으로 적어 둡시다.

실행 항목

43 · Minji SeoSQE

실행 항목을 정리하겠습니다. 현수 님은 타임아웃을 되돌린 테스트 빌드를 오늘 오후 4시까지 준비해 주세요. 지우 님은 태그 추적과 유효성 검사가 들어간 디버그 빌드를 오늘 중으로요. Stefan은 펌웨어 다운그레이드 도구와 이전 이미지를 한 시간 안에 보내 주세요. Tom은 오늘 밤 네 그룹 스트레스 테스트를 시작하고 수요일 오전에 중간 결과를 공유해 주세요. Laura는 지우 님이 보내는 대로 컨트롤러 레지스터 덤프를 검토해 주세요. 그리고 저는 릴리스 관리팀과의 소통을 맡겠습니다. 빠진 게 있나요?

44 · Laura ChenQorvix Customer Engineering

작은 거 하나 추가할게요. 타임아웃 변경에 해당하는 정확한 커널 커밋을 누가 공유해 주실 수 있나요? 저희 레퍼런스 드라이버와 비교해 보고 싶은데, 저희 레퍼런스 값은 사실 500밀리초가 아니라 1초거든요.

45 · Hyunsoo BaeKernel Storage

흥미롭네요, 몰랐습니다. 회의 끝나자마자 커밋을 보내 드리겠습니다. 레퍼런스가 1초라면 애초에 왜 그 값에서 벗어났는지도 알아봐야겠네요.

46 · Stefan BrandtKestrel Memory

저희 쪽에서는 펌웨어팀에 새 버퍼 크기에서의 최악 플러시 시간 분포를 귀사 구성 기준으로 측정해 달라고 요청하겠습니다. 그러면 어떤 타임아웃 값이 실제로 얼마나 여유를 주는지 알 수 있을 겁니다.

마무리 및 다음 회의

47 · Minji SeoSQE

훌륭합니다. 건설적으로 진행해 주셔서 모두 감사합니다. 8월 5일 수요일 한국 시간 오전 9시에 다시 모이겠습니다. 뮌헨은 새벽 2시니까 Stefan에게는 대신 서면 요약을 보내고, 펌웨어 그룹이 의심스러워 보일 때만 연락드리겠습니다. Laura는 타이베이 시간 오전 8시면 괜찮으실 거예요.

48 · Laura ChenQorvix Customer Engineering

괜찮습니다. 수요일에 뵙겠습니다.

49 · Stefan BrandtKestrel Memory

감사합니다, 민지 님. 요약 보내 주시는 것 감사하고, 펌웨어팀이 필요하면 언제든 연락 주세요.

50 · Tom AhnSQE

매일 아침 채널에 테스트 진행 상황을 올리겠습니다. 그러면 추세를 보려고 수요일까지 기다릴 필요가 없을 거예요.

03 / Business expressions

anywhere near

~ 근처에도 (가지 않게) · 위험한 것을 절대 특정 대상에 가까이 두지 않겠다고 강조할 때

I don't want it anywhere near the next OTA until we understand it.

응용 연습
I don't want this debug flag anywhere near a production build.

I'm your person

제가 담당자입니다, 저에게 물어보세요 · 특정 분야의 질문을 자신에게 하라고 할 때

I run the stress lab and I'm the one who has been collecting the ramdumps over the weekend, so if you have questions about test conditions, I'm your person.

응용 연습
If you need access to the symbol server, I'm your person.

who is to blame

누구 탓인지 · 책임 추궁이 아닌 문제 해결에 집중하자고 할 때

One ground rule before we start: this meeting is about facts and next experiments, not about who is to blame.

응용 연습
The postmortem isn't about who is to blame; it's about what we learn.

walk us through

차근차근 설명해 주다 · 상황이나 데이터를 단계별로 설명해 달라고 요청할 때

Tom, can you walk us through what we're seeing?

응용 연습
Could you walk us through the call stack in the first dump?

happen to

우연히 ~하다 · 관련이 없을 수 있는 것들이 우연히 함께 나타났음을 말할 때

Just to clarify, are all eleven panics the same signature, or are we looking at several different crashes that happen to show up together?

응용 연습
The two crashes happen to share a build, but the root causes differ.

park those

(안건을) 잠시 보류하다 · 현재 논의에서 벗어난 항목을 나중으로 미룰 때

Let's park those two and focus on the nine.

응용 연습
Let's park those UI bugs until after the kernel discussion.

to be fair

공정하게 말하면 · 한쪽에 불리한 해석을 균형 있게 보완할 때

But to be fair, every device in this run has that firmware, so that alone doesn't prove anything.

응용 연습
To be fair, the vendor flagged this risk in their release notes.

with confidence

확신을 가지고 · 확인된 사실과 추정을 구분해 말할 때

Here's what I can say with confidence.

응용 연습
We can say with confidence that the regression started in build 412.

working hypothesis

작업 가설 · 아직 증명되지 않았지만 현재 기준으로 삼는 가설을 말할 때

So my working hypothesis is a race: the error handler aborts request seventeen and frees the slot, and then a late completion interrupt for the same request arrives from the controller.

응용 연습
Our working hypothesis is a deadlock between the two binder threads.

a plausible chain

그럴듯한 연결 고리 · 원인과 결과의 흐름이 논리적으로 맞아 보일 때

That's a plausible chain.

응용 연습
That's a plausible chain, but we need traces to confirm it.

That's on us

그건 저희 책임입니다 · 자기 팀의 실수를 깔끔하게 인정할 때

That's on us.

응용 연습
We merged it without a full regression run. That's on us.

layered on top of each other

서로 겹쳐 있는 · 여러 원인이 복합적으로 작용할 때

We may have two problems layered on top of each other: a timeout that's too aggressive, which makes the error handler run far more often, and a missing validity check, which turns a recoverable situation into a panic.

응용 연습
The jank and the memory leak are layered on top of each other.

confirm or rule it out

확인하거나 배제하다 · 가설 검증 실험을 계획할 때

What experiments would confirm or rule it out, and how quickly can we run them?

응용 연습
A firmware A/B test would confirm or rule it out within two days.

spare

(여분을) 내주다, 할애하다 · 자원이나 인력을 추가로 줄 수 있는지 물을 때

Tom, can we spare forty more devices?

응용 연습
Can your team spare one engineer for the triage rotation?

on hold pending

~이 나올 때까지 보류된 · 조건이 충족될 때까지 작업을 멈춘다고 공지할 때

I'll inform the release management team that the August 6th OTA is on hold pending root cause, and that we expect to give a new date on Wednesday.

응용 연습
The rollout is on hold pending the carrier's approval.

keeping this constructive

건설적으로 진행하는 것 · 민감한 논의를 협조적으로 마친 참석자들에게 감사할 때

Thank you, everyone, for keeping this constructive.

응용 연습
Thanks for keeping this constructive despite the pressure.