Недавно мы предприняли несколько попыток оптимизации нативного кода одного приложения нашей компании для решения проблем с производительностью. Мы выпустили серую версию, содержащую упомянутые изменения, для группы пользователей для оценки эффективности оптимизаций. Однако после релиза мы наблюдали значительное количество отчетов о сбоях, причем сбои в основном ограничивались 64-битными смартфонами бренда VIVO, а также сообщалось о нескольких аналогичных проблемах на телефонах Samsung. Отчеты о сбоях показывают, что источником ошибки является функция memcpy libc, тогда как наши модификации не включали никаких изменений в путь вызова функции memcpy, а вместо этого были сосредоточены на изменении другой бизнес-логики. Может ли кто-нибудь поделиться идеями по устранению неполадок?
Ниже приведена трассировка стека одного из вышеупомянутых сбоев,
SIGSEGV(SEGV_ACCERR)
#00 pc 000000000004eebc /apex/com.android.runtime/lib64/bionic/libc.so (__memcpy+60) [arm64-v8a::3bac97c2012f8248ca610b4e558e17d1]
#01 pc 000000000014a4c8 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/lib/arm64/.so [arm64-v8a::2b50f378ff7e1b8d1d2b6ba552079baf]
#02 pc 0000000000087aa8 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/lib/arm64/.so [arm64-v8a::2b50f378ff7e1b8d1d2b6ba552079baf]
#03 pc 0000000000086c78 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/lib/arm64/.so [arm64-v8a::2b50f378ff7e1b8d1d2b6ba552079baf]
#04 pc 000000000009e330 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/lib/arm64/.so [arm64-v8a::2b50f378ff7e1b8d1d2b6ba552079baf]
#05 pc 000000000009bb20 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/lib/arm64/.so [arm64-v8a::2b50f378ff7e1b8d1d2b6ba552079baf]
#06 pc 000000000008ab80 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/lib/arm64/.so [arm64-v8a::2b50f378ff7e1b8d1d2b6ba552079baf]
#07 pc 00000000002072e4 /data/app/~~k3_ers-e6zmrSs_FANzwIg==/.-yFrQvavwtQa6pbKyOTxrKA==/oat/arm64/base.odex [arm64-v8a::515535bd03fc04c8a3440ba0667ca07e]
java:
.engine.logic..F(SourceFile:1)
.engine.logic.PinyinLogic.h0(SourceFile:3)
.engine.logic.state.PredictionState.o(SourceFile:29)
.engine.logic.state.PredictionState.k(SourceFile:165)
.engine.logic.state.PredictionState.a(SourceFile:5)
.engine.logic.PyLogicStateContext.a(SourceFile:16)
.engine.logic.thread.LogicHandler.handleMessage(SourceFile:20)
android.os.Handler.dispatchMessage(Handler.java:106)
android.os.Looper.loopOnce(Looper.java:223)
android.os.Looper.loop(Looper.java:324)
android.os.HandlerThread.run(HandlerThread.java:67)
, и на других мобильных телефонах, которые также вызывают сбой при вызове memcpy, также происходят сбои, как показано ниже, при этом верхняя часть стека вызовов аналогична приведенной ниже, по-видимому, более специфичный для платформы вариант memcpy по имени __memcpy_aarch64_simd:
#00 pc 000000000009d6e0 /apex/com.android.runtime/lib64/bionic/libc.so (__memcpy_aarch64_simd+160) [arm64-v8a::5ba801faadc5ce7796fe32eab5104a1e]
Мы также попытались воспроизвести проблему, используя большое количество случайных входных данных (100 000 записей) на локальном телефоне VIVO, но сбоев приложения не произошло. Анализируя путь вызова от нашей локальной бизнес-логики к функции memcpy, мы смогли точно определить файл и номер строки каждого уровня в стеке вызовов сбоя. Однако наши модификации не присутствовали непосредственно в пути вызова, приводящем к сбою. Это привело нас в замешательство и отсутствие четкого подхода к устранению неполадок, поскольку у нас нет прямых подсказок или конкретного направления для расследования.
Сбои в основном распространяются на (1) Android 13, уровень 33 и (2) Android 14, уровень 34
, как показано ниже из онлайн-отчетов о сбоях
Android 13,level 33
Android 14,level 34
Android 14,level 34
Android 14,level 34
Android 13,level 33
Android 14,level 34
Android 14,level 34
Android 13,level 33
Android 14,level 34
Android 14,level 34
Android 13,level 33
Android 13,level 33
Android 13,level 33
Android 13,level 33
Android 13,level 33
Android 13,level 33
Android 13,level 33
Android 14,level 34
Подробнее здесь: https://stackoverflow.com/questions/784 ... ivo-samsun
Сбой memcpy в собственной логике общих объектов на конкретном устройстве (VIVO/Samsung) и только на 64-битных устройства ⇐ Android
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Почему заполнение структуры одинакова в 64 -битных и 32 -битных системах?
Anonymous » » в форуме C++ - 0 Ответы
- 11 Просмотры
-
Последнее сообщение Anonymous
-