Uploaded image for project: 'Lustre'
  1. Lustre
  2. LU-2456

Dynamic LNet Config Main Development Work

Details

    • New Feature
    • Resolution: Fixed
    • Major
    • Lustre 2.7.0
    • Lustre 2.6.0
    • None
    • 5798

    Description

      This ticket has been created to track the main development work for the Dynamic LNet Config project.

      Attachments

        1. dlc_api.patch
          14 kB
        2. DLC_FTP.docx
          157 kB
        3. DLC_User_doc.pdf
          101 kB
        4. Dynamic LNet Config.pdf
          55 kB
        5. Dynamic LNet Config Test Plan.pdf
          293 kB
        6. l_dlc.patch
          5 kB

        Issue Links

          Activity

            [LU-2456] Dynamic LNet Config Main Development Work

            Ticket LU-5705 was created to discuss lctl versus lnetctl

            simmonsja James A Simmons added a comment - Ticket LU-5705 was created to discuss lctl versus lnetctl

            One question that came up at LAD last week was why the lnetctl functionality was not (also) available via lctl? Like the other LNet-specific commands that are already available via lctl, these commands could also be added just by adding them to the lctl parser.

            It is still desirable to have a standalone lnetctl command for the systems that are using only LNet (there are a few).

            The stated benefit of having these new commands in lctl is that this reduces the number of binaries that need to be installed on the compute nodes, which try to have a minimal memory/space footprint.

            That isn't a requirement for landing, but rather an enhancement request from the end users.

            adilger Andreas Dilger added a comment - One question that came up at LAD last week was why the lnetctl functionality was not (also) available via lctl ? Like the other LNet-specific commands that are already available via lctl, these commands could also be added just by adding them to the lctl parser. It is still desirable to have a standalone lnetctl command for the systems that are using only LNet (there are a few). The stated benefit of having these new commands in lctl is that this reduces the number of binaries that need to be installed on the compute nodes, which try to have a minimal memory/space footprint. That isn't a requirement for landing, but rather an enhancement request from the end users.

            lnetctl utility has the same work flow as the ip utility. The only difference is that the infrastructure I was asked to use for the utility allows interactive mode, and the patter "help <cmd>" in interactive mode. However, that infrastructure doesn't support the pattern "help <cmd> <subcmd>" readily.

            The way it works:

            lnetctl > help set
            set: set {tiny_buffers | small_buffers | large_buffers | routing}
            
            lnetctl > set tiny_buffers help
            set tiny_buffers: set tiny routing buffers
                    VALUE must be greater than 0
            

            so help <cmd> gives the first level of help. To get help on subsequent commands, you put the "help" keyword after the subcommand.

            If you run directly from the command line, the output would look like this:

            [root@rt1 lutfTMP]# lnetctl help
            Available commands are:
                    lnet
                    route
                    net
                    routing
                    set
                    import
                    export
                    stats
                    peer_credits
                    help
                    exit
                    quit
            For more help type: help command-name
            [root@rt1 lutfTMP]# lnetctl route help
            route add: add a route
                    --net: net name (ex tcp0)
                    --gateway: gateway nid (ex 10.1.1.2@tcp)
                    --hop: number to final destination (1 < hops < 255)
                    --priority: priority of route (0 - highest prio
            
            route del: delete a route
                    --net: net name (ex tcp0)
                    --gateway: gateway nid (ex 10.1.1.2@tcp)
            
            route show: show routes
                    --net: net name (ex tcp0) to filter on
                    --gateway: gateway nid (ex 10.1.1.2@tcp) to filter on
                    --hop: number to final destination (1 < hops < 255) to filter on
                    --priority: priority of route (0 - highest prio to filter on
                    --detail: display detailed output per route
            
            route help: display this help
            
            [root@rt1 lutfTMP]# lnetctl route show help
            route show: show routes
                    --net: net name (ex tcp0) to filter on
                    --gateway: gateway nid (ex 10.1.1.2@tcp) to filter on
                    --hop: number to final destination (1 < hops < 255) to filter on
                    --priority: priority of route (0 - highest prio to filter on
                    --detail: display detailed output per route
            
            ashehata Amir Shehata (Inactive) added a comment - lnetctl utility has the same work flow as the ip utility. The only difference is that the infrastructure I was asked to use for the utility allows interactive mode, and the patter "help <cmd>" in interactive mode. However, that infrastructure doesn't support the pattern "help <cmd> <subcmd>" readily. The way it works: lnetctl > help set set: set {tiny_buffers | small_buffers | large_buffers | routing} lnetctl > set tiny_buffers help set tiny_buffers: set tiny routing buffers VALUE must be greater than 0 so help <cmd> gives the first level of help. To get help on subsequent commands, you put the "help" keyword after the subcommand. If you run directly from the command line, the output would look like this: [root@rt1 lutfTMP]# lnetctl help Available commands are: lnet route net routing set import export stats peer_credits help exit quit For more help type: help command-name [root@rt1 lutfTMP]# lnetctl route help route add: add a route --net: net name (ex tcp0) --gateway: gateway nid (ex 10.1.1.2@tcp) --hop: number to final destination (1 < hops < 255) --priority: priority of route (0 - highest prio route del: delete a route --net: net name (ex tcp0) --gateway: gateway nid (ex 10.1.1.2@tcp) route show: show routes --net: net name (ex tcp0) to filter on --gateway: gateway nid (ex 10.1.1.2@tcp) to filter on --hop: number to final destination (1 < hops < 255) to filter on --priority: priority of route (0 - highest prio to filter on --detail: display detailed output per route route help: display this help [root@rt1 lutfTMP]# lnetctl route show help route show: show routes --net: net name (ex tcp0) to filter on --gateway: gateway nid (ex 10.1.1.2@tcp) to filter on --hop: number to final destination (1 < hops < 255) to filter on --priority: priority of route (0 - highest prio to filter on --detail: display detailed output per route

            I have been testing this the utilities and I saw this:

            lnetctl > help set
            set: set

            {tiny_buffers | small_buffers | large_buffers | routing}

            lnetctl > help set large_buffers
            setlarge_buffers: Unknown command.

            Is this correct behavior?

            simmonsja James A Simmons added a comment - I have been testing this the utilities and I saw this: lnetctl > help set set: set {tiny_buffers | small_buffers | large_buffers | routing} lnetctl > help set large_buffers setlarge_buffers: Unknown command. Is this correct behavior?
            simmonsja James A Simmons added a comment - http://review.whamcloud.com/#/c/9830 http://review.whamcloud.com/#/c/9831 http://review.whamcloud.com/#/c/9832 http://review.whamcloud.com/#/c/8021 http://review.whamcloud.com/#/c/8022 http://review.whamcloud.com/#/c/8023 http://review.whamcloud.com/#/c/8025 http://review.whamcloud.com/#/c/8026 http://review.whamcloud.com/#/c/8027 http://review.whamcloud.com/#/c/8028

            suggestions about dlc APIs based on discussion in Miami

            liang Liang Zhen (Inactive) added a comment - suggestions about dlc APIs based on discussion in Miami
            liang Liang Zhen (Inactive) added a comment - comments for DLC patch http://review.whamcloud.com/#/c/9785/

            I'm up for a call. I am free after 3:30 PST today, or most of the day tomorrow.

            morrone Christopher Morrone (Inactive) added a comment - I'm up for a call. I am free after 3:30 PST today, or most of the day tomorrow.

            I have a recommendation. I'm finding that progressing on the project with this form of communication is inefficient. Would you agree for a skype/phone meeting, where we can hash out the different points of view. I would say that we can call a meeting with yourself, Doug Oucharek, Andreas and myself. Does that sound like a reasonable plan?

            ashehata Amir Shehata (Inactive) added a comment - I have a recommendation. I'm finding that progressing on the project with this form of communication is inefficient. Would you agree for a skype/phone meeting, where we can hash out the different points of view. I would say that we can call a meeting with yourself, Doug Oucharek, Andreas and myself. Does that sound like a reasonable plan?

            User Documentation as exported from the internal Wiki

            ashehata Amir Shehata (Inactive) added a comment - User Documentation as exported from the internal Wiki
            ashehata Amir Shehata (Inactive) added a comment - - edited

            The CLI

            lnetctl <cmd> <entity> [parameters]

            except that we use optional parameters to pass in the different parameters. The decision is to get away from positional parameters.

            ex:

            add route --net tcp0 --gateway 10.1.1.2@tcp1 --hop 1 --priority 0

            Also please note that the examples you gave above are not consistent form. In some cases you have

            lnetctl <command> <object>
            ex: lnetctl set small_buffers 1000

            and in other cases you have

            lnetctl OBJECT COMMAND
            ex: lnetctl network add o2ib0 dev ib0

            In my opinion, I think a consistent form makes it easier to get more familiar with the command line.

            I agree that "del file" with regards to enabling/disabling routing might be confusing. Here is my suggestion.

            To reset all router buffers to default values the yaml file that you feed to the del command would look like:

            • buffer

            If you add other parameters under buffer they will be ignored. For example:

            • buffer:
              tiny: 2000

            it'll still reset the buffer to the default values.

            To disable routing the yaml file would include:

            • routing

            This way you can take the exact same YAML file feed it to any of the commands and they will get processed correctly. Parameters that are meaningless to the command are ignored.

            With your suggestion:
            lnetctl import myfinefile.yaml

            What operations do we do on myfinefile.yaml? What is contained in the yaml file?

            That's why you explicitly tell the utility what to do on the yaml file (add, del or show)

            ashehata Amir Shehata (Inactive) added a comment - - edited The CLI lnetctl <cmd> <entity> [parameters] except that we use optional parameters to pass in the different parameters. The decision is to get away from positional parameters. ex: add route --net tcp0 --gateway 10.1.1.2@tcp1 --hop 1 --priority 0 Also please note that the examples you gave above are not consistent form. In some cases you have lnetctl <command> <object> ex: lnetctl set small_buffers 1000 and in other cases you have lnetctl OBJECT COMMAND ex: lnetctl network add o2ib0 dev ib0 In my opinion, I think a consistent form makes it easier to get more familiar with the command line. I agree that "del file" with regards to enabling/disabling routing might be confusing. Here is my suggestion. To reset all router buffers to default values the yaml file that you feed to the del command would look like: buffer If you add other parameters under buffer they will be ignored. For example: buffer: tiny: 2000 it'll still reset the buffer to the default values. To disable routing the yaml file would include: routing This way you can take the exact same YAML file feed it to any of the commands and they will get processed correctly. Parameters that are meaningless to the command are ignored. With your suggestion: lnetctl import myfinefile.yaml What operations do we do on myfinefile.yaml? What is contained in the yaml file? That's why you explicitly tell the utility what to do on the yaml file (add, del or show)

            People

              ashehata Amir Shehata (Inactive)
              doug Doug Oucharek (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              20 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: