OpenSolaris

  subsites   code review   repo   packages   bugs   defect   polls   planet
You are not signed in. Sign in or register.

The Packet Event Framework is available in this page...

Licensing

The files on this page are covered by either the OpenSolaris Binary License (OBL) or the Common Development and Distribution License (CDDL) Version 1.0. The specific license for the file will be listed in the column labeled "License" in the table below.

The pre-built BFU archives contain binaries/source for high key-strength crypto, known as the Encryption Kit (SUNWcry, SUNWcryr). Please note that certain countries restrict the redistribution of high key-strength crypto. If you live in one of these countries, it is your responsibility to ensure that you are complying with your country's laws in this area.

NOTICE PURSUANT TO SECTION 9 OF THE COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL)

The OpenSolaris code released under the CDDL shall be governed by the laws of the State of California (excluding conflict-of-law provisions). Any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California and the state courts of the State of California, with venue lying in Santa Clara County, California.

Archives

FileDescriptionLicense
SPARCBuild 48, SPARCOBL
i386/AMD64Build 48, i386/AMD64OBL
Source codesPEF build 48 source codesCDDL
Source code patchPEF patch against build 48CDDL

Getting the Source

You can obtain the complete source code of PEF Phase-I from the following Mercurial repository:

    ssh://anon at hg dot opensolaris dot org/hg/pef/phase_I

Please refer to Mercurial guide if you are not familiar with it. Also you can browse our source codes through source browser, and download our webrev to see what has been changed.

Installation Instructions

Please follow the standard bfu procedure to install the above BFU archives on a Solaris machine. Also, because most of the PEF modifications, except some mdb(1) dcmd, reside in the kernel space, so a Cap-Eye install also works.

How to Play with PEF

Usually we use micro-benchmarks like Iperf, netperf and Ping-Pong to evaluate the performance. To run the benchmarks, an experimental socket option is required to activate PEF on a TCP socket. So insert the following codes into your program right after the listener socket is created, and make sure the codes are compiled to 64bit. If you don't see the error message, that means a PEF enabled socket is ready to run.

        void *connp = (void *)1;
        int len = sizeof(connp);
        int rc = setsockopt(sock, IPPROTO_IP, 0xEF,
                            &connp, sizeof(connp));
        if (rc == SOCKET_ERROR) {
                 perror("setsockopt PEF ON/OFF");
        }

Then you can check the kstat numbers after running the benchmark for a while, here's a typical output of kstat(1M), it will show you some statistics about PEF code path. So if you see the kstat value changes as you run the benchmark, congratulations, PEF is working!

Also please note the kstat listed bellow can be changed or gone in the future release of PEF, they are not stable yet.

# kstat | grep pef
        ip_pef_classified               1496465
        ip_tcp_in_pef_fallback1         0
        ip_tcp_in_pef_fallback2         0
        ip_tcp_in_pef_fallback3         0
        ip_tcp_in_pef_fallback4         0
module: pef                             instance: 0     
name:   pefstat                         class:    net
        pef_RECL_drop                   0
        pef_alloc_cache                 1496463
        pef_alloc_kmem                  2
        pef_alloc_race                  0
        pef_class_tooshort              0
        pef_executed                    1496465
        pef_fallback                    0
        pef_freed_cache                 1824214
        pef_freed_kmem                  0
        pef_lenshort                    0
        pef_mblk_lenlong                0
        pef_mblk_lentrunc               337705
        pef_mblk_multi                  0
        pef_mblk_multi_aligned          0
        pef_mblk_multi_notaligned       0
        pef_noclass                     7
        pef_notM_DATA                   0
        pef_notPEF                      113
        pef_notsupported                1708
        pef_pullupfailed                0
        pef_reclass                     0
        tcp_pef_fast                    1496461
        tcp_pef_push_defer              754597
        tcp_pef_push_multiple           192374
        tcp_pef_push_single             242109
        tcp_pef_rcv_push                0
        tcp_pef_slow                    3
        tcp_pef_slow_DETACHED           0
        tcp_pef_slow_DUPACK             0
        tcp_pef_slow_ECE                0
        tcp_pef_slow_ECN                0
        tcp_pef_slow_NORWND             0
        tcp_pef_slow_NOTACKPSH          0
        tcp_pef_slow_NOTEST             3
        tcp_pef_slow_NOTRNXT            0
        tcp_pef_slow_OLDACK             0
        tcp_pef_slow_REASS              0
name:   pef_kmc_edescv                  class:    kmem_cache
name:   pef_kmc_pkt                     class:    kmem_cache

If you have further questions, please feel free to drop a note at pef-discuss At opensolaris Dot org.