-
Notifications
You must be signed in to change notification settings - Fork 9
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Network topology model #75
Conversation
crates/network/src/topology_model.rs
Outdated
|
||
// Calculate transfer bandwidths | ||
let mut assigned = vec![false; paths.len()]; | ||
for _ in 0..paths.len() { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тут мы каждый раз мы выбираем путь с минимальным bandwidth. Это то же самое, что выбрать линк с минимальным отношением bandwidth/connections_amount и тогда любой путь, проходящий через этот линк, будет иметь минимальный bandwidth. При этом можно поддерживать множество линков, отсортированных по этому отношению, и обновлять их вдоль нового пути. Тогда итоговая асимптотика вроде получается О(суммарная длина всех путей * логарифм из-за поддержки отсортированного множества линков).
И еще можно заметить, что при добавлении нового пути эти отношения для линков только увеличиваются, поэтому когда мы нашли линк с минимальным отношением, можно строить не один случайный путь через него, а сразу все, но возможно это только усложнит реализацию без улучшения асимптотики.
Можно еще неасимптотически пооптимизировать. Например, допустим, что у нас полный граф, то есть между каждыми двумя хостами есть линк. Тогда хотелось бы, чтобы при добавлении передачи обновлялись только текущие передачи на этом линке, а не везде. В общем виде это можно сделать так -- на каждом линке запомнить множество путей через него, а при добавлении нового пути посмотреть на все линки и на пути в них, потом для всех полученных путей аналогично пройти по линкам и добавить пути с этих линков и т.д. Другими словами, найти компоненту связности в графе путей, где пути связаны когда они пересекаются. И потом пересчитывать все только для этой компоненты. Это, конечно, ничем не поможет, когда все пути проходят через какой-то один линк, но в каких-то случаях может сильно ускорить все.
b6c9d30
to
db0d6d1
Compare
d5de47d
to
6a363c3
Compare
Попробовал перенести
С новой моделью время сильно выросло в сравнении с SharedBandwidthNetwork:
С Дейкстрой результаты примерно такие же. Надо понять, где тратится время, и попробовать заоптимизировать. |
90afa76
to
b11da28
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Осталась еще оптимизация из второго абзаца первого комментария, но не факт что она сильно ускорит в общем случае, можно пока на будущее оставить.
b11da28
to
ed33145
Compare
Add FloydWarshall algorithm to resolve network topology It is turned on by default It performs much faster than previous Dijkstra algo
ed33145
to
6ea8de6
Compare
No description provided.