Community discussions

MikroTik App
 
SMARTNETTT
just joined
Topic Author
Posts: 24
Joined: Mon Feb 11, 2019 9:07 pm

fasttrack x86

Sat Apr 20, 2024 11:41 pm

fasttrack conection work in x86 ? yes or not, Mikrotik Know this ?????
 
User avatar
mkx
Forum Guru
Forum Guru
Posts: 13645
Joined: Thu Mar 03, 2016 10:23 pm

Re: fasttrack x86

Sun Apr 21, 2024 12:29 pm

Mikrotik Know this ?????
I bet they know this. But this is an user-to-user forum, so you have to ask MT directly, e.g. by sending them e-mail to support@mikrotik.com .
 
seriquiti
newbie
Posts: 25
Joined: Wed May 11, 2022 12:55 pm

Re: fasttrack x86

Sun Apr 21, 2024 1:26 pm

If you think about what Fasttrack does you will know the answer.

Fasttrack HW-Offloads established connections to the switch-chip, these packets are thereby accelerated by not having to be processed by the CPU. X86 is CPU only - there is no switch chip to offload to. There are specialized hardware that can be installed on x86 systems that can flow-offload but as far as I know they all require their own software and will probably not work with routing software like Router OS for the foreseeable future.
 
User avatar
mkx
Forum Guru
Forum Guru
Posts: 13645
Joined: Thu Mar 03, 2016 10:23 pm

Re: fasttrack x86

Sun Apr 21, 2024 1:38 pm

Fasttrack HW-Offloads established connections to the switch-chip,

Wrong. It's one of possibilities, but (currently) it's a niche use.

Fasttrack was available way before first devices with L3HW offload came to life. The old fasttrack manual page describes its behaviour nicely. The new help system doesn't have dedicated page for fasttrack, it's mentioned in fastpath section of packet flow article.

In short: fasttrack allows packets to skip most of packet processing. As to details which parts of packet processing are done with fasttrack enabled it's Mikrotik to explain. Also particular cases where fasttrack works are MT's knowledge.

Personally I don't see any reason for fasttrack not to work on x86. But, as I wrote in my previous psot, it's MT to tell the truth about it.
 
seriquiti
newbie
Posts: 25
Joined: Wed May 11, 2022 12:55 pm

Re: fasttrack x86

Sun Apr 21, 2024 1:53 pm

I stand corrected. Good to know what actually happens on fasttracked connections.

https://help.mikrotik.com/docs/display/ ... -FastTrack

Describes it pretty well - yea, only mikrotik can answer that then.
 
SMARTNETTT
just joined
Topic Author
Posts: 24
Joined: Mon Feb 11, 2019 9:07 pm

Re: fasttrack x86

Sat Mar 01, 2025 8:21 pm

I stand corrected. Good to know what actually happens on fasttracked connections.

https://help.mikrotik.com/docs/display/ ... -FastTrack

Describes it pretty well - yea, only mikrotik can answer that then.
Not explain if is for x86, you are confused
 
User avatar
chechito
Forum Guru
Forum Guru
Posts: 3281
Joined: Sun Aug 24, 2014 3:14 am
Location: Bogota Colombia
Contact:

Re: fasttrack x86

Sat Mar 01, 2025 9:23 pm

fasttrack conection work in x86 ? yes or not, Mikrotik Know this ?????
i think it works but sometimes does not improve performance as much as on a routerboard
 
User avatar
dang21000
Member Candidate
Member Candidate
Posts: 120
Joined: Sat Feb 25, 2023 2:30 pm
Location: France

Re: fasttrack x86

Sat Mar 01, 2025 9:42 pm

fasttrack and now fasttrack6 since 7.18, is a fully software process from routeros.

hardward offloading is different and independant from fasttrack and like say, its performance and availability depend of the hardware.
 
mada3k
Forum Veteran
Forum Veteran
Posts: 766
Joined: Mon Jul 13, 2015 10:53 am
Location: Sweden

Re: fasttrack x86

Sun Mar 02, 2025 4:01 pm

For what I know, fasttrack is a mikrotik custom solution where the traffic is processed in the driver-layer, and doesn't need to enter the whole kernel infrastructure. Not to be confused with L3HW acceleration/offload.
 
yuripg1
newbie
Posts: 30
Joined: Fri Aug 25, 2023 6:20 pm

Re: fasttrack x86

Sun Mar 02, 2025 11:20 pm

My understanding is that there are 2 different aspects behind FastTrack: "action=fasttrack-connection" and "hw-offload=yes"

I believe "action=fasttrack-connection" works on any platform. That is, it goes straight to FastPath. That alone should result in some improvement.

Then the "hw-offload=yes" I think relates to things like integration with the switch chip, which could further cut software steps, but may only be supported on selected MikroTik hardware.
 
wrkq
Member Candidate
Member Candidate
Posts: 103
Joined: Mon Jul 29, 2019 10:59 pm

Re: fasttrack x86

Mon Mar 03, 2025 12:08 am

"action=fasttrack-connection" engages "standard" software FastTrack, that should work basically everywhere.
It applies a special flag within the connection tracking mechanism (IP>Firewall>Connections) to make all further packets belonging to this connection bypass a lot of the software steps, saving CPU processing.

"hw-offload=yes" does anything only if you have a device with switch-chip supporting L3HW Offload, and enabled L3HW on it.
It is the "easy option" for using L3HW. Basically, as the fasttrack mechanism "kicks in" it will also program the L3HW features in the chip to process this specific connection bypassing the CPU.

(This however creates an equivalent of a "switch rule" for each hw-fasttracked connection, so it has relatively low limits on the number of total connections which can be offloaded that way at the same time. Manually configured "switch rules" can be designed to apply to a whole category of connections, allowing for much larger amounts of offload to happen.)
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Mon Mar 24, 2025 1:44 am

Fastpath and Fasttrack generally speaking do NOT work on x86.

It is true that these have nothing whatsoever to do with HW offiload. However, both of these features require specific support to be added to the network interface driver (ethernet chip, etc.). MikroTik only bothers to do this for network interface drivers that apply to interface hardware included with RouterBOARDs. I've not yet run into a third-party NIC that is supported by ROS x86 and which is Fastpath/Fasttrack enabled.

Given how much CPU horsepower you can throw at an x86 solution, though, this is generally not an issue (or at least it hasn't been for us).
 
cstarritt
just joined
Posts: 13
Joined: Wed Oct 09, 2024 8:30 pm

Re: fasttrack x86

Mon Mar 24, 2025 4:56 pm

Fastpath and Fasttrack generally speaking do NOT work on x86.

It is true that these have nothing whatsoever to do with HW offiload. However, both of these features require specific support to be added to the network interface driver (ethernet chip, etc.). MikroTik only bothers to do this for network interface drivers that apply to interface hardware included with RouterBOARDs. I've not yet run into a third-party NIC that is supported by ROS x86 and which is Fastpath/Fasttrack enabled.

Given how much CPU horsepower you can throw at an x86 solution, though, this is generally not an issue (or at least it hasn't been for us).

I've seen significant CPU use reduction from fasttrack on x86 when running a fair number of filter rules in the forward chain, but it isn't as dramatic as it is on a tile ccr with the interface integration you mentioned.
 
User avatar
Larsa
Forum Guru
Forum Guru
Posts: 1865
Joined: Sat Aug 29, 2015 7:40 pm
Location: The North Pole, Santa's Workshop

Re: fasttrack x86

Mon Mar 24, 2025 5:39 pm

@NathanA: Fastpath and Fasttrack generally speaking do NOT work on x86....however, both of these features require specific support to be added to the network interface driver (ethernet chip, etc.).

Do you know how it actually works under the hood?

My guess is that Mikrotik uses their own skb attributes (likely within skb->cb[]) to flag packets that can bypass things like firewall, NAT, or queuing. This works across all architectures, including x86, and doesn't require any special driver support.

Btw, if they haven’t already, MT should really consider moving to XDP/BPF since it’s future proof, more flexible and offers better performance.
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Mon Mar 24, 2025 9:37 pm

Do you know how it actually works under the hood?
`
I have not read through the source code, so no.
`
My guess is that Mikrotik uses their own attributes (likely within skb->cb[]) to flag packets that can bypass things like firewall, NAT, or queuing. This would work across all architectures, including x86, and wouldn’t require any special driver support.
`
I am basing my comments both off of what has been publicly stated, as well as my own observations.

To that last point, if I fire up ROS on x86, populate it with a couple of Intel E1000 interfaces, ensure that Fast Path is enabled and that all requirements are met (e.g. conntrack is turned off and such, no firewall rules, etc.), then IP > Settings will show Fast Path is active, but the counters will remain at 0 and never tick up as packets are forwarded.

Similarly, if on the same router I enable conntrack, add a NAT masquerade rule, and add the appropriate fasttrack-connection action to IPv4 firewall filters, the Fast Path will go inactive, Fast Track will go active under IP > Settings, AND the counters on fasttrack filter rule under IP > Firewall > Filter WILL tick up. But the Fast Track counters under IP > Settings will NOT and will remain at 0.

The documentation for both features both explicitly states that they are only available on certain hardware, AND in some cases only available on select interfaces/ports on certain models (e.g. packets forwarded through either ether12 or ether13 on RB1100 can NOT be Fast Pathed or Fast Tracked, and we know that these two ports on that model are the ones that aren't directly attached to the SoC but rather are handled by separate NICs hanging off of the PCI bus, as the block diagram in the manual (page 10) clearly shows)! This implies drivers for the interfaces in question (ether1-ether11 in the case of the RB1100) have been specifically patched to add support.

The same documentation also very clearly implies that Fast Track has a dependency on Fast Path...so if a given interface (and, thus, its underlying driver) doesn't support Fast Path, it won't support Fast Track, either. Fast Track is described as a Fast Path "handler":
`
FastTrack is available on the devices with FastPath support. FastTrack is FastPath+Connection Tracking.
`
(emphasis added)

A MikroTik employee talks about drivers that "support" Fast Path in this post.

On slide 12 of this slide deck from a past MUM talk about Fast Path, it unambiguously states that driver support is a requirement:
`
FastPath is an interface driver extension, that allows you to receive/process/send traffic without unnecessary processing.
Interface driver can now talk directly to specific RouterOS processes - skipping all others
● FastPath requirements:
Interface driver support
[...]
`
This post links to this slide deck and makes the same assertions, in a conversation surrounding Fast Path support on RB850Gx2. I can, sadly, confirm through first-hand experience that RB850Gx2 does in fact NOT support Fast Path or Fast Track. All interfaces on 850Gx2 act exactly the same as the E1000 interface does on x86.

In conclusion, specific support needs to be added to hardware drivers before a given interface on a particular router can support Fast Path or Fast Track. I believe this does not prohibit Fast Path support from being added to particular ethernet interface drivers on x86, but it seems clear that MikroTik has not bothered to do so (or if they have, it is to a VERY limited set of drivers...I have not yet run into a common PCI/PCIe ethernet chipset that I can get Fast Path working with on x86).

I should clarify that all of this is very ROS 6 centric. It is possible things have changed in ROS 7.
 
User avatar
Larsa
Forum Guru
Forum Guru
Posts: 1865
Joined: Sat Aug 29, 2015 7:40 pm
Location: The North Pole, Santa's Workshop

Re: fasttrack x86

Mon Mar 24, 2025 10:38 pm

My take:
Honestly, I think “interface driver extension” most likely refers to using something like the skb->cb[] control buffer to tag packets internally. That buffer is explicitly designed for storing temporary, per-packet metadata and is commonly used by various subsystems (including Netfilter and QoS) to influence processing without requiring driver-level changes.

From a design standpoint, this approach makes sense: it’s portable across architectures, avoids the need to patch or recompile NIC drivers, and gives Mikrotik full control within ROS itself. I don’t see any strong technical reason why they’d need to modify standard Linux drivers just to implement FastPath/FastTrack.

That said, I’ll concede that “interface driver support” might not necessarily mean modifying the driver. It could just mean that the driver and underlying hardware must not interfere with FastPath requirements — for example, by avoiding PCI bus overhead, allowing DMA forwarding paths, or supporting basic offloads like checksum or TSO. That would explain why some interfaces (e.g. on the RB1100 or RB850Gx2) don’t qualify, even if no actual driver patching is involved.

So no, you still haven’t fully convinced me just yet 😄 but it’s a good discussion!
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Tue Mar 25, 2025 12:11 am

That said, I’ll concede that “interface driver support” might not necessarily mean modifying the driver. It could just mean that the driver and underlying hardware must not interfere with FastPath requirements
`
Eh, maaaaaaybe? But if that were the case, you'd have to validate a lot of things about a potential driver at runtime to make sure it's safe to support. Assuming this is the case, at that point, if I were MT devs, I would just maintain a whitelist of drivers that were allowed to Fast Path, because otherwise some unexpected implementation or bug in some driver could cause unexpected behavior or problems, even if it otherwise checks all of the boxes.

Anyway, it's not like it is out of the question, or unheard of, for MT to patch ethernet drivers. They already do so to add L2MTU support. We know L2MTU support is explicitly needed in a driver, because interfaces undergirded by drivers without it just show a '0' as their L2MTU and it remains uneditable...and for such interfaces, the MTU is also treated as the L2MTU. Looking briefly through the RouterOS 6 kernel patch set, they have done very minor updates for minimum L2MTU support on certain drivers for third-party (x86) hardware, like Intel e1000e for example. And yet others bizarrely did not get the same (very minor) treatment, like ixgbe.

So just taking a very extremely brief look at the patches provided by MT (again, on ROS6, so against Linux 3.3.5), I'm not entirely convinced they have supplied us with everything needed to understand Fast Path / Fast Track implementation (though this is at a VERY cursory glance on my part). There is very little matching against ~"fast.*path".

One thing to note, though, is that the net_device_ops struct in netdevice.h has had a function pointer added to it, named *ndo_fast_path_xmit(). This HIGHLY suggests that a device driver needs to implement that function in order to support Fast Path. Perhaps there is a generic version that it can inherit from, but if so, I haven't spotted it yet. (There is also a similar function pointer in the same struct called *ndo_change_l2mtu() that presumably needs to be implemented before a particular interface can allow its L2MTU to be set/overridden by the user.)

Although I could see an argument for it being interpreted differently, I would personally say that MT including "Other devices: Not supported" at the end of their table of Fast Path device support is meant to communicate not that "YMMV", but rather that any device NOT included in that list -- which would be inclusive of ALL x86 routers -- is a hard "no".
 
User avatar
Larsa
Forum Guru
Forum Guru
Posts: 1865
Joined: Sat Aug 29, 2015 7:40 pm
Location: The North Pole, Santa's Workshop

Re: fasttrack x86

Tue Mar 25, 2025 1:24 pm

Hey, good points and nice digging!

It’s fair to point out that Mikrotik has patched drivers, as you mentioned with L2MTU — but that was mostly with ROS 6.x.

When ROS v6 was built on Linux 3.3.5, there were quite a few limitations around L2MTU handling, both in the networking stack and in many drivers. So I fully believe that Mikrotik had to patch drivers more aggressively back then to get things working properly.

But with ROS v7 (now on Linux 5.6.3), full support for L2MTU is present in the kernel via netlink, and most modern drivers already implement the necessary hooks. But some very old drivers — especially legacy Realtek and certain Broadcom variants — might still lack proper L2MTU support if the original vendor hasn’t maintained compatibility with newer kernel APIs. In those cases, Mikrotik likely still needs to patch them manually.

Your discovery of the function pointer in "net_device_ops" called "ndo_fast_path_xmit()" doesn’t automatically mean it’s tied to a deeply patched or nonstandard driver. Quite the opposite — it’s more likely just a Mikrotik-defined standard transiver hook, declared something like this:

net_device_ops code

struct net_device_ops {
    ...
    netdev_tx_t (*ndo_fast_path_xmit)(struct sk_buff *skb, struct net_device *dev);
};
Also, if a driver were responsible for deciding when FastPath should be applied to a packet, that would imply the logic for determining packet eligibility — like whether conntrack is active, NAT is used, firewall rules exist, queues are applied, etc — would have to live inside the driver. That seems both architecturally awkward and hard to scale. It would essentially mean that every NIC driver ROS uses would need to be massively reworked, which feels unlikely and unnecessarily complex.

Your observations (e.g. counters staying at zero) might also suggest that the FastPath metrics themselves aren’t being reported correctly — rather than FastPath not working at all. The fact that ROS reports FastPath as enabled on x86 even if counters stay at 0 still suggests that the mechanism is present and able to engage.

Also, in general I wouldn’t necessarily interpret “Other devices: Not supported” as meaning will never work. Mikrotik’s documentation is infamously vague and sometimes directly contradictory when it comes to technical internals.

To me, the key question still is: Does FastPath require a hard dependency on patched drivers, or can ROS use skb with standard hooks? I’m still convinced it’s the latter — meaning this can be abstracted internally without invasive driver changes.

Appreciate the detailed response though!
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Tue Mar 25, 2025 8:56 pm

To me, the key question still is: Does FastPath require a hard dependency on patched drivers, or can ROS use skb with standard hooks?
`
Yes, of course. That's what we are discussing.

Unfortunately, at the moment, I feel that we (on the outside of MT engineering) lack enough evidence to definitively say one way or the other, and that we can both be looking at the available evidence and yet still reasonably come to the exact opposite conclusion.

For example...
`
Your observations (e.g. counters staying at zero) might also suggest that the FastPath metrics themselves aren’t being reported correctly — rather than FastPath not working at all. The fact that ROS reports FastPath as enabled on x86 even if counters stay at 0 still suggests that the mechanism is present and able to engage.
`
...I do not see your conclusion here as inescapable. I could just as easily argue that Fast Path and Fast Track reporting in ROS is merely an indicator that all of the "soft" requirements have been met (that is, there is no user config -- e.g., firewall filter rules, etc. -- that would stand in the way of it working, were it actually supported on the hardware itself), and not that it is a definitive sign that Fast-Path-ing is actually happening. The RB850Gx2, which infamously does not support Fast Path, will also show "ipv4-fast-path-active: yes" or "ipv4-fast-track-active: yes" as long as these . conditions are met.
`
Mikrotik’s documentation is infamously vague
`
I will give you that one. 😂
`
But with ROS v7 (now on Linux 5.6.3), full support for L2MTU is present in the kernel via netlink
`
I hadn't heard this / wasn't aware of a new L2MTU support being added to more recent mainline Linux releases, but even if that is true, as far as I can tell from looking at MikroTik's patches to 5.6.3, they don't seem to be making use of whatever new "native" L2MTU support there is. Most of their custom/in-house L2MTU stuff that existed in their 3.3.5 patches appears to have been dropped in place almost verbatim (+ there is some new "MPLSMTU" stuff that is implemented much the same way).
`
it’s more likely just a Mikrotik-defined standard transiver hook, declared something like this:
`
I am admittedly nowhere near a Linux kernel internals expert, even less so on the network stack side. That said, it still seems like more than that is actually going on, though I could be vastly misinterpreting things here (see: previous sentence).

Here is the actual definition of the function under discussion:
`
int (*ndo_fast_path_xmit) (struct net_device *dev, struct fp_buf *fpb);
`
So calls to this are not just passing a standard sk_buff along with the device struct, but rather some other packet buffer (meta?-)structure, which is also (seemingly) brand-new. Frustratingly, I cannot find the actual definition of this struct ANYWHERE within either MT's patchset, or within a full Linux source tree that the patch has been applied to. It is forwardly declared within the patch, immediately before the beginning of the net_device_ops struct definition, so that the struct type can be referenced as a parameter to be passed to the fast_path_xmit function...
`
struct fp_buf;
struct net_device_ops {
[...]
`
...but that's all she wrote. The actual definition of the struct and its members is nowhere to be found. I mean, I suppose it's possible that this could be getting aliased to sk_buff itself, but we simply don't know!

There are several other Fast Path related structures, whose names all begin with 'fp_', and many of which are also missing definitions, with the notable exception of fp_dev (it appears all of the others are being forward-declared because there are members of fp_dev made of those struct types):
`
struct fp_stuff;
struct fp_dev_pcpu_stats;
struct fp_stats_rcu;
struct fp_dev {
       struct fp_stuff *stuff;
       int (*xmit)(struct net_device *dev, struct fp_buf *fpb);
       struct hlist_node list;
       struct fp_dev_pcpu_stats __percpu *stats;
       struct fp_stats_rcu *stats_rcu;
       u64 sp_rx_packet;
       u64 sp_tx_packet;
       u64 sp_rx_byte;
       u64 sp_tx_byte;
       u64 fp_rx_packet;
       u64 fp_tx_packet;
       u64 fp_rx_byte;
       u64 fp_tx_byte;
       u64 tx_drop;
};
`
So we see what look like a bunch of stats/counter variables, and an ambiguous "stuff" structure, heh. It also sure looks like that same ndo_fast_path_xmit() function is being pointed at within the fp_dev struct, too, just under a different (shorter) name...

The fp_dev struct gets instantiated within the net_device struct:
`
struct net_device {
[...]
        unsigned                devid;
        struct fp_dev fp;
        unsigned long list_bitmap[256 / BITS_PER_LONG];
`
...and yet I cannot find a single place in the whole of the Linux source tree where dev.fp / dev->fp is ever touched or referenced.

There are also a bunch of other Fast Path related functions declared in include/linux/netdevice.h...
`
extern void (*fp_ptype_all_changed)(int);
extern void (*fp_nf_changed)(int, int pf);
extern void (*fp_xfrm_changed)(int);
`
...which are getting exported out of net/core/dev.c. Except that the actual code for all of these functions is completely missing, too!:
`
void (*ipv4_routing_changed)(void);
void (*fp_ptype_all_changed)(int);
void (*fp_nf_changed)(int, int pf);
void (*fp_xfrm_changed)(int);
EXPORT_SYMBOL(ipv4_routing_changed);
EXPORT_SYMBOL(fp_ptype_all_changed);
EXPORT_SYMBOL(fp_nf_changed);
EXPORT_SYMBOL(fp_xfrm_changed);
`
There are a handful of calls being made to these functions that I can find scattered around, but no backing code. That's all that exists.

Finally, there is one additional function pointer that was added to net_device_ops right below the fast_path_xmit one:
`
int (*ndo_xmit_commit) (struct net_device *dev);
`
I don't actually know that it is Fast Path related, but...probably?

In any case, I cannot find a single implementation of either ndo_fast_path_xmit or ndo_xmit_commit ANYWHERE, either. So either I'm blind as a bat, or MikroTik seemingly left a bunch of applicable code out of its GPL kernel patches.

As an interesting side note, I had a set of kernel patches laying around from a 6.5 release candidate, and ndo_fast_path_xmit actually used to be defined this way:
`
netdev_tx_t (*ndo_fast_path_xmit) (struct net_device *dev, struct net_device *port, void *buf);
 
User avatar
Larsa
Forum Guru
Forum Guru
Posts: 1865
Joined: Sat Aug 29, 2015 7:40 pm
Location: The North Pole, Santa's Workshop

Re: fasttrack x86

Tue Mar 25, 2025 9:51 pm

To me, the key question still is: Does FastPath require a hard dependency on patched drivers, or can ROS use skb with standard hooks?

Yes, of course. That's what we are discussing.

Yeah, but you forgot to add my mighty conclusion: I’m still convinced it’s the latter — meaning this can be abstracted internally without invasive driver changes.. 😇

ps...
You don't need to use a backtick to add an empty new line, just use a space plus newline, like this:
start



end
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Tue Mar 25, 2025 10:14 pm

Yeah, but you forgot to add my mighty conclusion:

Because I'm not convinced of your conclusion, just as you are not convinced of mine. 😜

You don't need to use a backtick to add an empty new line, just use a space plus newline

I swear I've tried that before on previous incarnations of the forum, and it didn't work, so I got into this habit as the backtick seemed like the least "intrusive" way of adding some vertical space that I could find. (Specifically, it's not blank lines between my own paragraphs that have been the problem, but rather putting space between blockquotes and/or code blocks and my next paragraph.) So...I'll try it here and see if this now works.

(Seriously, though, the style sheets for the default theme here are a hot mess, and have been for a long time. As an example of a similar issue, in my last post, I was forced to put " . " between two back-to-back URLs/links that I wanted to have a space between, because even with one or more contiguous spaces in between them, it would still smush the two words together!! here is another test ...every single last one of those had THREE spaces between them)

EDIT: Okay, so your "space-plus-newline" trick works...but ONLY for the line FOLLOWING a blockquote, not the one PRECEDING a blockquote, as you can see from above.
EDIT 2: Okay, I got a SINGLE line of vertical space to occur between a paragraph and a blockquote by putting in TWO back-to-back "space-plus-newlines". Ugh.
 
CGGXANNX
Long time Member
Long time Member
Posts: 510
Joined: Thu Dec 21, 2023 6:45 pm

Re: fasttrack x86

Tue Mar 25, 2025 11:07 pm

You only need two back-to-back newlines for all cases. No space needed.
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Tue Mar 25, 2025 11:31 pm

You only need two back-to-back newlines for all cases. No space needed.

Heh, I swear I have tried that in the past, too. Let's give it a shot (again?)...

Bleh.

Test.

Yep, works (now?); thanks.
 
User avatar
Larsa
Forum Guru
Forum Guru
Posts: 1865
Joined: Sat Aug 29, 2015 7:40 pm
Location: The North Pole, Santa's Workshop

Re: fasttrack x86

Sun Apr 06, 2025 6:13 pm

I got this info from a friend I met this weekend. Support for "fast path" (aka Linux "flowtables") is standard functionality in Linux kernel 5.6, which is what ROS v7 runs on. Flowtables were introduced around 2017/2018 with full user-space support in Linux 5.1 and use related standard hooks in the network drivers. Only really old drivers need manual patching if the vendor hasn’t kept them up to date.

Ref:
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Mon Apr 07, 2025 12:20 am

I got this info from a friend I met this weekend. Support for "fast path" (aka Linux "flowtables") is standard functionality in Linux kernel 5.6, which is what ROS v7 runs on. Flowtables were introduced around 2017/2018 with full user-space support in Linux 5.1 and use related standard hooks in the network drivers. Only really old drivers need manual patching if the vendor hasn’t kept them up to date.

Again, as I already brought up when discussing native L2MTU support in newer kernels, just because the newer kernel adds such a feature does NOT mean that MT is using the new native version of that feature that comes with the mainline kernel. I agree it would be strange for them to NOT switch over to using that from whatever proprietary solution they originally came up with, BUT if you ACTUALLY look at the patches they have released, and compare their patch set for 3.3.5 to their patch set for 5.6.3, you will see that virtually all of their L2MTU *and* Fast Path stuff that they added to 3.3.5 ALSO exists in their hacked-up version of 5.6.3.

Unless/until MT releases more comprehensive patches (it seems they have withheld some key FP implementation details in their patches...I'm not sure how they manage to get away with this, the GPL being what it is, but it seems they "found a way") and/or actually comes out with an official, on-the-record explanation, I believe we are at an impasse. (Either that, or I'm reading the source code that we do have access to completely wrong, in which case...read it yourself and then please call me out on my wrong interpretation of what I'm seeing.)
 
User avatar
Larsa
Forum Guru
Forum Guru
Posts: 1865
Joined: Sat Aug 29, 2015 7:40 pm
Location: The North Pole, Santa's Workshop

Re: fasttrack x86

Mon Apr 07, 2025 8:05 am

Just to be clear, my post was about fast path via nf_flowtable, not L2MTU. Different features and different context.

The idea that MT would deliberately replace or downgrade standard fast path functionality already present in the kernel and supported by current and future mainstream drivers is hard to take seriously. Occam's razor applies here.

The simplest explanation is that they’re using the native flowtable support in the 5.6 kernel, unless there’s solid evidence to the contrary. Sure, their patchsets might still include older fast path code for legacy drivers, but that doesn’t necessarily mean they aren’t also relying on the kernel’s built-in flowtable functionality for everything else. It could simply be for backward compatibility or part of a gradual transition. If you’ve seen specific patches where they explicitly disable nf_flowtable, I’d be genuinely interested to take a look.
 
User avatar
NathanA
Forum Veteran
Forum Veteran
Posts: 907
Joined: Tue Aug 03, 2004 9:01 am

Re: fasttrack x86

Mon Apr 07, 2025 5:01 pm

Just to be clear, my post was about fast path via nf_flowtable, not L2MTU. Different features and different context.

You were perfectly clear. The context is that of assuming that MT made the seemingly logical choice by choosing a networking feature that might be provided natively in the mainline kernel, rather than their own legacy implementation. I don't know why if they couldn't diverge from that path in one instance, that this can't somehow constitute precedence for behavior or decision-making on their part.

The idea that MT would deliberately replace or downgrade standard fast path functionality already present in the kernel and supported by current and future mainstream drivers is hard to take seriously. Occam's razor applies here.

Not so hard to take seriously if you look at the (little) code they have provided. You have access to the same stuff I do; take a look for yourself.

There are other things that all seem to speak to them either not taking advantage of "flowtables", or that if they are, of them imposing upon it the exact same set of limitations that the old-school fast path implementation from v6 had. Which seems, as the kids these days say, "pretty sus". Namely:

  • The help/documentation for v7 has the same set of restrictions placed upon both fast path and fast track's usage as v6 does (from the old wiki), in terms of what ROS features can or cannot be used and how things can be "wired up" in your config
  • v7 listed hardware platform "support" for fast path has not deviated from the previous v6 list; it certainly hasn't added x86 to it
  • the same first-party hardware that doesn't support fast path on v6 does not suddenly get it in v7
  • in tests, none of the NICs that have drivers shipping with mainline Linux and which ROS7 supports on x86 seem to behave as if they support fast path...same as v6

I mean, sure, if flowtables requires updates to NIC drivers for it to be able to be taken advantage of, then maybe RB850Gx2, for example, still isn't supported because Freescale hasn't bothered to update their Linux platform support code / SDK in recent times, so the old driver had to be carried forward. But...c'mon.

If they are using "flowtables" under-the-hood, then they have gone to GREAT lengths to make it smell exactly like the fast path of old, right down to little details. Even though as we can see in other areas of v7, they aren't shy about making *some* drastic changes to behavior or expected outcomes (BGP config, route filters, next-hop lookup behavior, etc. ...sure, most except perhaps that last one aren't kernel related, but still).

In short, Occam's Razor cuts both ways here.

Finally, doesn't it also seem a bit weird that, if Linux devs handed MT a silver platter with a basically ready-to-go fast path implementation, that they didn't immediately capitalize on that out of the gate in early releases of v7 by introducing a "new IPv6 fast path handler" WAY back then? It's kind of bonkers that it took until 7.18 until we saw fast path and fast track support extended to IPv6...no? Not saying it would have taken zero work on their part even with flowtables, but 4 years is a long time. Especially if they had to re-implement everything else FP-related from scratch, you'd think they would have gone ahead and taken the time to bring up IPv6 support closer to 7.1 than to today.

The simplest explanation is that they’re using the native flowtable support in the 5.6 kernel, unless there’s solid evidence to the contrary. Sure, their patchsets might still include older fast path code for legacy drivers, but that doesn’t necessarily mean they aren’t also relying on the kernel’s built-in flowtable functionality for everything else.

So your hypothesis is that they have two completely overlapping and competing implementations included in their kernel, and which code path is followed depends on whether a "legacy" driver is being used or not?? Heh, now who is violating Occam? Porting their whole legacy FP implementation forward while needing to account for all of the novel ways Linux 5.6 has changed kernel internals over the prior 8 years since 3.3 was released, just to support a minority of hardware/drivers & rather than just fixing the few drivers that needed to be fixed, sounds nuts to me!

Now, it would certainly seem, based on the available evidence (source code), that they did in fact (at least seemingly) port so-called "legacy FP" forward. So I assume they had a good reason for doing that (or, at least, what they thought was a good reason). But I have to believe that the would have ultimately chosen one solution *or* the other. I have a hard time wrapping my head around the concept of them going to the trouble of porting the old one forward if they are also utilizing the new one, and using the new one in a majority of cases, as well as planning the future of fast path around the new implementation.

It could simply be for backward compatibility or part of a gradual transition. If you’ve seen specific patches where they explicitly disable nf_flowtable, I’d be genuinely interested to take a look.

None of the symbols referenced in the flowtables documets you linked to make any appearance in their patches for 5.6.3, which is not evidence in either one direction or the other of course. Also, it doesn't appear that set of ROS7 kernel patches they published include their .configs for each of their platforms, either...this is something I got into a tussle with them about several years back, and although I finally extracted their kernel .configs out of them at the time, it seems they have possibly fallen back to their old ways. If flowtables is a "make config" togglable feature, then I have no idea if it has been enabled or not in their kernels (they don't tend to build their kernels with CONFIG_IKCONFIG enabled so I can't look at what build-time options they have included, otherwise I wouldn't have had to pester them way back when).