@@ -160,14 +160,18 @@ def generate_totals
160
160
text : v [ 'interface' ] ,
161
161
sort : v [ 'interface' ]
162
162
} ,
163
+ {
164
+ text : v [ 'driver' ] , sort : v [ 'driver' ]
165
+ } ,
163
166
{
164
167
text : t , sort : t
165
168
}
166
169
]
167
170
} . uniq
168
171
169
172
net_models = interfaces . inject ( Hash . new ( 0 ) ) { |h , v | h [ v ] += 1 ; h }
170
- net_models . sort_by { |k , v | k . first [ :sort ] } . each { |k , v |
173
+ # Sort by interface type (eth or IB) and then by driver
174
+ net_models . sort_by { |k , v | [ k . first [ :sort ] , k [ 1 ] [ :sort ] ] } . each { |k , v |
171
175
init ( data , 'net_models' , k )
172
176
data [ 'net_models' ] [ k ] [ site_uid ] += v
173
177
}
@@ -280,8 +284,11 @@ def generate_totals
280
284
generated_content += "\n == Nodes with several Ethernet interfaces ==\n "
281
285
generated_content += generate_interfaces
282
286
287
+ generated_content += "\n == Nodes with SR-IOV support ==\n "
288
+ generated_content += generate_sriov_interfaces
289
+
283
290
generated_content += "\n == Network interface models ==\n "
284
- table_columns = [ 'Type' , 'Model' ] + sites + [ 'Cards total' ]
291
+ table_columns = [ 'Type' , 'Driver' , ' Model'] + sites + [ 'Cards total' ]
285
292
generated_content += MW . generate_table ( table_options , table_columns , get_table_data ( data , 'net_models' ) )
286
293
287
294
generated_content += "\n = Storage ="
@@ -458,7 +465,7 @@ def generate_interfaces
458
465
interfaces [ '25g_count' ] = node_interfaces . select { |v | v [ 'rate' ] == 25_000_000_000 } . count
459
466
interfaces [ '10g_count' ] = node_interfaces . select { |v | v [ 'rate' ] == 10_000_000_000 } . count
460
467
interfaces [ '1g_count' ] = node_interfaces . select { |v | v [ 'rate' ] == 1_000_000_000 } . count
461
- interfaces [ 'details' ] = node_interfaces . map { |v | v [ 'device' ] + ( v [ ' name'] . nil? ? '' : '/' + v [ 'name' ] ) + ' (' + G5K . get_rate ( v [ 'rate' ] ) + ')' } . sort . join ( ', ' )
468
+ interfaces [ 'details' ] = node_interfaces . map { |v | v [ 'name' ] + ' (' + G5K . get_rate ( v [ 'rate' ] ) + ')' } . sort . join ( ', ' )
462
469
queues = cluster_hash [ 'queues' ] - [ 'admin' , 'default' , 'testing' ]
463
470
interfaces [ 'queues' ] = ( queues . nil? || ( queues . empty? ? '' : queues [ 0 ] + G5K . pluralize ( queues . count , ' queue' ) ) )
464
471
interface_add ( network_interfaces , node_uid , interfaces ) if node_interfaces . count > 1
@@ -489,6 +496,49 @@ def generate_interfaces
489
496
MW . generate_table ( table_options , table_columns , table_data )
490
497
end
491
498
499
+ def generate_sriov_interfaces
500
+ table_data = [ ]
501
+ @global_hash [ "sites" ] . sort . to_h . each { |site_uid , site_hash |
502
+ site_hash . fetch ( "clusters" ) . sort . to_h . each { |cluster_uid , cluster_hash |
503
+ network_interfaces = { }
504
+ cluster_hash . fetch ( 'nodes' ) . sort . to_h . each { |node_uid , node_hash |
505
+ next if node_hash [ 'status' ] == 'retired'
506
+ if node_hash [ 'network_adapters' ]
507
+ node_interfaces = node_hash [ 'network_adapters' ] . select { |v |
508
+ v [ 'sriov' ] and
509
+ v [ 'enabled' ] == true and
510
+ ( v [ 'mounted' ] == true or v [ 'mountable' ] == true ) and
511
+ v [ 'management' ] == false
512
+ }
513
+
514
+ interfaces = { }
515
+ interfaces [ 'details' ] = node_interfaces . map { |v | v [ 'name' ] + " (#{ v [ 'sriov_totalvfs' ] } VFs)" } . sort . join ( ', ' )
516
+ interfaces [ 'vfs_sum' ] = node_interfaces . map { |v | v [ 'sriov_totalvfs' ] } . sum
517
+ interface_add ( network_interfaces , node_uid , interfaces ) if node_interfaces . count > 0
518
+ end
519
+ }
520
+
521
+ # One line for each group of nodes with the same interfaces
522
+ network_interfaces . sort . to_h . each { |num , interfaces |
523
+ table_data << [
524
+ "[[#{ site_uid . capitalize } :Network|#{ site_uid . capitalize } ]]" ,
525
+ "[[#{ site_uid . capitalize } :Hardware##{ cluster_uid } " + "|#{ cluster_uid } " + ( network_interfaces . size ==1 ? '' : '-' + G5K . nodeset ( num ) ) + "]]" ,
526
+ num . count ,
527
+ "data-sort-value=\" #{ interfaces [ 'vfs_sum' ] } \" |#{ interfaces [ 'details' ] } "
528
+ ]
529
+ }
530
+ }
531
+ }
532
+ # Sort by site and cluster name
533
+ table_data . sort_by! { |row |
534
+ [ row [ 0 ] , row [ 1 ] ]
535
+ }
536
+
537
+ table_options = 'class="wikitable sortable" style="text-align: center;"'
538
+ table_columns = [ "Site" , "Cluster" , "Nodes" , "Interfaces (max number of Virtual Functions)" ]
539
+ MW . generate_table ( table_options , table_columns , table_data )
540
+ end
541
+
492
542
# This methods adds the array interfaces to the hash
493
543
# network_interfaces. If nodes 2,3,7 have the same interfaces, they
494
544
# will be gathered in the same key and we will have
0 commit comments