On 03/20/2014 12:32 PM, Monty Taylor wrote:
On 03/20/2014 05:31 AM, Miguel Angel Ajo wrote:


On 03/19/2014 10:54 PM, Joe Gordon wrote:



On Wed, Mar 19, 2014 at 9:25 AM, Miguel Angel Ajo <majop...@redhat.com
<mailto:majop...@redhat.com>> wrote:



    An advance on the changes that it's requiring to have a
    py->c++ compiled rootwrap as a mitigation POC for havana/icehouse.


https://github.com/mangelajo/__shedskin.rootwrap/commit/__e4167a6491dfbc71e2d0f6e28ba93b__c8a1dd66c0



<https://github.com/mangelajo/shedskin.rootwrap/commit/e4167a6491dfbc71e2d0f6e28ba93bc8a1dd66c0>



    The current translation output is included.

Updated changes:
https://github.com/mangelajo/shedskin.rootwrap/commit/f4bd8d6efac9d3a972e686b42a47996f32ce0464

Some results of the compiled version (it's a different machine, so note the rootwrap runtime difference).

# time neutron-rootwrap /etc/neutron/rootwrap.conf
/usr/bin/neutron-rootwrap: No command specified

real    0m0.133s
user    0m0.106s
sys     0m0.023s

[root@rdo-storm rootwrap]# time ./cmd /etc/neutron/rootwrap.conf
./cmd: No command specified

real    0m0.003s
user    0m0.003s
sys     0m0.001s


[root@rdo-storm rootwrap]# time ./cmd /etc/neutron/rootwrap.conf ip netns exec bench_ns ip a
37: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

real    0m0.025s
user    0m0.003s
sys     0m0.011s
[root@rdo-storm rootwrap]# time neutron-rootwrap /etc/neutron/rootwrap.conf ip netns exec bench_ns ip a
37: lo: <LOOPBACK> mtu 16436 qdisc noop state DOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00

real    0m0.164s
user    0m0.124s
sys     0m0.029s




The C++ code it's generating is inefficient and subject to some issues.
I'd be a bit concerned about it and would want to make some fixes.

Well, the inefficiencies should not be a problem for us, as long as the
final solution performs as we need.


Also - I'm sure you know this, but it's labeled as experimental. As
something that is going to run as root, I'd want to actually audit all
of the code it does. WHICH MEANS - we'd be auditing/examining C++ code.

Sure, I didn't miss that, and I think the same way you do. At this
moment, what I'm trying is a proof of concept, something we can
play around and do real measurements, look how does the code looks like,
if it can be audited or not, etc..

If we're going to do that, I'd rather just convert it to C++ by hand,
audit that, and deal with it. Either way, we'll need a substantial
amount of infra support - such as multi-platform compilation testing,
valgrind, etc.

Not a blocker - but things to think about. If you're really serious
about bringing C++ into the mix - let's just do it.

As I think, it's a solution aiming to the short-term, but IMHO, with
the speed Yuriy is working on the daemon, may be it's solution can make
it for  Icehouse without being very code-intrussive.

(ps. if we're going to do that, we could also just write a sudo plugin)

Yes, but sudo plugin / sudo rules, comes back with the maintenance problem we already had with sudo rules.

Ideally, if we needed to write/translate in C/C++, I'd go for something
rootwrap compatible, so, innovation could be kept on the rootwrap-python
side, and translated later.


    It looks like doable (almost killed 80% of the translation
problems),
    but there are two big stones:

    1) As Joe said, no support for Subprocess (we're interested in
popen),
        I'm using a dummy os.system() for the test.

    2) No logging support.

        I'm not sure on how complicated could be getting those modules
    implemented for shedkin.


Before sorting out of we can get those working under shedskin, any
preliminary performance numbers from neutron when using this?


Sure, totally agree.

I'm trying to put up a conversion without 1 & 2, to run a benchmark on
it, and then I'll post the results.

I suppose, we couldn't use it in neutron itself without Popen support
(not sure) but at least I could get an estimate out of the previous
numbers and the new ones.

Best,
Miguel Ángel.


    On 03/18/2014 09:14 AM, Miguel Angel Ajo wrote:

        Hi Joe, thank you very much for the positive feedback,

             I plan to spend a day during this week on the
        shedskin-compatibility
        for rootwrap (I'll branch it, and tune/cut down as necessary) to
        make
        it compile under shedskin [1] : nothing done yet.

             It's a short-term alternative until we can have a rootwrap
        agent,
        together with it's integration in neutron (for Juno). As, for
the
        compiled rootwrap, if it works, and if it does look good
        (security wise)
        then we'd have a solution for Icehouse/Havana.

        help in [1] is really  welcome ;-) I'm available in
        #openstack-neutron
        as 'ajo'.

             Best regards,
        Miguel Ángel.

        [1] https://github.com/mangelajo/__shedskin.rootwrap
        <https://github.com/mangelajo/shedskin.rootwrap>

        On 03/18/2014 12:48 AM, Joe Gordon wrote:




            On Tue, Mar 11, 2014 at 1:46 AM, Miguel Angel Ajo Pelayo
            <mangel...@redhat.com <mailto:mangel...@redhat.com>
            <mailto:mangel...@redhat.com <mailto:mangel...@redhat.com>>>
            wrote:


                 I have included on the etherpad, the option to write
a sudo
                 plugin (or several), specific for openstack.


                 And this is a test with shedskin, I suppose that in
            more complicated
                 dependecy scenarios it should perform better.

                 [majopela@redcylon tmp]$ cat <<EOF >test.py
                  > import sys
                  > print "hello world"
                  > sys.exit(0)
                  > EOF

                 [majopela@redcylon tmp]$ time python test.py
                 hello world

                 real    0m0.016s
                 user    0m0.015s
                 sys     0m0.001s



            This looks very promising!

            A few gotchas:

            * Very limited library support

https://code.google.com/p/__shedskin/wiki/docs#Library___Limitations

<https://code.google.com/p/shedskin/wiki/docs#Library_Limitations>
                * no logging
                * no six
                * no subprocess

            * no *args support
                *

https://code.google.com/p/__shedskin/wiki/docs#Python___Subset_Restrictions



<https://code.google.com/p/shedskin/wiki/docs#Python_Subset_Restrictions>


            that being said I did a quick comparison with great results:

            $ cat tmp.sh
            #!/usr/bin/env bash
            echo $0 $@
            ip a

            $ time ./tmp.sh  foo bar> /dev/null

            real    0m0.009s
            user    0m0.003s
            sys     0m0.006s



            $ cat tmp.py
            #!/usr/bin/env python
            import os
            import sys

            print sys.argv
            print os.system("ip a")

            $ time ./tmp.py  foo bar > /dev/null

            min:
            real    0m0.016s
            user    0m0.004s
            sys     0m0.012s

            max:
            real    0m0.038s
            user    0m0.016s
            sys     0m0.020s



            shedskin  tmp.py && make


            $ time ./tmp  foo bar > /dev/null

            real    0m0.010s
            user    0m0.007s
            sys     0m0.002s



            Based in these results I think a deeper dive into making
            rootwrap
            supportshedskin is worthwhile.





                 [majopela@redcylon tmp]$ shedskin test.py
                 *** SHED SKIN Python-to-C++ Compiler 0.9.4 ***
                 Copyright 2005-2011 Mark Dufour; License GNU GPL
            version 3 (See
            LICENSE)

                 [analyzing types..]
                 ******************************__**100%
                 [generating c++ code..]
                 [elapsed time: 1.59 seconds]
                 [majopela@redcylon tmp]$ make
                 g++  -O2 -march=native -Wno-deprecated  -I.
                 -I/usr/lib/python2.7/site-__packages/shedskin/lib
            /tmp/test.cpp
                 /usr/lib/python2.7/site-__packages/shedskin/lib/sys.cpp
                 /usr/lib/python2.7/site-__packages/shedskin/lib/re.cpp


/usr/lib/python2.7/site-__packages/shedskin/lib/builtin.__cpp -lgc
                 -lpcre  -o test
                 [majopela@redcylon tmp]$ time ./test
                 hello world

                 real    0m0.003s
                 user    0m0.000s
                 sys     0m0.002s


                 ----- Original Message -----
                  > We had this same issue with the dhcp-agent. Code was
            added that
                 paralleled
                  > the initial sync here:
            https://review.openstack.org/#__/c/28914/
            <https://review.openstack.org/#/c/28914/>
                 that made
                  > things a good bit faster if I remember correctly.
            Might be worth
                 doing
                  > something similar for the l3-agent.
                  >
                  > Best,
                  >
                  > Aaron
                  >
                  >
                  > On Mon, Mar 10, 2014 at 5:07 PM, Joe Gordon <
            joe.gord...@gmail.com <mailto:joe.gord...@gmail.com>
            <mailto:joe.gord...@gmail.com
            <mailto:joe.gord...@gmail.com>> > wrote:
                  >
                  >
                  >
                  >
                  >
                  >
                  > On Mon, Mar 10, 2014 at 3:57 PM, Joe Gordon <
            joe.gord...@gmail.com <mailto:joe.gord...@gmail.com>
            <mailto:joe.gord...@gmail.com
            <mailto:joe.gord...@gmail.com>> > wrote:
                  >
                  >
                  >
                  > I looked into the python to C options and haven't
            found anything
                 promising
                  > yet.
                  >
                  >
                  > I tried Cython, and RPython, on a trivial hello
            world app, but
                 git similar
                  > startup times to standard python.
                  >
                  > The one thing that did work was adding a '-S' when
            starting
            python.
                  >
                  > -S Disable the import of the module site and the
            site-dependent
                 manipulations
                  > of sys.path that it entails.
                  >
                  > Using 'python -S' didn't appear to help in devstack
                  >
                  > #!/usr/bin/python -S
                  > # PBR Generated from u'console_scripts'
                  >
                  > import sys
                  > import site
                  >
            site.addsitedir('/mnt/stack/__oslo.rootwrap/oslo/rootwrap')
                  >
                  >
                  >
                  >
                  >
                  >
                  > I am not sure if we can do that for rootwrap.
                  >
                  >
                  > jogo@dev:~/tmp/pypy-2.2.1-src$ time ./tmp-c
                  > hello world
                  >
                  > real 0m0.021s
                  > user 0m0.000s
                  > sys 0m0.020s
                  > jogo@dev:~/tmp/pypy-2.2.1-src$ time ./tmp-c
                  > hello world
                  >
                  > real 0m0.021s
                  > user 0m0.000s
                  > sys 0m0.020s
                  > jogo@dev:~/tmp/pypy-2.2.1-src$ time python -S
./tmp.py
                  > hello world
                  >
                  > real 0m0.010s
                  > user 0m0.000s
                  > sys 0m0.008s
                  >
                  > jogo@dev:~/tmp/pypy-2.2.1-src$ time python -S
./tmp.py
                  > hello world
                  >
                  > real 0m0.010s
                  > user 0m0.000s
                  > sys 0m0.008s
                  >
                  >
                  >
                  > On Mon, Mar 10, 2014 at 3:26 PM, Miguel Angel Ajo
            Pelayo <
                  > mangel...@redhat.com <mailto:mangel...@redhat.com>
            <mailto:mangel...@redhat.com <mailto:mangel...@redhat.com>>
             > wrote:
                  >
                  >
                  > Hi Carl, thank you, good idea.
                  >
                  > I started reviewing it, but I will do it more
            carefully tomorrow
                 morning.
                  >
                  >
                  >
                  > ----- Original Message -----
                  > > All,
                  > >
                  > > I was writing down a summary of all of this and
            decided to just
                 do it
                  > > on an etherpad. Will you help me capture the big
            picture
            there? I'd
                  > > like to come up with some actions this week to try
            to address
                 at least
                  > > part of the problem before Icehouse releases.
                  > >
                  > >

https://etherpad.openstack.__org/p/neutron-agent-exec-__performance

<https://etherpad.openstack.org/p/neutron-agent-exec-performance>
                  > >
                  > > Carl
                  > >
                  > > On Mon, Mar 10, 2014 at 5:26 AM, Miguel Angel
Ajo <
            majop...@redhat.com <mailto:majop...@redhat.com>
            <mailto:majop...@redhat.com <mailto:majop...@redhat.com>> >
                  > > wrote:
                  > > > Hi Yuri & Stephen, thanks a lot for the
            clarification.
                  > > >
                  > > > I'm not familiar with unix domain sockets at low
            level, but ,
                 I wonder
                  > > > if authentication could be achieved just with
            permissions
                 (only users in
                  > > > group "neutron" or group "rootwrap" accessing
            this service.
                  > > >
                  > > > I find it an interesting alternative, to the
            other proposed
                 solutions,
                  > > > but
                  > > > there are some challenges associated with this
            solution,
                 which could make
                  > > > it
                  > > > more complicated:
                  > > >
                  > > > 1) Access control, file system permission based
            or token
            based,
                  > > >
                  > > > 2) stdout/stderr/return encapsulation/forwarding
            to the
            caller,
                  > > > if we have a simple/fast RPC mechanism we can
            use, it's a
            matter
                  > > > of serializing a dictionary.
                  > > >
                  > > > 3) client side implementation for 1 + 2.
                  > > >
                  > > > 4) It would need to accept new domain socket
            connections in
                 green threads
                  > > > to
                  > > > avoid spawning a new process to handle a new
            connection.
                  > > >
                  > > > The advantages:
                  > > > * we wouldn't need to break the
only-python-rule.
                  > > > * we don't need to rewrite/translate rootwrap.
                  > > >
                  > > > The disadvantages:
                  > > > * it needs changes on the client side (neutron +
            other
            projects),
                  > > >
                  > > >
                  > > > Cheers,
                  > > > Miguel Ángel.
                  > > >
                  > > >
                  > > >
                  > > > On 03/08/2014 07:09 AM, Yuriy Taraday wrote:
                  > > >>
                  > > >> On Fri, Mar 7, 2014 at 5:41 PM, Stephen Gran
                  > > >> < stephen.g...@theguardian.com
            <mailto:stephen.g...@theguardian.com>
                 <mailto:stephen.gran@__theguardian.com
            <mailto:stephen.g...@theguardian.com>> <mailto:
            stephen.g...@theguardian.com
            <mailto:stephen.g...@theguardian.com>
            <mailto:stephen.gran@__theguardian.com
            <mailto:stephen.g...@theguardian.com>> >>
                  > > >> wrote:
                  > > >>
                  > > >> Hi,
                  > > >>
                  > > >> Given that Yuriy says explicitly 'unix socket',
            I dont
            think he
                  > > >> means 'MQ' when he says 'RPC'. I think he just
            means a daemon
                  > > >> listening on a unix socket for execution
            requests. This
                 seems like
                  > > >> a reasonably sensible idea to me.
                  > > >>
                  > > >>
                  > > >> Yes, you're right.
                  > > >>
                  > > >> On 07/03/14 12:52, Miguel Angel Ajo wrote:
                  > > >>
                  > > >>
                  > > >> I thought of this option, but didn't consider
            it, as It's
                 somehow
                  > > >> risky to expose an RPC end executing
            priviledged (even
            filtered)
                  > > >> commands.
                  > > >>
                  > > >>
                  > > >> subprocess module have some means to do RPC
            securely over
                 UNIX sockets.
                  > > >> I does this by passing some token along with
            messages. It
                 should be
                  > > >> secure because with UNIX sockets we don't need
            anything
                 stronger since
                  > > >> MITM attacks are not possible.
                  > > >>
                  > > >> If I'm not wrong, once you have credentials for
            messaging,
                 you can
                  > > >> send messages to any end, even filtered, I
            somehow see
            this as a
                  > > >> higher
                  > > >> risk option.
                  > > >>
                  > > >>
                  > > >> As Stephen noted, I'm not talking about using
            MQ for RPC.
                 Just some
                  > > >> local UNIX socket with very simple RPC over it.
                  > > >>
                  > > >> And btw, if we add RPC in the middle, it's
            possible that all
                 those
                  > > >> system call delays increase, or don't decrease
            all it'll be
                  > > >> desirable.
                  > > >>
                  > > >>
                  > > >> Every call to rootwrap would require the
following.
                  > > >>
                  > > >> Client side:
                  > > >> - new client socket;
                  > > >> - one message sent;
                  > > >> - one message received.
                  > > >>
                  > > >> Server side:
                  > > >> - accepting new connection;
                  > > >> - one message received;
                  > > >> - one fork-exec;
                  > > >> - one message sent.
                  > > >>
                  > > >> This looks like way simpler than passing
            through sudo and
                 rootwrap that
                  > > >> requires three exec's and whole lot of
            configuration files
                 opened and
                  > > >> parsed.
                  > > >>
                  > > >> --
                  > > >>
                  > > >> Kind regards, Yuriy.
                  > > >>
                  > > >>
                  > > >>
_________________________________________________
                  > > >> OpenStack-dev mailing list
                  > > >> OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>
                  > > >>

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
                  > > >>
                  > > >
                  > > >
_________________________________________________
                  > > > OpenStack-dev mailing list
                  > > > OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>
                  > > >

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
                  > >
                  > > _________________________________________________
                  > > OpenStack-dev mailing list
                  > > OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>
                  > >

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
                  > >
                  >
                  > _________________________________________________
                  > OpenStack-dev mailing list
                  > OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>
                  >

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
                  >
                  >
                  >
                  > _________________________________________________
                  > OpenStack-dev mailing list
                  > OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>
                  >

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
                  >
                  >
                  >
                  > _________________________________________________
                  > OpenStack-dev mailing list
                  > OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>
                  >

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>
                  >

                 _________________________________________________
                 OpenStack-dev mailing list
            OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>
                 <mailto:OpenStack-dev@lists.__openstack.org
            <mailto:OpenStack-dev@lists.openstack.org>>

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>




            _________________________________________________
            OpenStack-dev mailing list
            OpenStack-dev@lists.openstack.__org
            <mailto:OpenStack-dev@lists.openstack.org>

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>


        _________________________________________________
        OpenStack-dev mailing list
        OpenStack-dev@lists.openstack.__org
        <mailto:OpenStack-dev@lists.openstack.org>

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev

<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>


    _________________________________________________
    OpenStack-dev mailing list
    OpenStack-dev@lists.openstack.__org
    <mailto:OpenStack-dev@lists.openstack.org>

http://lists.openstack.org/__cgi-bin/mailman/listinfo/__openstack-dev
<http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev>




_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev


_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev



_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to