kernel thread에서 t_affinitycnt란 무엇인가요?

훌륭한녀석의 이미지

설명으로는 간단히

Quote:
t_affinitycnt Maintains CPU affinity (loose coupling to a specific processor, a best effort to keep a thread on the same CPU)

이렇게 되어있구요 코드에는
	void	(*t_startpc)(void);	/* PC where thread started */
	struct cpu *t_bound_cpu; /* cpu bound to, or NULL if not bound */
	short	t_affinitycnt;	/* nesting level of kernel affinity-setting */
	short	t_bind_cpu;	/* user-specified CPU binding (-1 if none) */

이렇게 되어 있습니다. 3번째 라인이 그 내용이네요. 이 내용은 솔라리스의 소스를 가져 왔습니다.

감이 안잡히네요. 멀티프로세서 환경을 의미하는듯 한데...
그리고 프로세서와 CPU와의 명확한 의미를 여기서는 어떤식으로 해석을 해야하는지.....

도와주세요~ ^^;

shkwon81의 이미지

여기서 CPU와 processor는 동일한 의미로 사용된 것입니다.

쓰레드에는 allocation domain 이라는 개념이 있습니다. 이 쓰레드가 어떤 CPU 집합과 결합하여 작동할 것인가의 개념이죠. (멀티 프로세서 환경을 가정하고 있습니다.)
즉, 4 CPU 머신에서 쓰레드 A는 CPU1, 2 위에서 동작한다... 뭐 이런 걸 제어하는 개념입니다. 저기 인용하신 예에 t_bind_cpu 가 있는데 이게 그거 같네요..

그리고, affinity도 비슷한 의도로 사용하는 것 같습니다. 추측이긴 하지만 대상 쓰레드를 가급적 동일한 CPU에서 동작하도록 무언가를 저장해 놓는 것이겠죠.
여기서 loose coupling이라는 말을 사용한 이유는 저렇게 어떤 알고리즘에 의해서 가급적 동일한 CPU에서 동작시키려는 "노력" 이라는 개념 같습니다.
그에 비해 allocation domain은 해당 domain의 cpu 집합에서만 동작하도록 강제합니다.

이런 기술들을 쓰는 이유는, 대형 컴퓨터 머신(멀티프로세서라 가정함)에서는 각 CPU가 메인 메모리에 접근하는 속도가 균일하지 않기 때문입니다. 우리가 흔히 보는 PC의 경우는 멀티프로세서라 하더라도 모든 메인 메모리 접근 속도가 균일하죠..

위와 같이 메모리 접근 속도가 균일하지 않도록 한 기술을 NUMA(Non-Uniform Memory Access) 라고 하는데요.. 어찌 보면 당연한 겁니다. 보통 대형 서버면 보드가 여러 개 들어가고 각 보드마다 CPU가 몇 개씩 램이 몇 개씩 꽂혀 있는데요..
보드 1에 장착된 CPU들은 보드 1에 장착된 메모리에 접근하는 게 가장 빠를 겁니다.

그래서 쓰레드 1의 메모리 사용 공간이 보드 1에 위치한 메모리 1에 올라가 있다면, 그 쓰레드를 보드 1에 위치한 CPU들에서만 동작하는 게 성능이 더 좋을 겁니다. 이를 제어하기 위해 allocation domain을 사용합니다.

그렇지만 만일 사용자가 특별히 allocation domain을 지정하지 않더라도, "어떤 알고리즘?"에 의해 가급적이면 최선의 CPU를 선택하려는 노력을 커널 자체적으로 수행할 수도 있을 겁니다. t_affinitycnt는 그런 용도로 쓰이는 게 아닐까 합니다.

그래서 저런 개념들이 쓰이는 것이겠죠. 주저리 주저리 추측만 늘어 놨군요.. (솔라리스의 커널에 대해서는 아는 바가 없으니 틀렸다고 너무 머라고 하지 마세요 ㅠㅠ)

훌륭한녀석의 이미지

답변 감사드립니다.

아침에 올렸건만 아직도 정확한 사실은 알지 못하고 shkwon81님께서 올려주신 추측(!)으로 일단 지식을 마무리 지었습니다. :P

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.