Fasttrack соединение работает на x86? Да или нет, Mikrotik это знает???
fasttrack x86
fasttrack x86, RouterOS
20.04.2024 20:41:00
|
|
|
|
01.03.2025 18:21:00
Не объясняй, если это для x86, ты запутался.
|
|
|
|
01.03.2025 19:23:00
Думаю, это работает, но иногда не улучшает производительность так сильно, как на RouterBOARD.
|
|
|
|
25.03.2025 18:56:00
Да, конечно. Именно это мы и обсуждаем. К сожалению, на данный момент у меня складывается ощущение, что мы (снаружи инженерии MT) не располагаем достаточными доказательствами, чтобы однозначно сказать «да» или «нет», и что мы оба можем смотреть на одни и те же данные и при этом вполне обоснованно прийти к диаметрально противоположным выводам. Например…
…Я не считаю твой вывод здесь неизбежным. Я с такой же легкостью могу утверждать, что отчёты Fast Path и Fast Track в ROS — это всего лишь индикатор того, что выполнены все «мягкие» требования (то есть нет пользовательской конфигурации — например, правил фильтрации в брандмауэре и т.п., — которые бы мешали работе, если бы аппаратно это действительно поддерживалось), а не однозначный знак того, что Fast-Path реально происходит. RB850Gx2, который как известно не поддерживает Fast Path, тоже будет показывать «ipv4-fast-path-active: yes» или «ipv4-fast-track-active: yes», как только [эти]( Признаюсь, я совсем не спец по внутренностям ядра Linux, уж тем более в части сетевого стека. Тем не менее, кажется, что там происходит что-то большее, хотя я могу сильно неправильно всё интерпретировать (см. предыдущую фразу). Вот реальное определение функции, о которой идёт речь: int (*ndo_fast_path_xmit) (struct net_device *dev, struct fp_buf *fpb); То есть вызовы этой функции передают не обычный sk_buff вместе с dev-структурой, а какой-то другой буфер пакета (мета?-)структуру, который тоже (по всей видимости) новый. _**Чёрт побери**_, я так и не нашёл определение этой структуры нигде — ни в патчах MT, ни в полном исходном дереве Linux с применённым патчем. Структура объявлена вперёд (forward declaration) прямо перед определением net_device_ops в патче, чтобы можно было использовать её как параметр fast_path_xmit... struct fp_buf; struct net_device_ops { [...] …но это всё, что я смог найти. Определения структуры и её полей нет нигде. В принципе, возможно, что это просто алиас на sk_buff, но мы этого просто не знаем! Есть ещё несколько других структур, связанных с Fast Path, названия которых начинаются с «fp_», и многие из них тоже не имеют определений, за исключением fp_dev (кажется, что все остальные объявлены вперёд, так как поля fp_dev сделаны именно из этих типов): 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; }; Видим, что это куча счётчиков и переменная с загадочным названием «stuff», хех. Похоже, что та же функция ndo_fast_path_xmit фигурирует и здесь, только под более коротким именем. Структура fp_dev вложена в net_device: struct net_device { [...] unsigned devid; struct fp_dev fp; unsigned long list_bitmap[256 / BITS_PER_LONG]; Однако я не нашёл ни одного места в исходниках Linux, где бы к dev.fp или dev->fp обращались или что-то с ним делали. Также есть куча других заявленных функций, связанных с Fast Path, объявленных в 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); Они экспортируются из net/core/dev.c. Но при этом **_на самом деле код всех этих функций отсутствует!_** 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); Я нашёл несколько вызовов этих функций разбросанных по коду, но реализации не нашёл. Это всё, что есть. Наконец, есть ещё один указатель на функцию, добавленный в net_device_ops сразу под fast_path_xmit: int (*ndo_xmit_commit) (struct net_device *dev); Честно говоря, я не уверен, что это связано с Fast Path, но, наверное, да? Во всяком случае, я не нашёл ни одной реализации ни ndo_fast_path_xmit, ни ndo_xmit_commit вообще. Так что либо я слеп как крот, либо MikroTik по какой-то причине оставил кучу нужного кода вне своих патчей GPL ядра. К слову, у меня сохранился набор патчей ядра от кандидата на релиз версии 6.5, и ndo_fast_path_xmit там было определено так: netdev_tx_t (*ndo_fast_path_xmit) (struct net_device *dev, struct net_device *port, void *buf); |
|
|
|
Читают тему