2

Ich verstehe nicht, was der Speicherknoten in der kzalloc_node -Funktion ist. Die Beschreibung sagt, "Zeroed Speicher von einem bestimmten Speicherknoten zuweisen." Aber was ist ein Speicherknoten? Ich schaue speziell auf einen Teil des Deadline-I/O-Schedulers (siehe unten).Was ist der Speicherknoten in kzalloc_node im Linux-Kernel

static int deadline_init_queue(struct request_queue *q, struct elevator_type *e) 
{ 
    struct deadline_data *dd; 

    ... 

    dd = kzalloc_node(sizeof(*dd), GFP_KERNEL, q->node); 

    ... 
} 

Antwort

2

Es gibt eine sehr gute Beschreibung hier:

https://www.kernel.org/doc/gorman/html/understand/understand009.html

... die Funktion alloc_pages() ruft numa_node_id(), um die logische ID des Knotens mit dem Strom verbunden sind zurückzukehren laufende CPU. Diese NID wird an _alloc_pages() übergeben, die NODE_DATA() mit der NID als Parameter aufruft.

Auf UMA-Architekturen, wird dies in bedingungslos führt in contig_page_data zurückgegeben wird aber NUMA-Architekturen setzen stattdessen ein Array bis der NODE_DATA() verwendet NID als Offset. In anderen Worten, Architekturen sind verantwortlich für die Einrichtung einer CPU-ID NUMA Speicherknoten Zuordnung.

Dies ist effektiv noch eine node-lokale Zuweisung Politik wie in 2.4 verwendet wird, aber es ist viel klarer definiert. auch

Siehe: https://en.wikipedia.org/wiki/Non-uniform_memory_access

+0

So in der Frist Scheduler Situation der dd-Zeiger wird in demselben Knoten wie der request_queue zugeordnet, richtig? – Josephus

+0

Ich konzentrierte mich auf die Frage "Was ist ein Knoten?". Aber ich glaube, die Antwort ist "Ja - Sie haben Recht". – paulsm4

Verwandte Themen