PM.NET: Uma biblioteca de desenvolvimento para memória persistente com C#
Resumo
Este artigo apresenta a PM.NET, uma biblioteca em C# para desenvolvimento de aplicações que utilizam memória persistente. A biblioteca PM.NET oferece uma interface simples e orientada a objetos para o desenvolvimento em memória persistente, com gerenciamento automático da memória persistente (incluindo coleta de lixo). Uma vez identificados os objetos raiz a serem persistidos, a PM.NET transforma automaticamente todos os objetos relevantes em objetos persistentes. Adicionalmente, o PM.NET proporciona uma forma de envolver objetos voláteis em objetos persistentes com proxies, minimizando as alterações de código necessárias para o uso da memória persistente com desempenho comparável a banco de dados relacionais.
Referências
Bastelli, L., Baldassin, A., and Francesquini, E. (2022). Programando para memória persistente: Dificuldades, armadilhas e desempenho. In Anais do XXIII Simpósio em Sistemas Computacionais de Alto Desempenho, pages 133–144, Porto Alegre, RS, Brasil. SBC.
Burks, A. W., Goldstine, H. H., and Neumann, J. v. (1982). Preliminary discussion of the logical design of an electronic computing instrument. In The Origins of Digital Computers, pages 399–413. Springer.
Castle contributors (2022). Dynamicproxy. [link]. [Online; acessado em 21-Jul-2022].
Coburn, J., Caulfield, A. M., Akel, A., Grupp, L. M., Gupta, R. K., Jhala, R., and Swanson, S. (2011). Nv-heaps: Making persistent objects fast and safe with next-generation, non-volatile memories. ACM SIGARCH Computer Architecture News, 39(1):105–118.
Elrad, T., Filman, R. E., and Bader, A. (2001). Aspect-oriented programming: Introduction. Communications of the ACM, 44(10):29–32.
GAMMA, E., Helm, R., Johnson, R., and Vlissides, J. (2004). Padrões de projeto–soluções reutilizáveis de software orientado a objetos, 2004, ed.
Han, S.-T., Zhou, Y., and Roy, V. (2013). Towards the development of flexible non-volatile memories. Advanced Materials, 25(38):5425–5449.
Hennessy, J. L. and Patterson, D. A. (2014). Organização e Projeto de Computadores: a interface hardware/software, volume 4. Elsevier Brasil.
Hoseinzadeh, M. and Swanson, S. (2021). Corundum: Statically-enforced persistent memory safety. In Proceedings of the 26th ACM International Conference on Architectural Support for Programming Languages and Operating Systems, pages 429–442.
Jung, M. (2022). Hello bytes, bye blocks: Pcie storage meets compute express link for memory expansion (cxl-ssd). In Proceedings of the 14th ACM Workshop on Hot Topics in Storage and File Systems, pages 45–51.
Krauter, N., Raaf, P., Braam, P., Salkhordeh, R., Erdweg, S., and Brinkmann, A. (2021). Persistent software transactional memory in haskell. Proc. ACM Program. Lang., 5(ICFP):1–29.
llpl contributors (2022). Low-level persistence library. [link]. [Online; accessed 22-Jun-2022].
Marlow, S. et al. (2010). Haskell 2010 language report. Available online [link] (May 2011).
Tyson, M. (2019). Intel Optane DC Persistent Memory launched. Retrieved from [link]. [Online; acessado em 01-Ago-2023].
Volos, H., Tack, A. J., and Swift, M. M. (2011). Mnemosyne: Lightweight persistent memory. ACM SIGARCH Computer Architecture News, 39(1):91–104.