- 论坛徽章:
- 16
|
30可用积分
本帖最后由 embeddedlwp 于 2011-10-31 20:07 编辑
2.6.11- #define num_online_nodes() nodes_weight(node_online_map)
- #define nodes_weight(nodemask) __nodes_weight(&(nodemask), MAX_NUMNODES)
- static inline int __nodes_weight(const nodemask_t *srcp, int nbits)
- {
- return bitmap_weight(srcp->bits, nbits);
- }
复制代码 这个__node_weight函数是什么意思?
还有这段程序:- 1363static void __init build_zonelists(pg_data_t *pgdat)
- 1364{
- 1365 int i, j, k, node, local_node;
- 1366 int prev_node, load;
- 1367 struct zonelist *zonelist;
- 1368 nodemask_t used_mask;
- 1369
- 1370 /* initialize zonelists */
- 1371 for (i = 0; i < GFP_ZONETYPES; i++) {
- 1372 zonelist = pgdat->node_zonelists + i;
- 1373 memset(zonelist, 0, sizeof(*zonelist));
- 1374 zonelist->zones[0] = NULL;
- 1375 }
- 1376
- 1377 /* NUMA-aware ordering of nodes */
- 1378 local_node = pgdat->node_id;
- 1379 load = num_online_nodes();
- 1380 prev_node = local_node;
- 1381 nodes_clear(used_mask);
- 1382 while ((node = find_next_best_node(local_node, &used_mask)) >= 0) {
- 1383 /*
- 1384 * We don't want to pressure a particular node.
- 1385 * So adding penalty to the first node in same
- 1386 * distance group to make it round-robin.
- 1387 */
- 1388 if (node_distance(local_node, node) !=
- 1389 node_distance(local_node, prev_node))
- 1390 node_load[node] += load;
- 1391 prev_node = node;
- 1392 load--;
- 1393 for (i = 0; i < GFP_ZONETYPES; i++) {
- 1394 zonelist = pgdat->node_zonelists + i;
- 1395 for (j = 0; zonelist->zones[j] != NULL; j++);
- 1396
- 1397 k = ZONE_NORMAL;
- 1398 if (i & __GFP_HIGHMEM)
- 1399 k = ZONE_HIGHMEM;
- 1400 if (i & __GFP_DMA)
- 1401 k = ZONE_DMA;
- 1402
- 1403 j = build_zonelists_node(NODE_DATA(node), zonelist, j, k);
- 1404 zonelist->zones[j] = NULL;
- 1405 }
- 1406 }
- 1407}
复制代码 下边这部分是干什么用啊,node_load[node]数组是什么作用,为什么要加load- 1388 if (node_distance(local_node, node) !=
- 1389 node_distance(local_node, prev_node))
- 1390 node_load[node] += load;
复制代码 |
最佳答案
查看完整内容
node_load应该是每个节点的负载吧,加一个数就是把值变大,故意把负载值变大的话就会避免这个节点的真正负载过大。这个方面,我觉得Bo Liu 应该更清楚,你可以向他请教。
|