This document discusses an agenda for an SPDK, PMDK & VtuneTM Summit covering topics such as hardware issues, error injection, software bugs, and conclusions. It provides background on programming challenges introduced by persistent memory including difficulty, new classes of bugs, and performance vectors to consider. Specific issues covered include data integrity with bad blocks, the pmempool tool, error injection using sysfs, persistent memory leaks, non-persistent stores, and tools like Pmemcheck and Intel Inspector for analysis.
Create C++ Applications with the Persistent Memory Development KitIntel® Software
Persistent memory retains data after a program crash or power failure. This demonstration shows how to make your application aware of persistent memory using the Persistent Memory Development Kit and includes a C++ code sample walk-through.
Persistent Memory Development Kit (PMDK): State of the ProjectIntel® Software
Get an introduction to a PMDK based on the Non-Volatile Memory (NVM) Programming Model from SNIA*. Review the goals, successes, and challenges that still remain.
Use cases like high-performance computing (HPC), AI, and IoTA can generate a huge volume of data. Learn how Intel® Optane™ DC persistent memory can be an alternative to DRAM for applications that benefit from a very large volatile memory capacity.
Big Data Uses with Distributed Asynchronous Object StorageIntel® Software
Learn about the architecture and features of Distributed Asynchronous Object Storage (DAOS). This open source object store is based on the Persistent Memory Development Kit (PMDK) for massively distributed non-volatile memory applications.
A Key-Value Store for Data Acquisition SystemsIntel® Software
Get an overview of the Data Acquisition Database design. It's based on the Persistent Memory Development Kit (PMDK) and Storage Performance Development Kit (SPDK) to leverage Intel® Optane™ DC persistent memory and non-volatile memory express (NVMe) drives.
Learn the ways to access persistent memory from Java*. Review how to use the Low-Level Persistence Library in the Persistent Memory Development Kit to retrofit the open source database Cassandra* for persistent memory.
Create C++ Applications with the Persistent Memory Development KitIntel® Software
Persistent memory retains data after a program crash or power failure. This demonstration shows how to make your application aware of persistent memory using the Persistent Memory Development Kit and includes a C++ code sample walk-through.
Persistent Memory Development Kit (PMDK): State of the ProjectIntel® Software
Get an introduction to a PMDK based on the Non-Volatile Memory (NVM) Programming Model from SNIA*. Review the goals, successes, and challenges that still remain.
Use cases like high-performance computing (HPC), AI, and IoTA can generate a huge volume of data. Learn how Intel® Optane™ DC persistent memory can be an alternative to DRAM for applications that benefit from a very large volatile memory capacity.
Big Data Uses with Distributed Asynchronous Object StorageIntel® Software
Learn about the architecture and features of Distributed Asynchronous Object Storage (DAOS). This open source object store is based on the Persistent Memory Development Kit (PMDK) for massively distributed non-volatile memory applications.
A Key-Value Store for Data Acquisition SystemsIntel® Software
Get an overview of the Data Acquisition Database design. It's based on the Persistent Memory Development Kit (PMDK) and Storage Performance Development Kit (SPDK) to leverage Intel® Optane™ DC persistent memory and non-volatile memory express (NVMe) drives.
Learn the ways to access persistent memory from Java*. Review how to use the Low-Level Persistence Library in the Persistent Memory Development Kit to retrofit the open source database Cassandra* for persistent memory.
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...Odinot Stanislas
Après la petite intro sur le stockage distribué et la description de Ceph, Jian Zhang réalise dans cette présentation quelques benchmarks intéressants : tests séquentiels, tests random et surtout comparaison des résultats avant et après optimisations. Les paramètres de configuration touchés et optimisations (Large page numbers, Omap data sur un disque séparé, ...) apportent au minimum 2x de perf en plus.
Ceph on Intel: Intel Storage Components, Benchmarks, and ContributionsColleen Corrice
At Red Hat Storage Day Minneapolis on 4/12/16, Intel's Dan Ferber presented on Intel storage components, benchmarks, and contributions as they relate to Ceph.
There are many ways to run high availability with PostgreSQL. Here, we present a template for you to create your own customized, high-availability solution using Python and for maximum accessibility, a distributed configuration store like ZooKeeper or etcd.
Revisiting CephFS MDS and mClock QoS SchedulerYongseok Oh
This presents the CephFS performance scalability and evaluation results. Specifically, it addresses some technical issues such as multi core scalability, cache size, static pinning, recovery, and QoS.
Ceph at Work in Bloomberg: Object Store, RBD and OpenStackRed_Hat_Storage
Bloomberg's Chris Jones and Chris Morgan joined Red Hat Storage Day New York on 1/19/16 to explain how Red Hat Ceph Storage helps the financial giant tackle its data storage challenges.
PostgreSQL is designed to be easily extensible. For this reason, extensions loaded into the database can function just like features that are built in. In this session, we will learn more about PostgreSQL extension framework, how are they built, look at some popular extensions, management of these extensions in your deployments.
Multi Source Replication With MySQL 5.7 @ VerisureKenny Gryp
Verisure, Europe's most popular home alarm with more than 1.8 million customers using the system every day, relies on MySQL for a lot of its customers' data.
Data is stored into a sharded database architecture using MySQL. Some of that data is is being replicated into a centralized data warehouse for business intelligence purposes.
For a long time, Tungsten Replicator has been used to fan-in the data into a single MySQL instance.
This worked well until Verisure expanded. The data growth has increased dramatically ever since, and the architecture began to be difficult to operate.
MySQL 5.7 comes with multi-source replication support out of the box, and as this can simplify the architecture a lot, Verisure became early adopters of MySQL 5.7.
This talk is about being an early MySQL 5.7 adopter. We'll talk about why we did it, how we put it into production, what problems we ran into and what successes we had with MySQL 5.7.
Ceph: Open Source Storage Software Optimizations on Intel® Architecture for C...Odinot Stanislas
Après la petite intro sur le stockage distribué et la description de Ceph, Jian Zhang réalise dans cette présentation quelques benchmarks intéressants : tests séquentiels, tests random et surtout comparaison des résultats avant et après optimisations. Les paramètres de configuration touchés et optimisations (Large page numbers, Omap data sur un disque séparé, ...) apportent au minimum 2x de perf en plus.
Ceph on Intel: Intel Storage Components, Benchmarks, and ContributionsColleen Corrice
At Red Hat Storage Day Minneapolis on 4/12/16, Intel's Dan Ferber presented on Intel storage components, benchmarks, and contributions as they relate to Ceph.
There are many ways to run high availability with PostgreSQL. Here, we present a template for you to create your own customized, high-availability solution using Python and for maximum accessibility, a distributed configuration store like ZooKeeper or etcd.
Revisiting CephFS MDS and mClock QoS SchedulerYongseok Oh
This presents the CephFS performance scalability and evaluation results. Specifically, it addresses some technical issues such as multi core scalability, cache size, static pinning, recovery, and QoS.
Ceph at Work in Bloomberg: Object Store, RBD and OpenStackRed_Hat_Storage
Bloomberg's Chris Jones and Chris Morgan joined Red Hat Storage Day New York on 1/19/16 to explain how Red Hat Ceph Storage helps the financial giant tackle its data storage challenges.
PostgreSQL is designed to be easily extensible. For this reason, extensions loaded into the database can function just like features that are built in. In this session, we will learn more about PostgreSQL extension framework, how are they built, look at some popular extensions, management of these extensions in your deployments.
Multi Source Replication With MySQL 5.7 @ VerisureKenny Gryp
Verisure, Europe's most popular home alarm with more than 1.8 million customers using the system every day, relies on MySQL for a lot of its customers' data.
Data is stored into a sharded database architecture using MySQL. Some of that data is is being replicated into a centralized data warehouse for business intelligence purposes.
For a long time, Tungsten Replicator has been used to fan-in the data into a single MySQL instance.
This worked well until Verisure expanded. The data growth has increased dramatically ever since, and the architecture began to be difficult to operate.
MySQL 5.7 comes with multi-source replication support out of the box, and as this can simplify the architecture a lot, Verisure became early adopters of MySQL 5.7.
This talk is about being an early MySQL 5.7 adopter. We'll talk about why we did it, how we put it into production, what problems we ran into and what successes we had with MySQL 5.7.
Vous avez récemment commencé à travailler sur Spark et vos jobs prennent une éternité pour se terminer ? Cette présentation est faite pour vous.
Himanshu Arora et Nitya Nand YADAV ont rassemblé de nombreuses bonnes pratiques, optimisations et ajustements qu'ils ont appliqué au fil des années en production pour rendre leurs jobs plus rapides et moins consommateurs de ressources.
Dans cette présentation, ils nous apprennent les techniques avancées d'optimisation de Spark, les formats de sérialisation des données, les formats de stockage, les optimisations hardware, contrôle sur la parallélisme, paramétrages de resource manager, meilleur data localité et l'optimisation du GC etc.
Ils nous font découvrir également l'utilisation appropriée de RDD, DataFrame et Dataset afin de bénéficier pleinement des optimisations internes apportées par Spark.
There are many common workloads in R that are "embarrassingly parallel": group-by analyses, simulations, and cross-validation of models are just a few examples. In this talk I'll describe several techniques available in R to speed up workloads like these, by running multiple iterations simultaneously, in parallel.
Many of these techniques require the use of a cluster of machines running R, and I'll provide examples of using cloud-based services to provision clusters for parallel computations. In particular, I will describe how you can use the SparklyR package to distribute data manipulations using the dplyr syntax, on a cluster of servers provisioned in the Azure cloud.
Presented by David Smith at Data Day Texas in Austin, January 27 2018.
Testing Persistent Storage Performance in Kubernetes with SherlockScyllaDB
Getting to understand your Kubernetes storage capabilities is important in order to run a proper cluster in production. In this session I will demonstrate how to use Sherlock, an open source platform written to test persistent NVMe/TCP storage in Kubernetes, either via synthetic workload or via variety of databases, all easily done and summarized to give you an estimate of what your IOPS, Latency and Throughput your storage can provide to the Kubernetes cluster.
PECL Picks - Extensions to make your life betterZendCon
One of the biggest strengths of PHP is its "glue" power. Take any C library and with a little magic and a compiler you have a fantastic extension. These extensions hide in PECL, but few people can tell the good from the unmaintained or just plain broken. Find the best extensions for your project, learn about PECL, and find out how to become a part of the PECL developer community.
Quick, what do memcache, MogileFS, and Gearman have in common? They are scalable, distributed technologies, and they can also interface with PHP, your ubiquitous web development language. Digg uses all 3 (and a few more) in its quest for social news domination, and this presentation shares what we’ve learned about them and how they are best utilized with PHP.
Caching and tuning fun for high scalability @ FOSDEM 2012Wim Godden
Caching has been a 'hot' topic for a few years. But caching takes more than merely taking data and putting it in a cache : the right caching techniques can improve performance and reduce load significantly. But we'll also look at some major pitfalls, showing that caching the wrong way can bring down your site. If you're looking for a clear explanation about various caching techniques and tools like Memcached, Nginx and Varnish, as well as ways to deploy them in an efficient way, this talk is for you.
Given at zendcon 2008 - my very first conference talk. And I did it way too fast. A lot of the information about these extensions is surprisingly relevant.
AI for All: Biology is eating the world & AI is eating Biology Intel® Software
Advances in cell biology and creation of an immense amount of data are converging with advances in Machine learning to analyze this data. Biology is experiencing its AI moment and driving the massive computation involved in understanding biological mechanisms and driving interventions. Learn about how cutting edge technologies such as Software Guard Extensions (SGX) in the latest Intel Xeon Processors and Open Federated Learning (OpenFL), an open framework for federated learning developed by Intel, are helping advance AI in gene therapy, drug design, disease identification and more.
Python Data Science and Machine Learning at Scale with Intel and AnacondaIntel® Software
Python is the number 1 language for data scientists, and Anaconda is the most popular python platform. Intel and Anaconda have partnered to bring scalability and near-native performance to Python with simple installations. Learn how data scientists can now access oneAPI-optimized Python packages such as NumPy, Scikit-Learn, Modin, Pandas, and XGBoost directly from the Anaconda repository through simple installation and minimal code changes.
Streamline End-to-End AI Pipelines with Intel, Databricks, and OmniSciIntel® Software
Preprocess, visualize, and Build AI Faster at-Scale on Intel Architecture. Develop end-to-end AI pipelines for inferencing including data ingestion, preprocessing, and model inferencing with tabular, NLP, RecSys, video and image using Intel oneAPI AI Analytics Toolkit and other optimized libraries. Build at-scale performant pipelines with Databricks and end-to-end Xeon optimizations. Learn how to visualize with the OmniSci Immerse Platform and experience a live demonstration of the Intel Distribution of Modin and OmniSci.
AI for good: Scaling AI in science, healthcare, and more.Intel® Software
How do we scale AI to its full potential to enrich the lives of everyone on earth? Learn about AI hardware and software acceleration and how Intel AI technologies are being used to solve critical problems in high energy physics, cancer research, financial inclusion, and more. Get started on your AI Developer Journey @ software.intel.com/ai
Software AI Accelerators: The Next Frontier | Software for AI Optimization Su...Intel® Software
Software AI Accelerators deliver orders of magnitude performance gain for AI across deep learning, classical machine learning, and graph analytics and are key to enabling AI Everywhere. Get started on your AI Developer Journey @ software.intel.com/ai.
Advanced Techniques to Accelerate Model Tuning | Software for AI Optimization...Intel® Software
Learn about the algorithms and associated implementations that power SigOpt, a platform for efficiently conducting model development and hyperparameter optimization. Get started on your AI Developer Journey @ software.intel.com/ai.
Reducing Deep Learning Integration Costs and Maximizing Compute Efficiency| S...Intel® Software
oneDNN Graph API extends oneDNN with a graph interface which reduces deep learning integration costs and maximizes compute efficiency across a variety of AI hardware including AI accelerators. Get started on your AI Developer Journey @ software.intel.com/ai.
AWS & Intel Webinar Series - Accelerating AI ResearchIntel® Software
Scale your research workloads faster with Intel on AWS. Learn how the performance and productivity of Intel Hardware and Software help bridge the gap between ideation and results in Data Science. Get started on your AI Developer Journey @ software.intel.com/ai.
Whether you are an AI, HPC, IoT, Graphics, Networking or Media developer, visit the Intel Developer Zone today to access the latest software products, resources, training, and support. Test-drive the latest Intel hardware and software products on DevCloud, our online development sandbox, and use DevMesh, our online collaboration portal, to meet and work with other innovators and product leaders. Get started by joining the Intel Developer Community @ software.intel.com.
Advanced Single Instruction Multiple Data (SIMD) Programming with Intel® Impl...Intel® Software
Explore practical elements, such as performance profiling, debugging, and porting advice. Get an overview of advanced programming topics, like common design patterns, SIMD lane interoperability, data conversions, and more.
Build a Deep Learning Video Analytics Framework | SIGGRAPH 2019 Technical Ses...Intel® Software
Explore how to build a unified framework based on FFmpeg and GStreamer to enable video analytics on all Intel® hardware, including CPUs, GPUs, VPUs, FPGAs, and in-circuit emulators.
Review state-of-the-art techniques that use neural networks to synthesize motion, such as mode-adaptive neural network and phase-functioned neural networks. See how next-generation CPUs with reinforcement learning can offer better performance.
RenderMan*: The Role of Open Shading Language (OSL) with Intel® Advanced Vect...Intel® Software
This talk focuses on the newest release in RenderMan* 22.5 and its adoption at Pixar Animation Studios* for rendering future movies. With native support for Intel® Advanced Vector Extensions, Intel® Advanced Vector Extensions 2, and Intel® Advanced Vector Extensions 512, it includes enhanced library features, debugging support, and an extensive test framework.
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...DanBrown980551
Do you want to learn how to model and simulate an electrical network from scratch in under an hour?
Then welcome to this PowSyBl workshop, hosted by Rte, the French Transmission System Operator (TSO)!
During the webinar, you will discover the PowSyBl ecosystem as well as handle and study an electrical network through an interactive Python notebook.
PowSyBl is an open source project hosted by LF Energy, which offers a comprehensive set of features for electrical grid modelling and simulation. Among other advanced features, PowSyBl provides:
- A fully editable and extendable library for grid component modelling;
- Visualization tools to display your network;
- Grid simulation tools, such as power flows, security analyses (with or without remedial actions) and sensitivity analyses;
The framework is mostly written in Java, with a Python binding so that Python developers can access PowSyBl functionalities as well.
What you will learn during the webinar:
- For beginners: discover PowSyBl's functionalities through a quick general presentation and the notebook, without needing any expert coding skills;
- For advanced developers: master the skills to efficiently apply PowSyBl functionalities to your real-world scenarios.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
The Art of the Pitch: WordPress Relationships and SalesLaura Byrne
Clients don’t know what they don’t know. What web solutions are right for them? How does WordPress come into the picture? How do you make sure you understand scope and timeline? What do you do if sometime changes?
All these questions and more will be explored as we talk about matching clients’ needs with what your agency offers without pulling teeth or pulling your hair out. Practical tips, and strategies for successful relationship building that leads to closing the deal.
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
DevOps and Testing slides at DASA ConnectKari Kakkonen
My and Rik Marselis slides at 30.5.2024 DASA Connect conference. We discuss about what is testing, then what is agile testing and finally what is Testing in DevOps. Finally we had lovely workshop with the participants trying to find out different ways to think about quality and testing in different parts of the DevOps infinity loop.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Let's dive deeper into the world of ODC! Ricardo Alves (OutSystems) will join us to tell all about the new Data Fabric. After that, Sezen de Bruijn (OutSystems) will get into the details on how to best design a sturdy architecture within ODC.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Search and Society: Reimagining Information Access for Radical FuturesBhaskar Mitra
The field of Information retrieval (IR) is currently undergoing a transformative shift, at least partly due to the emerging applications of generative AI to information access. In this talk, we will deliberate on the sociotechnical implications of generative AI for information access. We will argue that there is both a critical necessity and an exciting opportunity for the IR community to re-center our research agendas on societal needs while dismantling the artificial separation between the work on fairness, accountability, transparency, and ethics in IR and the rest of IR research. Instead of adopting a reactionary strategy of trying to mitigate potential social harms from emerging technologies, the community should aim to proactively set the research agenda for the kinds of systems we should build inspired by diverse explicitly stated sociotechnical imaginaries. The sociotechnical imaginaries that underpin the design and development of information access technologies needs to be explicitly articulated, and we need to develop theories of change in context of these diverse perspectives. Our guiding future imaginaries must be informed by other academic fields, such as democratic theory and critical theory, and should be co-developed with social science scholars, legal scholars, civil rights and social justice activists, and artists, among others.
4. SPDK, PMDK & Vtune™ Summit 4
…but also new challenges
• Programming difficulty
• New classes of bugs
• New vectors to consider for
performance
Introduction(CONT’D) DRAM
NVDIMM
Intel®Optane™ssd
Pciessd
Pciessd
SATASSD
SATASSD
HDD
HDD
tape
5. SPDK, PMDK & Vtune™ Summit 5
• Module failure
• HDDs and SSDs use RAID
• Memory controllers do not implement RAID
• Data integrity
• Block corruption (i.e., bad blocks)
HARDWAREISSUES
IMC
Cascade Lake
IMC
6. SPDK, PMDK & Vtune™ Summit 6
Dataintegrity
• What if we discover that our pool is corrupted due to bad blocks?
• Opening a corrupted pool
• Pool gets corrupted while program is running
$ ./myProgram /mnt/pmem/poolfile
/mnt/pmem/poolfile: Input/output error
Bus error (core dumped)
7. SPDK, PMDK & Vtune™ Summit 7
Dataintegrity
• What if we discover that our pool is corrupted due to bad blocks?
• Pmempool check will also fail
$ cp /mnt/pmem/poolfile ./
cp: error reading '/mnt/pmem/poolfile': Input/output error
# dd if=/dev/pmem0 of=/dev/null
dd: error reading /dev/pmem0: Input/output error
20480+0 records in
20480+0 records out
10485760 bytes (10 MB) copied, 0.0912348 s, 115 MB/s
$ pmempool check –v /mnt/pmem/poolfile
Bus error (core dumped)
8. SPDK, PMDK & Vtune™ Summit 8
Dataintegrity
• Cleaning the poison by writing to the affected blocks
# cat /sys/block/pmem0/badblocks
20480 1
# dd conv=notrunc if=/dev/zero of=/dev/pmem0 oflag=direct bs=512 seek=20480 count=1
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.000114311 s, 9.0 MB/s
# cat /sys/block/pmem0/badblocks
#
9. SPDK, PMDK & Vtune™ Summit 9
Tool-Pmempool
• Standalone utility for management and off-line analysis of persistent memory pools
• It works for both the single-file pools and for pool set files.
• Commands: create, info, dump, check, rm, convert, sync and transform
• usage: pmempool [--version] [--help] <command> [<args>]
10. SPDK, PMDK & Vtune™ Summit 10
Pmempool(check)
data
header
data
header
Applications are responsible for correcting these errors
We can use pmempool to check (and sometimes correct)
corruptions in the headers
$ pmempool check -v /mnt/pmem/poolfile
checking pool header
incorrect pool header
/mnt/mem/poolfile: not consistent
11. SPDK, PMDK & Vtune™ Summit 11
Pmempool(check)
$ pmempool check –v –r –N –a /mnt/pmem/poolfile
checking pool header
incorrect pool header
pool_hdr.signature is not valid. Do you want to set it to PMEMBLK? [Y/n] Y
pool_hdr.major is not valid. Do you want to set it to default value 0x1? [Y/n] Y
setting pool_hdr.signature to PMEMBLK
setting pool_hdr.major to 0x1
invalid pool_hdr.poolset_uuid. Do you want to set it to 2a3b402a-2be0-46f0-a86d-7afef54b258a from BTT Info? [Y/n] Y
setting pool_hdr.poolset_uuid to 2a3b402a-2be0-46f0-a86d-7afef54b258a
invalid pool_hdr.checksum. Do you want to regenerate checksum? [Y/n] Y
setting pool_hdr.checksum to 0xb199cec3475bbf3a
checking pmemblk header
pmemblk header correct
checking BTT Info headers
arena 0: BTT Info header checksum correct
checking BTT Map and Flog
arena 0: checking BTT Map and Flog
/mnt/pmem/poolfile: repaired
• Attempting repairs (-r [-N –a])
12. SPDK, PMDK & Vtune™ Summit
• In PMDK (tools and libraries), pool sets are equivalent to regular pools.
• Pool extensions
• Pool replication
• Local
• Remote
12
PMDKFEATURE-Poolsets
$ cat my_extended_pool.set
PMEMPOOLSET
100G /mountpoint0/myfile.part0
200G /mountpoint1/myfile.part1
400G /mountpoint2/myfile.part2
$ cat my_local_replica.set
PMEMPOOLSET
100G /mountpoint0/myfile
REPLICA
100G /mountpoint1/myreplica
$ cat my_remote_replica.set
PMEMPOOLSET
100G /mountpoint0/myfile
REPLICA user@example.com myremotepool.set
data0
header
data1
header
data2
header
data
header
data
header
+ +
=
data
header
data
header
=
13. SPDK, PMDK & Vtune™ Summit 13
Pmempool(sync)
$ pmempool check –v mypool.set
replica 0 part 0: checking pool header
replica 0 part 0: incorrect pool header
poolfile.set: not consistent
$ pmempool sync -v mypool.set
mypool.set: synchronized
$ pmempool check –v mypool.set
replica 0: checking shutdown state
replica 0: shutdown state correct
replica 1: checking shutdown state
replica 1: shutdown state correct
replica 0 part 0: checking pool header
replica 0 part 0: pool header correct
replica 1 part 0: checking pool header
replica 1 part 0: pool header correct
mypool.set: consistent
• Repairing a corrupted replica
15. SPDK, PMDK & Vtune™ Summit 15
Softwarebugs
• Persistent memory leaks
• Non-persistent stores
• Stores not added into a transaction
• Memory added to two different transactions
• Memory overwrites
• Unnecessary flushes
• Out-of-order stores
16. SPDK, PMDK & Vtune™ Summit 16
Persistentmemoryleaks
• Volatile programs treat leaks mainly as a
performance problem
• In persistent programs, we need to also think
about data corruption/loss
• The good: we can recover leaks
• The bad: Garbage collection is not supported
natively in PMKD yet
• The ugly: We need to use macros to access this
API
header
root
obj0 objn-1 objn
objk
17. SPDK, PMDK & Vtune™ Summit 17
Persistentmemoryleaks
persistent_ptr<my_type> my_data_structure = proot->ds;
PMEMoid raw_root = my_data_structure.raw ();
PMEMoid raw_obj;
POBJ_FOREACH (pop.get_handle (), raw_obj)
{
if (pmemobj_type_num (raw_obj)
== pmemobj_type_num (raw_root)) {
if (my_data_structure.is_missing (raw_obj) == true) {
my_data_structure.add_missing (raw_obj);
}
}
}
• All allocated objects in libpmemobj are always added to an internal list
18. SPDK, PMDK & Vtune™ Summit 18
Persistentmemoryleaks
• API (libpmemobj) for this internal list:
• POBJ_FIRST (pop, t)
• POBJ_NEXT (o)
• POBJ_FOREACH (pop, varoid)
• POBJ_FOREACH_SAFE (pop, varoid, nvaroid)
• POBJ_FOREACH_TYPE (pop, var)
• POBJ_FOREACH_SAFE_TYPE (pop, var, nvar)
19. SPDK, PMDK & Vtune™ Summit 19
Tool-Pmemcheck
• New Valgrind* tool developed by Intel®
• You also need an enhanced version of Valgrind* supporting CLFLUSHOPT and CLWB
• Go to https://github.com/pmem/valgrind
• usage: valgrind --tool=pmemcheck [<options>] <program> [<args>]
• More info: valgrind --tool=pmemcheck --help
20. SPDK, PMDK & Vtune™ Summit 20
Pmemcheck(withoutpmdk)
• Pmemcheck does not have a way to know which memory addresses are persistent and
which ones are volatile
• Pmemcheck does not know where a transaction starts and ends
data = (int *)mmap (NULL, size, PROT_READ|PROT_WRITE,
MAP_SHARED, fd, 0);
VALGRIND_PMC_REGISTER_PMEM_MAPPING (data, size);
...
munmap (data, size);
VALGRIND_PMC_REMOVE_PMEM_MAPPING (data, size);
VALGRIND_PMC_START_X;
...
VALGRIND_PMC_END_TX;
21. SPDK, PMDK & Vtune™ Summit 21
Tool-Intel®inspector–persistentinspector
• Specifically tailored for persistent memory
• Included as part of Intel® Inspector 2019
• Intel® Inspector is available with
Intel® Parallel Studio XE and Intel® System
Studio
• Analysis
1. pmeminsp cb –pmem-file <pmem_file_path> -- <writer_program> [<params>]
2. pmeminsp ca –pmem-file <pmem_file_path> -- <reader_program> [<params>]
3. pmeminsp rp -- <writer_program> <reader_program>
22. SPDK, PMDK & Vtune™ Summit 22
• Data written to persistent memory
but not flushed correctly
• Data not flushed may still sit on the
CPU caches and could be lost if
process crashes
Non-persistentstores
writer () {
var1 = "Hello world to PMEM!";
flush (var1);
var1_valid = True;
flush (var1_valid);
}
reader () {
if (var1_valid == True) {
print (var1);
}
}
23. SPDK, PMDK & Vtune™ Summit 23
• Data written to persistent memory
but not flushed correctly
• Data not flushed may still sit on the
CPU caches and could be lost if
process crashes
Non-persistentstores
writer () {
var1 = "Hello world to PMEM!";
flush (var1);
var1_valid = True;
flush (var1_valid);
}
reader () {
if (var1_valid == True) {
print (var1);
}
}
var1_valid
var1
write
dependency
24. SPDK, PMDK & Vtune™ Summit 24
Non-persistentstores
$ valgrind --tool=pmemcheck ./test1w_
==28699== pmemcheck-1.0, a simple persistent store checker
==28699== Copyright (c) 2014-2016, Intel Corporation
==28699== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==28699== Command: ./test1w_
==28699==
==28699==
==28699== Number of stores not made persistent: 2
==28699== Stores not made persistent properly:
==28699== [0] at 0x400931: main (test1w_.c:16)
==28699== Address: 0x4023000 size: 4state: DIRTY
==28699== [1] at 0x400927: main (test1w_.c:15)
==28699== Address: 0x4023004 size: 4state: DIRTY
==28699== Total memory not made persistent: 8
==28699== ERROR SUMMARY: 2 errors
• Pmemcheck
25. SPDK, PMDK & Vtune™ Summit 25
Non-persistentstores
$ pmeminsp rp -- listing_8-16 listing_8-17
#===============================================================================
# Diagnostic # 1: Missing cache flush
#-------------------
The first memory store
of size 4 at address 0x7F9C68893004 (offset 0x4 in /mnt/pmem/file)
in /data/listing_8-16!main at listing_8-16.c:13 - 0x67D
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
is not flushed before
the second memory store
of size 4 at address 0x7F9C68893000 (offset 0x0 in /mnt/pmem/file)
in /data/listing_8-16!main at listing_8-16.c:14 - 0x687
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
while
memory load from the location of the first store
in /data/listing_8-17!main at listing_8-17.c:13 - 0x6C8
depends on
memory load from the location of the second store
in /data/listing_8-17!main at listing_8-17.c:12 - 0x6BD
• Persistent Inspector
#===============================================================================
# Diagnostic # 2: Missing cache flush
#-------------------
Memory store
of size 4 at address 0x7F9C68893000 (offset 0x0 in /mnt/pmem/file)
in /data/listing_8-16!main at listing_8-16.c:14 - 0x687
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
is not flushed before
memory is unmapped
in /data/listing_8-16!main at listing_8-16.c:15 - 0x699
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
Analysis complete. 2 diagnostic(s) reported.
26. SPDK, PMDK & Vtune™ Summit 26
Non-persistentstores
$ pmeminsp rp -- listing_8-16 listing_8-17
#===============================================================================
# Diagnostic # 1: Missing cache flush
#-------------------
The first memory store
of size 4 at address 0x7F9C68893004 (offset 0x4 in /mnt/pmem/file)
in /data/listing_8-16!main at listing_8-16.c:13 - 0x67D
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
is not flushed before
the second memory store
of size 4 at address 0x7F9C68893000 (offset 0x0 in /mnt/pmem/file)
in /data/listing_8-16!main at listing_8-16.c:14 - 0x687
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
while
memory load from the location of the first store
in /data/listing_8-17!main at listing_8-17.c:13 - 0x6C8
depends on
memory load from the location of the second store
in /data/listing_8-17!main at listing_8-17.c:12 - 0x6BD
• Persistent Inspector
#===============================================================================
# Diagnostic # 2: Missing cache flush
#-------------------
Memory store
of size 4 at address 0x7F9C68893000 (offset 0x0 in /mnt/pmem/file)
in /data/listing_8-16!main at listing_8-16.c:14 - 0x687
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
is not flushed before
memory is unmapped
in /data/listing_8-16!main at listing_8-16.c:15 - 0x699
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-16!_start at <unknown_file>:<unknown_line> - 0x534
Analysis complete. 2 diagnostic(s) reported.
27. SPDK, PMDK & Vtune™ Summit 27
StoresnotaddedIntoatransaction
TX_BEGIN (pop) {
TOID (struct my_root) root = POBJ_ROOT (pop, struct my_root);
TX_ADD_FIELD (root, value);
D_RW (root)->value = 4;
D_RW (root)->is_odd = D_RO (root)->value % 2;
} TX_END
• It is assumed that all the modified PMEM locations have been added to it at
the beginning
• This allows the transaction to flush these locations at the end or roll back to
the old values in the event of an unexpected failure
28. SPDK, PMDK & Vtune™ Summit 28
StoresnotaddedIntoatransaction
$ valgrind --tool=pmemcheck ./listing_8-25
==48660== pmemcheck-1.0, a simple persistent store checker
==48660== Copyright (c) 2014-2016, Intel Corporation
==48660== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==48660== Command: ./listing_8-25
==48660==
==48660==
==48660== Number of stores not made persistent: 1
==48660== Stores not made persistent properly:
==48660== [0] at 0x400C2D: main (listing_8-25.c:18)
==48660== Address: 0x7dc0554 size: 4 state: DIRTY
==48660== Total memory not made persistent: 4
==48660==
==48660== Number of stores made without adding to transaction: 1
==48660== Stores made without adding to transactions:
==48660== [0] at 0x400C2D: main (listing_8-25.c:18)
==48660== Address: 0x7dc0554 size: 4
==48660== ERROR SUMMARY: 2 errors
$ pmeminsp cb -pmem-file /mnt/pmem/pool -- ./listing_8-25
++ Analysis starts
++ Analysis completes
++ Data is stored in folder "/data/.pmeminspdata/data/listing_8-25"
$
$ pmeminsp rp -- ./listing_8-25
#===============================================================================
# Diagnostic # 1: Store without undo log
#-------------------
Memory store
of size 4 at address 0x7FAA84DC0554 (offset 0x3C0554 in /mnt/pmem/pool)
in /data/listing_8-25!main at listing_8-25.c:18 - 0xC2D
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-25!_start at <unknown_file>:<unknown_line> - 0x954
is not undo logged in
transaction
in /data/listing_8-25!main at listing_8-25.c:14 - 0xB67
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /data/listing_8-25!_start at <unknown_file>:<unknown_line> - 0x954
Analysis complete. 1 diagnostic(s) reported.
• pmemcheck • Persistent Inspector
29. SPDK, PMDK & Vtune™ Summit 29
StoresAddedtotwodifferenttransactions
• Adding the same object to multiple
transactions can corrupt data
• In PMDK, the library maintains a
transaction per thread
30. SPDK, PMDK & Vtune™ Summit 30
Storesaddedtotwodifferenttransactions
$ valgrind --tool=pmemcheck ./test8b
==42444== pmemcheck-1.0, a simple persistent store checker
==42444== Copyright (c) 2014-2016, Intel Corporation
==42444== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==42444== Command: ./test8b
==42444==
==42444==
==42444== Number of stores not made persistent: 0
==42444==
==42444== Number of overlapping regions registered in different transactions: 1
==42444== Overlapping regions:
==42444== [0] at 0x4E6ADCC: pmemobj_tx_add_snapshot (tx.c:1080)
==42444== by 0x4E6B2FC: pmemobj_tx_add_common.constprop.18 (tx.c:1168)
==42444== by 0x4E6C38B: pmemobj_tx_add_range (tx.c:1352)
==42444== by 0x400C48: func (test8b.c:15)
==42444== by 0x4C2DDD4: start_thread (in /usr/lib64/libpthread-2.17.so)
==42444== by 0x517EEAC: clone (in /usr/lib64/libc-2.17.so)
==42444== Address: 0x7dc0550 size: 8 tx_id: 2
==42444== First registered here:
==42444== [0]' at 0x4E6ADCC: pmemobj_tx_add_snapshot (tx.c:1080)
==42444== by 0x4E6B2FC: pmemobj_tx_add_common.constprop.18 (tx.c:1168)
==42444== by 0x4E6C38B: pmemobj_tx_add_range (tx.c:1352)
==42444== by 0x400D81: main (test8b.c:26)
==42444== Address: 0x7dc0550 size: 8 tx_id: 1
==42444== ERROR SUMMARY: 1 errors
• pmemcheck • Persistent Inspector
$ pmeminsp cb -pmem-file /mnt/pmem/file -- ./test8b
...
$ pmeminsp ca -pmem-file /mnt/pmem/file -- ./test8b
...
$ pmeminsp rp -- ./test8b
#===============================================================================
# Diagnostic # 1: Overlapping regions registered in different transactions
#-------------------
transaction
in /mnt/hgfs/workbench/pmemcheck-test/test8/test8b!main at test8b.c:24 - 0xD1E
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test8/test8b!_start at
<unknown_file>:<unknown_line> - 0x9F4
protects
memory region
in /mnt/hgfs/workbench/pmemcheck-test/test8/test8b!main at test8b.c:26 - 0xD7D
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test8/test8b!_start at
<unknown_file>:<unknown_line> - 0x9F4
overlaps with
memory region
in /mnt/hgfs/workbench/pmemcheck-test/test8/test8b!func at test8b.c:15 - 0xC44
in /lib64/libpthread.so.0!start_thread at <unknown_file>:<unknown_line> - 0x7DCD
in /lib64/libc.so.6!__clone at <unknown_file>:<unknown_line> - 0xFDEAB
Analysis complete. 1 diagnostic(s) reported.
31. SPDK, PMDK & Vtune™ Summit 31
Memoryoverwrites
• This refers to the case where multiple modifications to the same persistent
memory location occur before the location is made persistent
• This issue is mostly related to performance, although it can uncover lack of
flushing too.
• In general, it is always better to use volatile memory for short-lived data
...
persistent_data = 10;
persistent_data *= 2;
flush (&persistent_data);
...
32. SPDK, PMDK & Vtune™ Summit 32
Memoryoverwrites
$ valgrind --tool=pmemcheck --mult-stores=yes ./test2w_
==121362== pmemcheck-1.0, a simple persistent store checker
==121362== Copyright (c) 2014-2016, Intel Corporation
==121362== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==121362== Command: ./test2w_
==121362==
==121362==
==121362== Number of stores not made persistent: 0
==121362==
==121362== Number of overwritten stores: 1
==121362== Overwritten stores before they were made persistent:
==121362== [0] at 0x40097C: main (test2w_.c:23)
==121362== Address: 0x4023004 size: 4 state: DIRTY
==121362== ERROR SUMMARY: 1 errors
• pmemcheck • Persistent Inspector
33. SPDK, PMDK & Vtune™ Summit 33
Unnecessaryflushes
• Flushing should be done carefully
• Detecting unnecessary flushes (such as redundant ones) can help in
improving code performance
...
persistent_data = computation ();
flush (&persistent_data);
flush (&persistent_data);
...
34. SPDK, PMDK & Vtune™ Summit 34
Unnecessaryflushes
$ valgrind --tool=pmemcheck --flush-check=yes ./test3b
==54720== pmemcheck-1.0, a simple persistent store checker
==54720== Copyright (c) 2014-2016, Intel Corporation
==54720== Using Valgrind-3.14.0 and LibVEX; rerun with -h for copyright info
==54720== Command: ./test3b
==54720==
==54720==
==54720== Number of stores not made persistent: 0
==54720==
==54720== Number of unnecessary flushes: 1
==54720== [0] at 0x400868: flush (emmintrin.h:1459)
==54720== by 0x400989: main (test3b.c:22)
==54720== Address: 0x4023000 size: 64
==54720== ERROR SUMMARY: 1 errors
$ pmeminsp rp -- ./test3w_ ./test3r_
#===============================================================================
# Diagnostic # 1: Redundant cache flush
#-------------------
Cache flush
of size 64 at address 0x7F10DD6D6000 (offset 0x0 in /mnt/pmem/file)
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!flush at test3w_.c:11 - 0x674
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!main at test3w_.c:24 - 0x73F
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!_start at
<unknown_file>:<unknown_line> - 0x574
is redundant with regard to
cache flush
of size 64 at address 0x7F10DD6D6000 (offset 0x0 in /mnt/pmem/file)
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!flush at test3w_.c:11 - 0x674
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!main at test3w_.c:25 - 0x750
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!_start at
<unknown_file>:<unknown_line> - 0x574
of
memory store
of size 4 at address 0x7F10DD6D6000 (offset 0x0 in /mnt/pmem/file)
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!main at test3w_.c:23 - 0x72D
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test3/test3w_!_start at
<unknown_file>:<unknown_line> - 0x574
• pmemcheck • Persistent Inspector
35. SPDK, PMDK & Vtune™ Summit 35
• Data written to persistent memory
but not flushed explicitly can still be
flushed out by the CPU
• Bugs can arise when data is not
written to persistent media in the
order expected
Out-of-orderanalysis writer () {
pcounter = 0;
for (i=0; i<max; i++) {
pcounter++;
if (rand() % 2 == 0) {
pcells[i].data = data();
flush (pcells[i].data);
pcells[i].valid = True;
} else {
pcells[i].valid = False;
}
flush (pcells[i].valid);
}
flush (pcounter);
}
reader () {
for (i=0; i<pcounter; i++) {
if (pcells[i].valid == True) {
print (pcells[i].data);
}
}
}
36. SPDK, PMDK & Vtune™ Summit 36
Out-of-orderanalysis
$ pmeminsp rp -check-out-of-order-store -- ./test9w_ ./test9r_
#===============================================================================
# Diagnostic # 1: Out-of-order stores
#-------------------
Memory store
of size 4 at address 0x7F6979541000 (offset 0x0 in /mnt/pmem/file)
in /mnt/hgfs/workbench/pmemcheck-test/test9/test9w_!main at test9w_.c:30 - 0x72C
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test9/test9w_!_start at
<unknown_file>:<unknown_line> - 0x5C4
is out of order with respect to
memory store
of size 1 at address 0x7F697954107F (offset 0x7F in /mnt/pmem/file)
in /mnt/hgfs/workbench/pmemcheck-test/test9/test9w_!main at test9w_.c:36 - 0x7AE
in /lib64/libc.so.6!__libc_start_main at <unknown_file>:<unknown_line> - 0x223D3
in /mnt/hgfs/workbench/pmemcheck-test/test9/test9w_!_start at
<unknown_file>:<unknown_line> - 0x5C4
• Persistent Inspector
37. SPDK, PMDK & Vtune™ Summit 37
Out-of-orderanalysis
$ valgrind --tool=pmemcheck -q --log-stores=yes --log-stores-stacktraces=yes --log-stores-stacktraces-depth=2 --print-summary=yes
--log-file=store_log.log ./program
$
$
$ pmreorder -l store_log.log -o output_file.log -x pmem_memset_persist=NoReorderNoCheck -r ReorderFull -c prog -p ./program_checker
$
$ cat output_file.log
WARNING:pmreorder:File /mnt/pmem/file inconsistent
WARNING:pmreorder:Call trace:
Store [0]:
by 0x401D0C: main (test9bw_.cpp:55)
• pmemcheck + pmreorder
You need a checker returning 0 if data
is consistent, or 1 otherwise
Assign an engine type to specific marker
(set by macros)
Engines: NoReorderNoCheck, NoReorderDoCheck, ReorderFull,
ReorderPartial, ReorderAccumulative, ReorderReverseAccumulative