holding up
잘 버티고 있는 · 수정이나 해결책이 계속 효과를 유지할 때
Before we get to the leak, a quick piece of good news: the hard lockup fix from last week is holding up.
응용 연습
The new timeout value is holding up in the field.
SYSTEM SW / 2026-08-19 / Pre-launch escalation
Orion Fold 팩토리 빌드 직전 시스템 서버 메모리 누수 긴급 점검
9월 18일 출시를 앞둔 Orion Fold에서, 접고 펼 때마다 시스템 서버 메모리가 조금씩 늘어나 수천 번 후 소프트 리부트가 발생하는 누수가 발견되었습니다. 8월 28일 팩토리 빌드 마감을 앞두고 프로그램 관리, SQE, 플랫폼 프레임워크, 디스플레이 소프트웨어 팀이 원인 분석 현황과 수정 일정, 대안을 논의합니다.
가상의 비즈니스 회의 · 중급~고급 · 2,205단어 · 약 18분
Good morning, everyone. I'm Sarah, and as most of you know, I've moved from the Pulse Watch launch straight onto Orion Fold. We're thirty days from launch and nine days from the factory build cutoff on August 28th. I called this meeting because SQE found a memory leak over the weekend that could be a launch blocker, and I want a clear plan by the end of this hour.
Hyemi, SQE lead for Orion Fold. Before we get to the leak, a quick piece of good news: the hard lockup fix from last week is holding up. We've run twenty-two thousand folds on the robots with the fix, and we've had zero freezes.
That's a relief. The access timeout dumps pointed exactly at the interrupt handler, so we were fairly confident, but it's good to see it confirmed at scale.
Brian from Platform Framework, and Taemin from my team, who's been looking at the heap dumps since Sunday.
Hi. Taemin Ko, Framework. I work on window management and multi-display support.
Woojin, Display Software. I suspect part of this leak may end up in our area, so I'm glad to be here early.
Hyemi, what did you find?
Because the robots now run for days without freezing, we were able to see a much slower problem for the first time. The system server's memory grows by about one point two megabytes every time the device is folded or unfolded, and it never comes back down. After roughly two thousand folds, the system server reaches its memory limit, the low memory killer terminates it, and the device does a soft reboot: the screen goes black, the boot animation plays, and everything restarts in about twenty seconds.
Two thousand folds sounds like a lot. How long would that take for a real user?
Based on our usage studies from the previous foldable, the median user folds about eighty times a day, and heavy users fold up to two hundred times. So a median user would hit it after about twenty-five days without a reboot, and a heavy user after ten. Most people restart their phones less often than that, so in practice, many users would see a random restart every few weeks.
And a soft reboot loses whatever the user was doing, which reviewers will notice in their long-term reviews. It's not as dramatic as a freeze, but it's a launch blocker in my view.
Taemin, what do the heap dumps show?
There are actually two separate leaks, and they add up to the one point two megabytes. The first one is in managed memory, the Java heap. It's about two hundred kilobytes per fold. Every fold creates a new configuration listener for the taskbar feature on the main screen, and the old listener is never unregistered. So we accumulate thousands of listeners, and each one holds a reference to a full display configuration object.
That's a textbook leak, and the good news is that the fix is simple. Taemin already has a patch that unregisters the listener when the main display turns off. It's been tested on two robots since yesterday, and the managed heap stays flat.
And the second leak?
The second one is in native memory, and it's the bigger one: about one megabyte per fold. The heap dump tools don't show native allocations in as much detail, but what we can see is that the graphics buffer count grows with each fold. It looks like the surfaces used to draw the cover screen aren't being fully released when the cover display turns off.
That's where it crosses into our area. When the cover display turns off, the display driver releases its own buffers, but the composition layer for that display is supposed to be destroyed by the framework. If the framework keeps a reference to the layer, the buffers attached to it stay allocated, even though nothing is ever drawn to them again.
Is it possible the managed leak and the native leak are actually the same bug? If the old listeners hold references to display configuration objects, and those objects hold references to the layers, then fixing the listener leak might also release the buffers.
That was my first hope too, but no. With my patch, the managed heap stays flat, but the native memory still grows by about one megabyte per fold. So they're independent. The layer must be held by something else.
How do we find out what's holding it?
The compositor keeps a list of every layer with its owner and reference count. If we dump that list after, say, a hundred folds, we should see a hundred cover screen layers that should have been destroyed, and the dump tells us which process created them. That narrows it down to one owner in a few minutes.
I can run that today. One robot, a clean boot, a hundred folds, then the layer dump. I'll have it to you by early afternoon.
One suspicion I have: the always-on display on the cover screen. When the device is unfolded, the cover screen turns off, but the always-on clock has its own layer that might be recreated each time instead of reused. That feature was added late, in July.
That's a good lead. Late features are where leaks usually hide, because they get the least soak time. If it's the always-on clock, that's my team's code, and the fix would likely be to reuse a single layer.
I can test that theory quickly too. If I turn off the always-on display on the cover screen and run a hundred folds, and the native memory stays flat, we'll know. I'll run both tests in parallel on two robots, so we get both answers at the same time instead of one after the other.
Let's talk about time. The factory cutoff is August 28th. If we find the native leak today, can both fixes be in the factory build?
For me to sign off on a leak fix, I need a long soak: at least five thousand folds on several robots, to prove the memory stays flat well past the two-thousand-fold point. At our current robot speed, that's about five days. So if a fix is ready by Friday the twenty-first, the soak finishes on the twenty-sixth, which leaves two days of margin.
And if the native fix isn't ready by Friday?
Then I see two options. Option one: ship the factory build with only the managed leak fixed, and put the native fix in the day-one update. A brand-new device can't reach two thousand folds in its first week, so as long as users take the day-one update, they'd never hit the problem. Option two: a mitigation in the factory build that destroys and recreates the whole cover screen composition when the display turns off. It's heavy-handed, but it releases everything.
I'd be cautious about option two. Recreating the whole composition on every fold adds latency to the unfold animation, maybe fifty to eighty milliseconds. Users would feel that, and the fold animation is one of the first things reviewers judge. I'd rather not trade a slow leak for a visibly slower fold.
Understood. So option one is our fallback. Given what we learned on Pulse Watch, I'm comfortable with a day-one update as part of the plan, as long as it's planned from the start rather than added in a panic.
One condition from SQE: if we go with option one, the day-one update must be available before the first customer units ship, and we need the same companion check we used on Pulse Watch, so setup encourages the update.
Since the day-one update is now part of the plan either way, let's talk about logistics. On Pulse Watch, we learned that the update has to be ready before customer units arrive, and that some markets skip Wi-Fi during setup. What's different for Orion Fold?
The biggest difference is carriers. Orion Fold is sold mainly through carriers, and several of them require approval for any update, including a day-one update. The carrier certification build is the factory build, so if the native fix goes into a day-one update, it needs a separate, fast approval from each carrier before launch day.
How long do carriers usually need for a day-one update?
Ryan from my team says most carriers can review a small delta update in five to seven working days, if we tell them in advance that it's coming. The two US carriers that are usually slowest want at least ten. So if we submit the day-one update by September 3rd, we should have approvals before the eighteenth.
That gives us a hard deadline for the native fix even in the fallback case. If we can't fix it by Friday for the factory build, we still need it done, soaked, and submitted by September 3rd. That's two extra weeks, which should be plenty, but it isn't open-ended.
One more consideration. Review units for journalists usually ship about two weeks before launch, so around September 4th. Those units will run the factory build. If the native fix isn't in it, reviewers who use the device for a long-term review could hit the soft reboot after a few weeks, unless they install the update.
Good point. After Nova Tab, I'm not going to rely on reviewers following instructions. If we end up in the fallback case, I'll ask the review program team to flash the day-one update onto review units before they ship. It's manual work, but for a few hundred units, it's worth it.
That makes me even more motivated to have the fix ready by Friday. It would save everyone a lot of work.
How did we miss this until three weeks before launch? I'm not looking for blame, but I need to explain it to the launch director.
Honestly, the hard lockup hid it. Until last week, the robots froze every few hundred folds, so no device ever ran long enough to reach two thousand folds. Fixing one bug uncovered the next. It's a common pattern late in a program.
We could also catch this kind of leak much earlier with an automated memory check. If the nightly test suite folded the device a hundred times and compared system server memory before and after, a growth of one megabyte per fold would be impossible to miss. That test takes less than thirty minutes.
I'd extend it beyond folding. Any repeated user action, like rotating the screen, switching apps, or connecting and disconnecting a charger, should have a simple before-and-after memory comparison. Most leaks are small per action and only become visible after hundreds of repetitions.
Good. Let's add that to the retrospective list, and if it's really only thirty minutes, let's add the folding version to the nightly suite this week.
From the display side, I'd add the graphics buffer count to that check, not just total memory. Buffers are allocated in a separate pool, and on some builds they don't show up in the system server's memory numbers at all. If we only watch the system server, we could miss a buffer leak entirely.
Good point. I'll include both numbers in the nightly report, with a simple threshold: if either grows by more than five percent over a hundred folds, the test fails and opens a ticket automatically.
Let me summarize the plan. The managed leak fix goes into the factory build now, and the soak starts today. For the native leak: Hyemi runs the layer dump and the always-on display test today. If we have a fix by Friday the twenty-first, it goes into the factory build after a five-day soak. If not, it goes into the day-one update, which we plan from today, with the setup check. Option two, recreating the composition, is off the table. Any objections?
No objection. My team will support the layer analysis today, and Jisu can pair with Taemin on the fix if it turns out to involve the compositor.
Thank you. Actions: Taemin merges the managed leak fix today. Hyemi runs the layer dump and the always-on test, with results by 2 p.m. Brian owns the native fix if it's in the always-on clock. Woojin and Jisu support the compositor side. Taemin adds the hundred-fold memory check to the nightly suite. And I'll brief the launch director this afternoon and start the day-one update plan as a precaution.
Thank you, everyone. We'll meet again today at 4 p.m. Korea time to review Hyemi's results, and then daily at 9 a.m. until the factory build is handed off on the twenty-eighth. I know daily meetings are a burden, but at this point in a launch, a day matters.
Understood. I'll post the layer dump in the launch channel the moment I have it.
And I'll start reading the always-on clock code now, so I'm ready if the test confirms it. If it turns out to be somewhere else, I'll at least have ruled out one suspect before the four o'clock meeting.
Thanks, everyone. Sarah, I'll join the launch director briefing if you want a framework voice in the room. Sometimes it helps to hear directly from the team that owns the fix.
좋은 아침입니다, 여러분. 저는 Sarah이고, 다들 아시다시피 Pulse Watch 출시에서 바로 Orion Fold로 옮겨 왔습니다. 출시까지 30일, 8월 28일 팩토리 빌드 마감까지 9일 남았습니다. 주말 동안 SQE가 출시 차단 이슈가 될 수 있는 메모리 누수를 발견해서 이 회의를 소집했고, 이 한 시간이 끝날 때까지 명확한 계획을 세우고 싶습니다.
Orion Fold SQE 리드 혜미입니다. 누수 이야기 전에 짧은 좋은 소식 하나요. 지난주 hard lockup 수정이 잘 버티고 있습니다. 수정이 들어간 로봇으로 2만 2천 번 접었는데 멈춤이 한 번도 없었습니다.
다행이네요. 접근 타임아웃 덤프가 정확히 인터럽트 핸들러를 가리켰어서 꽤 확신은 있었지만, 대규모로 확인되니 좋습니다.
플랫폼 프레임워크팀 Brian이고, 일요일부터 힙 덤프를 보고 있는 저희 팀 태민 님도 함께 왔습니다.
안녕하세요. 프레임워크팀 고태민입니다. 윈도우 관리와 멀티 디스플레이 지원을 담당합니다.
디스플레이 소프트웨어팀 우진입니다. 이 누수의 일부가 결국 저희 영역으로 올 것 같아서, 일찍 참석하게 돼 다행입니다.
혜미 님, 무엇을 발견했나요?
이제 로봇이 멈추지 않고 며칠씩 돌아가서, 처음으로 훨씬 느리게 진행되는 문제를 볼 수 있었습니다. 단말을 접거나 펼 때마다 시스템 서버 메모리가 약 1.2MB씩 늘어나고, 절대 줄어들지 않습니다. 약 2천 번 접으면 시스템 서버가 메모리 한계에 도달하고, 저메모리 킬러가 그걸 종료시켜서 단말이 소프트 리부트를 합니다. 화면이 꺼지고, 부팅 애니메이션이 나오고, 약 20초 만에 모든 게 재시작됩니다.
2천 번이면 많아 보이는데요. 실제 사용자라면 얼마나 걸릴까요?
이전 폴더블 사용 연구에 따르면, 중앙값 사용자는 하루 약 80번, 헤비 사용자는 최대 200번 접습니다. 그러니 재부팅 없이 중앙값 사용자는 약 25일 후, 헤비 사용자는 10일 후에 문제를 겪게 됩니다. 대부분의 사람은 그보다 폰을 덜 자주 재시작하니, 실제로는 많은 사용자가 몇 주마다 무작위 재시작을 보게 될 겁니다.
그리고 소프트 리부트는 사용자가 하던 작업을 잃게 만드는데, 리뷰어들이 장기 사용 리뷰에서 알아챌 겁니다. 멈춤만큼 극적이진 않지만, 제가 보기엔 출시 차단 이슈입니다.
태민 님, 힙 덤프에는 뭐가 나오나요?
사실 별개의 누수가 두 개 있고, 합쳐서 1.2MB가 됩니다. 첫 번째는 관리형 메모리, 즉 Java 힙에 있습니다. 접을 때마다 약 200KB입니다. 접을 때마다 메인 화면의 작업 표시줄 기능을 위한 새 설정 리스너가 생성되는데, 이전 리스너가 절대 해제되지 않습니다. 그래서 리스너가 수천 개 쌓이고, 각각 전체 디스플레이 설정 객체에 대한 참조를 붙잡고 있습니다.
교과서적인 누수이고, 좋은 소식은 수정이 간단하다는 겁니다. 태민 님이 메인 디스플레이가 꺼질 때 리스너를 해제하는 패치를 이미 만들었습니다. 어제부터 로봇 두 대에서 테스트했는데 관리형 힙이 평탄하게 유지됩니다.
두 번째 누수는요?
두 번째는 네이티브 메모리에 있고, 더 큰 쪽입니다. 접을 때마다 약 1MB입니다. 힙 덤프 도구는 네이티브 할당을 그렇게 자세히 보여 주지 않지만, 볼 수 있는 건 접을 때마다 그래픽 버퍼 개수가 늘어난다는 겁니다. 커버 디스플레이가 꺼질 때 커버 화면을 그리는 데 쓰인 서피스가 완전히 해제되지 않는 것 같습니다.
거기서 저희 영역과 겹칩니다. 커버 디스플레이가 꺼지면 디스플레이 드라이버는 자기 버퍼를 해제하지만, 그 디스플레이의 합성 레이어는 프레임워크가 제거해야 합니다. 프레임워크가 레이어에 대한 참조를 유지하면, 거기에 붙은 버퍼는 다시는 아무것도 그려지지 않더라도 계속 할당된 상태로 남습니다.
관리형 누수와 네이티브 누수가 사실 같은 버그일 가능성은 없을까요? 이전 리스너가 디스플레이 설정 객체를 참조하고, 그 객체가 레이어를 참조한다면, 리스너 누수를 고치면 버퍼도 해제될 수 있잖아요.
저도 처음엔 그러길 바랐지만, 아닙니다. 제 패치를 적용하면 관리형 힙은 평탄하게 유지되지만, 네이티브 메모리는 여전히 접을 때마다 약 1MB씩 늘어납니다. 그러니 둘은 독립적입니다. 레이어는 다른 무언가가 붙잡고 있는 게 분명합니다.
무엇이 붙잡고 있는지 어떻게 알아내죠?
합성기는 모든 레이어를 소유자와 참조 횟수와 함께 목록으로 관리합니다. 예를 들어 100번 접은 후 그 목록을 덤프하면, 제거됐어야 할 커버 화면 레이어 100개가 보일 테고, 덤프가 어떤 프로세스가 그걸 만들었는지 알려 줄 겁니다. 그러면 몇 분 안에 소유자 하나로 좁혀집니다.
오늘 할 수 있습니다. 로봇 한 대로 깨끗하게 부팅하고, 100번 접은 다음 레이어 덤프를 뜨겠습니다. 이른 오후까지 드릴게요.
제가 의심하는 게 하나 있습니다. 커버 화면의 상시 표시 화면이요. 단말을 펼치면 커버 화면이 꺼지지만, 상시 표시 시계는 자체 레이어가 있는데, 재사용되지 않고 매번 새로 만들어질 수도 있습니다. 그 기능은 7월에 늦게 추가됐습니다.
좋은 단서네요. 늦게 추가된 기능은 소크 테스트 시간이 가장 짧아서 누수가 주로 숨는 곳이죠. 상시 표시 시계라면 저희 팀 코드이고, 수정은 아마 레이어 하나를 재사용하는 방식이 될 겁니다.
그 가설도 빠르게 테스트할 수 있습니다. 커버 화면의 상시 표시를 끄고 100번 접었을 때 네이티브 메모리가 평탄하게 유지되면 알 수 있겠죠. 두 테스트를 로봇 두 대로 병렬로 돌려서, 하나씩 차례로 기다리는 대신 두 답을 동시에 얻겠습니다.
시간 이야기를 하죠. 팩토리 마감은 8월 28일입니다. 오늘 네이티브 누수를 찾으면, 두 수정이 모두 팩토리 빌드에 들어갈 수 있나요?
누수 수정을 승인하려면 긴 소크 테스트가 필요합니다. 메모리가 2천 번 지점을 훨씬 넘어서도 평탄하다는 걸 증명하려면 로봇 여러 대로 최소 5천 번은 접어야 합니다. 현재 로봇 속도로는 약 5일입니다. 그러니 수정이 21일 금요일까지 준비되면 소크가 26일에 끝나서 이틀 여유가 남습니다.
네이티브 수정이 금요일까지 준비되지 않으면요?
그럼 두 가지 선택지가 있습니다. 첫째, 관리형 누수만 고친 채 팩토리 빌드를 내보내고, 네이티브 수정은 출시 당일 업데이트에 넣는 겁니다. 새 단말은 첫 주에 2천 번을 접을 수 없으니, 사용자가 출시 당일 업데이트를 받기만 하면 문제를 겪지 않습니다. 둘째, 팩토리 빌드에 디스플레이가 꺼질 때 커버 화면 합성 전체를 제거하고 다시 만드는 완화책을 넣는 겁니다. 투박하지만 모든 걸 해제합니다.
두 번째 선택지는 조심하고 싶습니다. 접을 때마다 합성 전체를 다시 만들면 펼치는 애니메이션에 50~80밀리초 정도 지연이 더해집니다. 사용자가 체감할 테고, 폴딩 애니메이션은 리뷰어들이 가장 먼저 평가하는 것 중 하나입니다. 느린 누수를 눈에 띄게 느린 폴딩과 맞바꾸고 싶지는 않습니다.
알겠습니다. 그럼 첫 번째 선택지가 대안이네요. Pulse Watch에서 배운 걸 고려하면, 당황해서 추가하는 게 아니라 처음부터 계획된 것이라면 출시 당일 업데이트를 계획의 일부로 두는 데 불편함이 없습니다.
SQE 조건이 하나 있습니다. 첫 번째 선택지로 간다면, 출시 당일 업데이트는 첫 고객 단말이 배송되기 전에 준비돼 있어야 하고, 설정 과정에서 업데이트를 권장하도록 Pulse Watch에서 썼던 것과 같은 확인 절차가 필요합니다.
이제 출시 당일 업데이트는 어느 쪽이든 계획의 일부가 됐으니, 준비 사항을 이야기합시다. Pulse Watch에서 업데이트가 고객 단말 도착 전에 준비돼야 하고, 일부 시장에서는 설정 중 Wi-Fi를 건너뛴다는 걸 배웠죠. Orion Fold는 뭐가 다른가요?
가장 큰 차이는 통신사입니다. Orion Fold는 주로 통신사를 통해 판매되고, 여러 통신사가 출시 당일 업데이트를 포함해 모든 업데이트에 승인을 요구합니다. 통신사 인증 빌드는 팩토리 빌드이니, 네이티브 수정이 출시 당일 업데이트에 들어가면 출시일 전에 통신사별로 별도의 빠른 승인을 받아야 합니다.
통신사는 보통 출시 당일 업데이트에 얼마나 걸리나요?
저희 팀 Ryan 말로는, 미리 알려 주기만 하면 대부분의 통신사가 작은 변경분 업데이트를 영업일 5~7일 안에 검토할 수 있다고 합니다. 보통 가장 느린 미국 통신사 두 곳은 최소 10일을 원합니다. 그러니 9월 3일까지 출시 당일 업데이트를 제출하면 18일 전에 승인을 받을 수 있을 겁니다.
그러면 대안 경우에도 네이티브 수정에 확실한 마감이 생기네요. 금요일까지 팩토리 빌드용으로 못 고치더라도, 9월 3일까지는 수정, 소크, 제출까지 끝내야 합니다. 2주가 더 생기는 거라 충분하겠지만, 무기한은 아닙니다.
고려할 점이 하나 더 있습니다. 기자용 리뷰 단말은 보통 출시 약 2주 전, 그러니까 9월 4일경 발송됩니다. 그 단말들은 팩토리 빌드로 동작합니다. 네이티브 수정이 거기 없으면, 장기 리뷰를 위해 단말을 쓰는 리뷰어들이 업데이트를 설치하지 않는 한 몇 주 후 소프트 리부트를 겪을 수 있습니다.
좋은 지적이에요. Nova Tab 이후로 리뷰어들이 안내를 따를 거라고 기대하지 않을 겁니다. 대안 경우로 가게 되면, 리뷰 프로그램팀에 발송 전 리뷰 단말에 출시 당일 업데이트를 직접 플래싱해 달라고 요청하겠습니다. 수작업이지만 수백 대 정도면 그만한 가치가 있습니다.
그러니 금요일까지 수정을 준비하고 싶은 마음이 더 커지네요. 모두의 수고를 많이 덜어 줄 테니까요.
어떻게 출시 3주 전까지 이걸 놓쳤죠? 탓하려는 게 아니라 출시 총괄에게 설명해야 해서요.
솔직히 hard lockup이 이걸 가리고 있었습니다. 지난주까지 로봇이 수백 번마다 멈춰서, 어떤 단말도 2천 번에 도달할 만큼 오래 돌지 못했습니다. 버그 하나를 고치니 다음 버그가 드러난 거죠. 프로그램 후반에 흔한 패턴입니다.
자동화된 메모리 검사로 이런 종류의 누수를 훨씬 일찍 잡을 수도 있습니다. 야간 테스트 스위트가 단말을 100번 접고 전후의 시스템 서버 메모리를 비교한다면, 접을 때마다 1MB씩 증가하는 건 놓칠 수가 없습니다. 그 테스트는 30분도 안 걸립니다.
폴딩을 넘어서 확장하고 싶습니다. 화면 회전, 앱 전환, 충전기 연결과 해제처럼 반복되는 모든 사용자 동작에 대해 간단한 전후 메모리 비교가 있어야 합니다. 대부분의 누수는 동작당 작아서 수백 번 반복해야 보입니다.
좋습니다. 회고 목록에 추가하고, 정말 30분밖에 안 걸린다면 폴딩 버전은 이번 주에 야간 스위트에 추가합시다.
디스플레이 쪽에서는 그 검사에 총 메모리뿐 아니라 그래픽 버퍼 개수도 추가하고 싶습니다. 버퍼는 별도 풀에서 할당되고, 일부 빌드에서는 시스템 서버 메모리 수치에 전혀 나타나지 않습니다. 시스템 서버만 보면 버퍼 누수를 완전히 놓칠 수 있습니다.
좋은 지적입니다. 야간 보고서에 두 수치를 모두 넣고 간단한 임계값을 두겠습니다. 100번 접는 동안 어느 쪽이든 5% 넘게 늘어나면 테스트가 실패하고 자동으로 티켓이 생성되게요.
계획을 요약하겠습니다. 관리형 누수 수정은 지금 팩토리 빌드에 들어가고 소크는 오늘 시작합니다. 네이티브 누수는 혜미 님이 오늘 레이어 덤프와 상시 표시 테스트를 합니다. 21일 금요일까지 수정이 나오면 5일 소크 후 팩토리 빌드에 들어갑니다. 그렇지 않으면 오늘부터 계획하는 출시 당일 업데이트에 설정 확인 절차와 함께 들어갑니다. 합성을 다시 만드는 두 번째 선택지는 제외합니다. 이견 있나요?
이견 없습니다. 저희 팀이 오늘 레이어 분석을 지원하고, 합성기와 관련된 것으로 밝혀지면 지수 님이 태민 님과 함께 수정 작업을 하면 됩니다.
감사합니다. 실행 항목입니다. 태민 님은 오늘 관리형 누수 수정을 머지해 주세요. 혜미 님은 레이어 덤프와 상시 표시 테스트를 해서 오후 2시까지 결과를 주세요. 상시 표시 시계 문제라면 Brian이 네이티브 수정을 맡아 주세요. 우진 님과 지수 님은 합성기 쪽을 지원해 주세요. 태민 님은 100번 폴딩 메모리 검사를 야간 스위트에 추가해 주세요. 그리고 저는 오늘 오후에 출시 총괄에게 보고하고, 예방 차원에서 출시 당일 업데이트 계획을 시작하겠습니다.
모두 감사합니다. 오늘 한국 시간 오후 4시에 다시 만나 혜미 님 결과를 검토하고, 그 이후로는 28일 팩토리 빌드를 넘길 때까지 매일 오전 9시에 모이겠습니다. 매일 회의가 부담인 건 알지만, 출시의 이 시점에서는 하루하루가 중요합니다.
알겠습니다. 레이어 덤프가 나오는 즉시 출시 채널에 올리겠습니다.
그리고 테스트로 확인되면 바로 대응할 수 있도록 지금부터 상시 표시 시계 코드를 읽기 시작하겠습니다. 다른 곳으로 밝혀지더라도, 적어도 4시 회의 전에 용의자 하나는 배제해 두게 되겠죠.
모두 감사합니다. Sarah, 그 자리에 프레임워크 쪽 의견이 필요하면 출시 총괄 보고에 같이 가겠습니다. 수정을 맡은 팀에게서 직접 듣는 게 도움이 될 때가 있거든요.
잘 버티고 있는 · 수정이나 해결책이 계속 효과를 유지할 때
Before we get to the leak, a quick piece of good news: the hard lockup fix from last week is holding up.
응용 연습
The new timeout value is holding up in the field.
대규모로 확인된 · 소수 테스트를 넘어 넓은 범위에서 결과가 확인됐을 때
The access timeout dumps pointed exactly at the interrupt handler, so we were fairly confident, but it's good to see it confirmed at scale.
응용 연습
The fix worked on five devices, but we need it confirmed at scale.
처음으로 · 이전에는 불가능했던 관찰이 가능해졌을 때
Because the robots now run for days without freezing, we were able to see a much slower problem for the first time.
응용 연습
With the new tracing, we can see the wakeup source for the first time.
실제로는 · 이론과 실제 상황을 구분할 때
Most people restart their phones less often than that, so in practice, many users would see a random restart every few weeks.
응용 연습
In practice, most users never change that setting.
합쳐서 ~이 되다 · 여러 요소의 합을 설명할 때
There are actually two separate leaks, and they add up to the one point two megabytes.
응용 연습
Three small regressions add up to a noticeable delay.
교과서적인 누수 · 전형적인 유형의 버그를 표현할 때
That's a textbook leak, and the good news is that the fix is simple.
응용 연습
Registering a callback and never removing it is a textbook leak.
우리 영역과 겹치다 · 문제가 자신의 담당 범위로 넘어올 때
That's where it crosses into our area.
응용 연습
Once the request reaches the HAL, it crosses into our area.
처음에 바랐던 것 · 기대했던 쉬운 해답이 아니었음을 말할 때
That was my first hope too, but no.
응용 연습
My first hope was a config issue, but it's a real bug.
좋은 단서 · 조사에 유용한 실마리가 나왔을 때
That's a good lead.
응용 연습
The timestamp correlation is a good lead.
누수가 주로 숨는 곳 · 문제가 잘 생기는 영역을 경험적으로 짚을 때
Late features are where leaks usually hide, because they get the least soak time.
응용 연습
Error paths are where leaks usually hide.
투박한, 과도한 · 효과는 있지만 부작용이 큰 해결책을 말할 때
It's heavy-handed, but it releases everything.
응용 연습
Rebooting the modem every hour is heavy-handed.
당황해서, 허둥지둥 · 충분한 계획 없이 급하게 대응하는 것을 경계할 때
Given what we learned on Pulse Watch, I'm comfortable with a day-one update as part of the plan, as long as it's planned from the start rather than added in a panic.
응용 연습
Changes made in a panic usually need another fix later.
탓하려는 게 아니다 · 원인을 물을 때 비난 의도가 없음을 분명히 할 때
I'm not looking for blame, but I need to explain it to the launch director.
응용 연습
I'm not looking for blame; I just want to understand the timeline.
다음 것을 드러냈다 · 하나를 해결하자 다른 문제가 보이게 된 상황을 말할 때
Fixing one bug uncovered the next.
응용 연습
Fixing the crash uncovered the next problem in the same path.
놓칠 수가 없는 · 검사 방법이 문제를 확실히 잡아낼 것임을 강조할 때
If the nightly test suite folded the device a hundred times and compared system server memory before and after, a growth of one megabyte per fold would be impossible to miss.
응용 연습
With that alert in place, a crash spike would be impossible to miss.
선택지에서 제외된 · 더 이상 고려하지 않는 방안을 명확히 할 때
Option two, recreating the composition, is off the table.
응용 연습
Delaying the launch is off the table.