  This work is dedicated to eliminating the overhead of guaranteeing the
storage order in modern IO stack. The existing block device adopts
prohibitively expensive resort in ensuring the storage order among write
requests: interleaving successive write requests with transfer and flush.
Exploiting the cache barrier command for the Flash storage, we overhaul the IO
scheduler, the dispatch module and the filesystem so that these layers are
orchestrated to preserve the ordering condition imposed by the application can
be delivered to the storage. Key ingredients of Barrier Enabled IO stack are
Epoch based IO scheduling, Order Preserving Dispatch, and Dual Mode Journaling.
Barrier enabled IO stack successfully eliminates the root cause of excessive
overhead in enforcing the storage order. Dual Mode Journaling in BarrierFS
dedicates the separate threads to effectively decouple the control plane and
data plane of the journal commit. We implement Barrier Enabled IO Stack in
server as well as in mobile platform. SQLite performance increases by 270% and
75%, in server and in smartphone, respectively. Relaxing the durability of a
transaction, SQLite performance and MySQL performance increases as much as by
73X and by 43X, respectively, in server storage.
