Programando para Memória Persistente: Dificuldades, Armadilhas e Desempenho
Resumo
A tecnologia de memória persistente (PM) provê endereçamento por byte com latência de acesso relativamente próxima às das memórias voláteis (DRAM). Contudo, programar com PM traz novos desafios não encontrados em ambientes típicos com memória volátil. Neste contexto, este artigo apresenta duas contribuições principais. Primeiramente, analisamos qualitativamente as dificuldades e armadilhas de se programar com a PMDK, a biblioteca oficial da Intel para programação do Optane DC (seu dispositivo de armazenamento persistente). Esta análise é o resultado das nossas experiências coletadas durante o desenvolvimento de um conjunto de estruturas de dados típicas de aplicações com persistência de dados. A segunda contribuição é uma análise de desempenho considerando implementações persistentes e voláteis dessas estruturas de dados para DRAM, Optane DC e SSD. Os resultados experimentais mostram que o Optane DC, apesar de em média ser 5,54× mais lento que o dispositivo volátil (DRAM), supera o SSD em 14× no pior caso.
Referências
Chen, Z., Hua, Y., Zhang, Y., and Ding, L. (2022). Efficiently detecting concurrency bugs in persistent memory programs. In ASPLOS'22, pages 873-887.
Felber, P., Fetzer, C., and Riegel, T. (2008). Dynamic performance tuning of word-based software transactional memory. In PPoPP'08, pages 237-246.
Gorjiara, H., Xu, G. H., and Demsky, B. (2022). Yashme: detecting persistency races. In ASPLOS'22, pages 830-845.
Gray, J. and Reuter, A. (1992). Transaction Processing: Concepts and Techniques. Morgan Kaufmann, 1st edition.
J.Choe (2017). Intel 3d xpoint memory die removed from intel optane™ pcm (phase change memory). url [link].
Jeongdong Choe, T. I. (2017). Intel 3D XPoint memory die removed from Intel Optane™ PCM (phase change memory).
Kannan, S., Gavrilovska, A., and Schwan, K. (2016). pVM: Persistent Virtual Memory for Efficient Capacity Scaling and Object Storage. In EuroSys'16, pages 1-16.
Liu, R.-S., Shen, D.-Y., Yang, C.-L., Yu, S.-C., and Wang, C.-Y. M. (2014). NVM Duet: Unified Working Memory and Persistent Store Architecture. In ASPLOS'14, pages 455-470.
Liu, S., Seemakhupt, K., Wei, Y., Wenisch, T., Kolli, A., and Khan, S. (2020). Cross-Failure Bug Detection in Persistent Memory Programs. In ASPLOS'20, ASPLOS '20, pages 1187-1202.
Marathe, V. J., Seltzer, M., Byan, S., and Harris, T. (2017). Persistent Memcached: Bringing Legacy Code to Byte-Addressable Persistent Memory. In USENIX HotStorage' 17.
Mohan, C., Haderle, D., Lindsay, B., Pirahesh, H., and Schwarz, P. (1992). ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging. ACM Trans. Database Syst., 17(1):94-162.
Palma, M., Francesquini, E., and Azevedo, R. (2016). Simulação de arquiteturas de hardware com memórias não-voláteis. In Anais do XVII Simpósio em Sistemas Computacionais de Alto Desempenho, pages 121-132.
Patil, O., Ionkov, L., Lee, J., Mueller, F., and Lang, M. (2019). Performance characterization of a DRAM-NVM hybrid memory architecture for HPC applications using intel pptane DC persistent memory modules. In ISMM'19, pages 288-303.
Ren, J., Hu, Q., Khan, S., and Moscibroda, T. (2017). Programming for Non-Volatile Main Memory Is Hard. In APSys'17, pages 1-8.
Ren, J., Zhao, J., Khan, S., Choi, J., Wu, Y., and Mutlu, O. (2015). ThyNVM: Enabling Software-Transparent Crash Consistency in Persistent Memory Systems. In MICRO'15, pages 672-685.
Scargall, S. (2020). Programming Persistent Memory A Comprehensive Guide for Developers. Apress, 1st edition.