GithubHelp home page GithubHelp logo

sihangliu / pmtest Goto Github PK

View Code? Open in Web Editor NEW
26.0 4.0 8.0 2.55 MB

C++ 6.52% Makefile 6.86% C 56.97% Shell 20.06% Roff 3.66% PHP 0.08% Python 0.01% Objective-C 0.25% Perl 2.86% M4 0.66% XSLT 0.01% PowerShell 2.08% GDB 0.01%

pmtest's Issues

Does insertion of `PMTest_*` instrumentation need to be done manually? (and other questions on usage)

Hello developers,

I was wondering whether or not the instrumentation PMTest_* function (i.e. PMTest_assign, PMTest_flush, PMTest_fence), must be placed manually, or if there is some kind of compiler plugin that I'm missing. Assume I am not using any transactions and am doing it the old-fashioned manually clflush; sfence (or clwb/clflushopt) approach to persistence. I was looking to modify this...

https://github.com/pmem/pmdk/blob/0206f00217755e9b638fae01188e0408fb1e31e6/src/examples/pmreorder/pmreorder_list.c#L140-L153

Since new->next and new->value are meant to persist before the write to root->head, but this example deliberately violates this by persisting root->head before new->value. How would I catch this in PMTest? I got...

void list_insert_inconsistent(struct list_root *root, node_id node, int value)
{
        struct list_node *new = NODE_PTR(root, node);
        PMTest_isPersistedBefore(&new->value, sizeof(new->value),  &root->head, sizeof(root->head));
        PMTest_isPersistedBefore(&new->next, sizeof(new->next), &root->head, sizeof(root->head));

        new->next = root->head;
        PMTest_assign(&new->next, sizeof(new->next));
        PMTest_flush(&new->next, sizeof(new->next));
        PMTest_fence();

        root->head = node;
        PMTest_assign(&root->head, sizeof(root->head));
        PMTest_flush(&root->head, sizeof(root->head));
        PMTest_fence();

        new->value = value;
        PMTest_assign(&new->value, sizeof(new->value));
        PMTest_flush(&new->value, sizeof(new->value));
        PMTest_fence();
}

I'm wondering if PMTest_assign -> PMTest_flush -> PMTest_fence can be kind of automated based on the instructions themselves, like PMDK's pmemcheck does. Is this possible, or do I have to manually instrument everything? Also am I correct in my translation to using PMTest?

Finally, let's say that I do not wish to sendTrace yet... for example, let's say that I have a non-blocking persistent data structure (so transactions are out of the question) that lazily persists certain fields; how does PMTest handle this? As well, during atomic operations, such as compare-and-swap, how should I go about instrumenting that?

Thanks in advance!

make release error

Hi, sihang
Error occurred when executing make.
/usr/bin/ld: build/objects/pmtest.o: undefined reference to symbol '__tls_get_addr@@GLIBC_2.3'
//usr/lib64/ld-linux-x86-64.so.2: error adding symbols: DSO missing from command line

CentOS Linux release 7.6.1810 (Core)
glibc-2.17-260.el7_6.3.x86_64
gcc/g++ version : 4.8.5

Concurrent-Safety of PMTest?

Hello,

I'm wondering whether or not PMTest's transactions are concurrent-safe. As in, does it require external synchronization to access persistent memory? Is it possible to implement persistent non-blocking concurrent algorithms using these transactions?

Code Examples

Hello,

Are there code examples available? Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.