1 1 1 1 (VM) OS OS OS OS 1) OS 2) OS OS OS OS 1) OS 2) OS Linux LevelDB 1.46 OS 1. (VM) VM VM VM VM VM (OS) OS OS OS [1], [2], [3], [4], [5] OS OS 1) OS 1 Keio University 2) OS OS OS OS OS OS (LKM) OS OS OS OS OS OS OS 1
OS API API LKM Linux 4.8 Virtual File System (VFS) API 4 Linux 4.8 LevelDB 1.19 Linux LevelDB 1.46 LevelDB [6] 2 100 2 3 4 5 6 2. OS Unikernels [1] OSv [2] EbbRT [3] OS OS OS OS OS OSv OS VM OSv Linux API API OSv Lock Holder Preemption [7] OS OS OS Unikernels, EbbRT OS OS OS OS OS Unikernels 1 Mirage OS API Mirage EbbRT OS OS OS OS ClickOS [4] Xen OS Arrakis [8] IX [9] OS OS Arrakis IX CPU Arrakis IX OS OS 3. OS OS (LKM) 1) 2) OS 3) OS 2
アプリケーション OS 標準ライブラリ アプリケーション ユーザモード カーネルモード 既存 OS 既存 OS 上で動作するアプリケーション 1 標準ライブラリ 既存 OS 提案フレームワークを利用したアプリケーション LKM OS LKM LKM LKM ( 1) 3.1 VM 1 VM 1 3.2 OS OS OS OS OS 3.3 OS OS OS OS OS OS OS OS OS OS 3.4 API LKM OS API LKM API LKM OS API OS LKM API API API OS API API OS API 3
LKM 4. Linux 4.8 LKM Linux LKM Linux API C C++ 4.1 C C++ musl libc [10] libc++ [11] LKM API API libc libc 4 ( 1 ) ( 2 ) Virtual File System (VFS) ( 3 ) API ( 4 ) 3 (1) 4 LKM current files (2) Virtual File System (VFS) VFS VFS (3) API API (4) 3 Linux x64 322 1 API (1) sys stat sys lstat sys rmdir sys unlink sys access sys rename sys nanosleep sys clock gettime sys gettimeofday sys set robust list sys sched getaffinity sys mkdir sys sysinfo sys getrlimit sys prlimit64 sys getrusage sys futex (2) VFS sys open sys close sys pread64 sys pwrite64 sys read sys write sys fsync sys fdatasync sys lseek sys readv sys writev sys getdents sys fcntl * 1 (3) API sched yield geteuid (4) malloc pthread 1 30 1 libc 7000 5000 4.2 Linux API 2 *1 FUTEX PRIVATE 4
1 Linux API mmap vfork API Importance [12] Linux API API Linux 1 API mmap vfork API Importance 100% mmap LKM mmap mmap vfork vfork vfork 2 Linux kernel fpu begin kernel fpu end 5. LevelDB [6] Linux LKM 2 2 2 Linux Kernel 4.8 LevelDB 1.19 musl libc 1.1.15 libc++ CPU RAM SSD commit d842fe Intel Core i7-3820qm 16 GB 768 GB LevelDB libc++ musl libc Linux LKM LevelDB 3 LevelDB 48 7 28 28 mmap pread 0 79 5.1 LevelDB 76 114 LevelDB [6] LevelDB LevelDB LKM LevelDB C++ C C++ LKM LevelDB 2 LKM LKM 3 200 LevelDB 20000 1/100 Yahoo! Cloud Serving Benchmark (YCSB) [13] LevelDB LevelDB YCSB 5
3 50% 50% 1.02 (1) 1/6 (2) 100% (1) 50% 50% mmap LevelDB mmap pread LevelDB pwrite mmap 6. 4 100% 2 ( 1 ) 50% 50% ( 2 ) 100% 10 20 3 4 (1) 50% 50% 3 95 0.98 1.79 1.35 0.92 1.46 1/10 (2) 100% 4 95 1.61 1.70 1.58 1.60 OS OS OS OS OS OS OS Linux LevelDB LevelDB LevelDB 1.46 LevelDB LevelDB 1/100 API API API API JST CREST 6
[1] Madhavapeddy, A., Mortier, R., Rotsos, C., Scott, D., Singh, B., Gazagnaire, T., Smith, S., Hand, S. and Crowcroft, J.: Unikernels: Library Operating Systems for the Cloud, Proceedings of the Eighteenth International Conference on Architectural Support for Programming Languages and Operating Systems, (ASPLOS 13), New York, NY, USA, ACM, pp. 461 472 (online), DOI: 10.1145/2451116.2451167 (2013). [2] Kivity, A., Laor, D., Costa, G., Enberg, P., Har El, N., Marti, D. and Zolotarov, V.: OSv Optimizing the Operating System for Virtual Machines, 2014 USENIX Annual Technical Conference (USENIX ATC 14), Philadelphia, PA, USENIX Association, pp. 61 72 (online), available from https://www.usenix.org/conference/atc14/technicalsessions/presentation/kivity [3] Schatzberg, D., Cadden, J., Dong, H., Krieger, O. and Appavoo, J.: EbbRT: A Framework for Building Per-application Library Operating Systems, Proceedings of the 12th USENIX Conference on Operating Systems Design and Implementation, (OSDI 16), Berkeley, CA, USA, USENIX Association, pp. 671 688 (online), available from http://dl.acm.org/citation.cfm?id=3026877.3026929 (2016). [4] Martins, J., Ahmed, M., Raiciu, C., Olteanu, V., Honda, M., Bifulco, R. and Huici, F.: ClickOS and the Art of Network Function Virtualization, Proceedings of the 11th USENIX Conference on Networked Systems Design and Implementation, (NSDI 14), Berkeley, CA, USA, USENIX Association, pp. 459 473 (online), available from http://dl.acm.org/citation.cfm?id=2616448.2616491 [5] Ammons, G., Appavoo, J., Butrico, M., Da Silva, D., Grove, D., Kawachiya, K., Krieger, O., Rosenburg, B., Van Hensbergen, E. and Wisniewski, R. W.: Libra: A Library Operating System for a Jvm in a Virtualized Execution Environment, Proceedings of the 3rd International Conference on Virtual Execution Environments, VEE 07, New York, NY, USA, ACM, pp. 44 54 (online), DOI: 10.1145/1254810.1254817 (2007). [6] Google: LevelDB, https://github.com/google/ leveldb. [7] Friebel, T.: How to deal with lock-holder preemption, Xen Summit North America (2008). [8] Peter, S., Li, J., Zhang, I., Ports, D. R. K., Woos, D., Krishnamurthy, A., Anderson, T. and Roscoe, T.: Arrakis: The Operating System is the Control Plane, Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation, (OSDI 14), Berkeley, CA, USA, USENIX Association, pp. 1 16 (online), available from http://dl.acm.org/citation.cfm?id=2685048.2685050 [9] Belay, A., Prekas, G., Klimovic, A., Grossman, S., Kozyrakis, C. and Bugnion, E.: IX: A Protected Dataplane Operating System for High Throughput and Low Latency, Proceedings of the 11th USENIX Conference on Operating Systems Design and Implementation, (OSDI 14), Berkeley, CA, USA, USENIX Association, pp. 49 65 (online), available from http://dl.acm.org/citation.cfm?id=2685048.2685053 [10] Felker, R. et al.: musl libc, https://www.musl-libc. org/. [11] Group, L. D.: libc++ C++ Standard Library, http: //libcxx.llvm.org/. [12] Tsai, C.-C., Jain, B., Abdul, N. A. and Porter, D. E.: A Study of Modern Linux API Usage and Compatibility: What to Support when You Re Supporting, Proceedings of the Eleventh European Conference on Computer Systems, EuroSys 16, New York, NY, USA, ACM, pp. 16:1 16:16 (online), DOI: 10.1145/2901318.2901341 (2016). [13] Cooper, B.: Yahoo! Cloud Serving Benchmark, https: //github.com/brianfrankcooper/ycsb. 7