Появился препринт (с видео и звуком) доклада «Оптимизации I/O стека в смартфонах» с конференции ATC'13, которая началась 26 августа и закончится в эту пятницу.
The Android I/O stack consists of elaborate and mature components (SQLite, the EXT4 filesystem, interrupt-driven I/O, and NAND-based storage) whose integrated behavior is not well-orchestrated, which leaves a substantial room for an improvement. We overhauled the block I/O behavior of five filesystems (EXT4, XFS, BTRFS, NILFS, and F2FS) under each of the five different journaling modes of SQLite. We found that the most significant inefficiency originates from the fact that filesystem journals the database journaling activity; we refer to this as the JOJ (Journaling of Journal) anomaly. The JOJ overhead compounds in EXT4 when the bulky EXT4 journaling activity is triggered by an fsync() call from SQLite. We propose (i) the elimination of unnecessary metadata journaling for the filesystem, (ii) external journaling and (iii) polling-based I/O to improve the I/O performance, primarily to improve the efficiency of filesystem journaling in the SQLite environment. We examined the performance trade-offs for each combination of the five database journaling modes, five filesystems and three optimization techniques. When we applied three optimization techniques in existing Android I/O stack, the SQLite performance (inserts/sec) improved by 130%. With the F2FS filesystem, WAL journaling mode (SQLite), and the combination of our optimization efforts, we improved the SQLite performance (inserts/sec) by 300%, from 39 ins/sec to 157 ins/sec, compared to the stock Android I/O stack.
Вольный перевод:
Стек ввода/вывода Андроида состоит из разных составных частей (SQLite, файловая система EXT4, ввод/вывод основанный на прерываниях, и NAND-хранилище), суммарное поведение которых не является хорошо-организованным, что дает возможности для его улучшения. Мы тщательно рассмотрели поведение блочного ввода/вывода для пяти файловых систем (ext4, xfs, btrfs, nilfs и f2fs) для каждого из пяти возможных вариантов работы журнала SQLite. Мы обнаружили, что самая значительная неэффективность работы связана с тем, что файловая система ведет журнал журнала базы данных; мы называем это аномалией JOJ (журналирование журнала). JOJ проявляется в ext4, когда запись в журнал вызвана функцией fsync() из SQLite. Мы предлагаем (1) ликвидацию ведения журнала избыточных метаданных для файловой системы, (2) внешнего журналирования и (3) избирательного ввода/вывода для повышения производительности ввода/вывода, главным образом повысив эффективность ведение журнала файловой системы в среде SQLite. Мы исследовали влияние на производительность для каждого из пяти режимов работы журнала БД, пяти файловых систем и трех техник оптимизаций. Затем мы применили три техники оптимизации в нынешней системе ввода/вывода Андроид и получили повышение производительности операции INSERT на 130%. Для F2FS и режима журнала SQLite WAL результат наших усилий дал 300% увеличение производительности, с 39 insert/с до 157 insert/с по сравнению с текущим Андроид.
Работа была проведена сотрудниками Samsung Electronics совместно с университетом Ханьянг в Южной Корее: Sooman Jeong (Hanyang University), Kisung Lee (Samsung Electronics), Seongjin Lee (Hanyang University), Seoungbum Son (Samsung Electronics), Youjip Won (Hanyang University).