<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>박사라이팅</title>
    <link>https://johnkims2.tistory.com/</link>
    <description>대학원생</description>
    <language>ko</language>
    <pubDate>Sun, 12 Apr 2026 20:56:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>박사님공부하셔야죠</managingEditor>
    <image>
      <title>박사라이팅</title>
      <url>https://tistory1.daumcdn.net/tistory/5718178/attach/ca41aa3be635480aa3da0c660b6f9846</url>
      <link>https://johnkims2.tistory.com</link>
    </image>
    <item>
      <title>추천시스템이란?</title>
      <link>https://johnkims2.tistory.com/60</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;How can we help users get access to relevant items?&lt;/b&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(어떻게 하면 사람들이 관련된 항목에 쉽게 노출될 수 있을까?)&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;추천시스템이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqt5qs/btsNKXnKXg6/plVa7NARgDnCmpwEDhF890/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqt5qs/btsNKXnKXg6/plVa7NARgDnCmpwEDhF890/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqt5qs/btsNKXnKXg6/plVa7NARgDnCmpwEDhF890/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcqt5qs%2FbtsNKXnKXg6%2FplVa7NARgDnCmpwEDhF890%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;318&quot; data-origin-width=&quot;651&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용자 개인에게 맞춤형 아이템이나 정보를 자동으로 제안하는 기술&lt;/b&gt;&lt;/p&gt;
&lt;p data-end=&quot;282&quot; data-start=&quot;106&quot; data-ke-size=&quot;size16&quot;&gt;이 기술은 넷플릭스, 인스타그램 등 다양한 어플리케이션에 적용되고 있음. 예를 들어, 넷플릭스는 소비자가 흥미로워할 만한 영화나 드라마를 추천 목록에 노출시켜 소비자가 관심 있는 작품을 선택하도록 유도함. 이는 소비자에게는 새로운 콘텐츠를 발견할 수 있는 기회를 제공하고, 넷플릭스에는 고객 확보라는 이점을 가져옴.&lt;/p&gt;
&lt;p data-end=&quot;282&quot; data-start=&quot;106&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;405&quot; data-start=&quot;284&quot; data-ke-size=&quot;size16&quot;&gt;그러나 개인에게 최적화된 아이템을 추천하는 것은 쉬운 과제가 아님. 소비자가 아직 보지 않은 아이템, 좋아할 가능성이 높은 아이템, 주변 친구들이 많이 본 아이템 등 다양한 요소를 함께 고려해야 하는 복잡성이 존재함.&lt;/p&gt;
&lt;p data-end=&quot;405&quot; data-start=&quot;284&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;542&quot; data-start=&quot;407&quot; data-ke-size=&quot;size16&quot;&gt;특히 추천을 위해서는 소비자의 선호를 어느 정도 파악해야 하지만, 현실에서는 데이터가 매우 희소한 경우가 많음. 예를 들어 넷플릭스 초기 가입자는 드라마나 영화를 클릭한 기록이 없기 때문에, 이들에게 적절한 추천을 제공하는 데 어려움이 따름. 또한 개인정보 보호 이슈로 인해 기업이 소비자의 선호 데이터를 자유롭게 수집하고 활용하는 데 제한이 존재함.&lt;/p&gt;
&lt;p data-end=&quot;542&quot; data-start=&quot;407&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;542&quot; data-start=&quot;407&quot; data-ke-size=&quot;size16&quot;&gt;결론적으로 추천 시스템은 &lt;b&gt;&lt;u&gt;Sparse한(희소한) 데이터를 바탕으로 사용자의 선호를 예측하는 기술이며, 예측 정확도가 높을수록 기업의 영업 성과가 향상되는 효과를 기대할 수 있음.&lt;/u&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추천시스템은 보통 top-k recommendation과 rating임. 모델도 정말 많아서 Neighborhood-based Collaborative Filtering부터 차근차근 리뷰할 예정임.&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/추천시스템</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/60</guid>
      <comments>https://johnkims2.tistory.com/60#entry60comment</comments>
      <pubDate>Mon, 28 Apr 2025 20:51:16 +0900</pubDate>
    </item>
    <item>
      <title>CXL Switch</title>
      <link>https://johnkims2.tistory.com/58</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;CXL Switch란??&lt;br&gt;&lt;br&gt;CXL protocol을 기반으로 여러 CXL device와 host를 연결하는 HW device임. PCIe switch와 유사하지만, CXL의 cache coherency와 memory expander을 지원하는 기능이 추가됨. &lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;918&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1CoYh/btsLFwrYQ2d/zx8WYlMOHm8z7UkWusurEK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1CoYh/btsLFwrYQ2d/zx8WYlMOHm8z7UkWusurEK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1CoYh/btsLFwrYQ2d/zx8WYlMOHm8z7UkWusurEK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1CoYh%2FbtsLFwrYQ2d%2Fzx8WYlMOHm8z7UkWusurEK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;804&quot; height=&quot;918&quot; data-origin-width=&quot;804&quot; data-origin-height=&quot;918&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;Host와 Device간의 연결을 Virtual port로 연결함. 여러 Host는 각자의 Address Space를 가지고 있으며, CXL device는 Single Logical Device (SLD), Multi Logical Device (MLD)로 되어 있음. PCIe Device도 사용 가능. 대신에 CXL protocol이 아닌 PCIe protocol을 사용. &lt;br&gt;&lt;br&gt;SLD는 하나의 physical device가 단일의 logical device로 host가 인식되는 경우로 하나의 address space로 인식. MLD는 하나의 physical device가 여러 logical device로 host가 여러 space로 인식해서 독립적인 device로 인식함. &lt;br&gt;&lt;br&gt;MLD는 용량이 큰 하나의 Device Attached Memory (DAM)임. Logical Device (LD)는 각자의 partition이 있음. CXL 2.0에서는 MLD가 16 partition으로 쪼개질 수 있음. DAM이 16TB이면, 하나의 LD는 1TB임. MLD Device는 FM-LD (Fabric Managed LD)가 있어 16bit의 LD-ID를 가지고 사용가능한 LD를 정의함. Host는 FM-LD가 visible하지 않음. 대신 CXL Switch에 있는 Fabric Manager Programs Binding이 visible하여, host에 맞는 LD를 binding해줌. 당연하듯, 각 LD는 각자의 partition에만 accessible함. &lt;br&gt;&lt;br&gt;이런 Switch가 있어서 여러 Host가 여러 Device를 access 할 수 있으며, cache coherency가 보장되기 때문에 cacheable함. &lt;/p&gt;</description>
      <category>공부/CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/58</guid>
      <comments>https://johnkims2.tistory.com/58#entry58comment</comments>
      <pubDate>Mon, 6 Jan 2025 21:24:37 +0900</pubDate>
    </item>
    <item>
      <title>CXL Type-3 Device Data Flow</title>
      <link>https://johnkims2.tistory.com/57</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;CXL type-3 device는 memory expander처럼 cxl.io와 cxl.mem protocol만 가능한 cxl device임. &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Host to Device Config/MMIO Access&lt;/b&gt;&lt;br&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;다른 점은 Direct Memory Access (DMA)가 device에 없음. 왜??? 당연히, Memory Expander와 같은 type-3 device에서는 device to host access가 없기 때문임. &lt;br&gt;&lt;br&gt;또 Device Attached Memory (DAM)은 Host에서 cacheable한 memory임. PCIe와 다름. 왜??? PCIe Deivce는 cache coherency를 보장하지 않음. CXL은 보장하기 때문에 가능함. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;779&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR6qtI/btsLFhBLLF8/a6SYPWRGeUn6QhQFRddNW0/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR6qtI/btsLFhBLLF8/a6SYPWRGeUn6QhQFRddNW0/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR6qtI/btsLFhBLLF8/a6SYPWRGeUn6QhQFRddNW0/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR6qtI%2FbtsLFhBLLF8%2Fa6SYPWRGeUn6QhQFRddNW0%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1404&quot; height=&quot;779&quot; data-origin-width=&quot;1404&quot; data-origin-height=&quot;779&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;br&gt;먼저 Base Address Register가 있는 Device의 Config/MMIO로 host가 접근함. 이 때, CXL.io protocol을 사용해서 접근함. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Host to Device Attached Memory (DAM) Access&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3yehb/btsLD1s5qk3/hTDdAg5etY8mkrmpuYkbGK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3yehb/btsLD1s5qk3/hTDdAg5etY8mkrmpuYkbGK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3yehb/btsLD1s5qk3/hTDdAg5etY8mkrmpuYkbGK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3yehb%2FbtsLD1s5qk3%2FhTDdAg5etY8mkrmpuYkbGK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1340&quot; height=&quot;706&quot; data-origin-width=&quot;1340&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;Host의 IO MMU와 Bridge는 사용하지 않음. 왜??? Device에서 DMA가 없어 Device to Host access가 일어나지 않기 때문에, 굳이 Address Translation할 필요가 없음. &lt;br&gt;&lt;br&gt;위 과정으로 Host to DAM access를 진행함. 이 때 CXL.mem protocol을 함. 조금 전 설명했듯이, DAM은 cacheable하기 때문에 Host cache에 저장할 수 있음. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;DMA가 있는 type-3 CXL Deivce (Hybird)&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;CXL document에 없는 Hybrid type-3 Device가 아래와 같음. DMA가 있어서 Device가 Host로 access가능. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw4WjG/btsLE2rkbi3/QVlGQlyamVjRKDH4NFOkYk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw4WjG/btsLE2rkbi3/QVlGQlyamVjRKDH4NFOkYk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw4WjG/btsLE2rkbi3/QVlGQlyamVjRKDH4NFOkYk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw4WjG%2FbtsLE2rkbi3%2FQVlGQlyamVjRKDH4NFOkYk%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1136&quot; height=&quot;896&quot; data-origin-width=&quot;1136&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;PCIe와 비슷하면서도 사뭇다름. DAM이 cacheable한다는 것이 크게 다른 점. &lt;/p&gt;</description>
      <category>공부/CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/57</guid>
      <comments>https://johnkims2.tistory.com/57#entry57comment</comments>
      <pubDate>Mon, 6 Jan 2025 21:02:28 +0900</pubDate>
    </item>
    <item>
      <title>PCIe Device 예시</title>
      <link>https://johnkims2.tistory.com/56</link>
      <description>&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;PCIe Device가 Host Processor와 communication하는 절차를 설명하고자 함. Private Device Memory가 없을 때, 상황을 설명.&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Host to Device Config/MMIO Access&lt;/b&gt;&lt;/h2&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;487&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhzRBt/btsLEbBqVJK/6kKmCdrpPbPcWPbiYE9nM0/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhzRBt/btsLEbBqVJK/6kKmCdrpPbPcWPbiYE9nM0/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhzRBt/btsLEbBqVJK/6kKmCdrpPbPcWPbiYE9nM0/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhzRBt%2FbtsLEbBqVJK%2F6kKmCdrpPbPcWPbiYE9nM0%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;779&quot; height=&quot;487&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;487&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;Host Processor가 Device의 Config/MMIO space에 접근함. 이 때, PCIe Transaction 사용. BAR (Base Address Register)을 사용하여, MMIO space에 접근. &lt;br&gt;&lt;br&gt;정리하자면, 이 PCIe Transaction을 통한 Host to Device Access로, Device의 Config Space와 MMIO space에 communication함. &lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Device to Host MMU Access&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;569&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qXo4h/btsLDHgsUO7/AdNdKtcJdkfOleiQOcc9cK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qXo4h/btsLDHgsUO7/AdNdKtcJdkfOleiQOcc9cK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qXo4h/btsLDHgsUO7/AdNdKtcJdkfOleiQOcc9cK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqXo4h%2FbtsLDHgsUO7%2FAdNdKtcJdkfOleiQOcc9cK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;986&quot; height=&quot;569&quot; data-origin-width=&quot;986&quot; data-origin-height=&quot;569&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;Device가 Host에 Access하기 위해서는 Address Translation이 필요함. 이 때, Device가 Address Translation Request를 보내는데, Untranslated Address를 Host에게 보냄. Host에서는 Translated된 Packet을 다시 Device에게 줌. 이를 통해 Device는 Host에게서 security admission을 받음. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Device to Host with DMA&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;587&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRWMUU/btsLE3iw9pi/EcneZYReVElEQKXqXycqAk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRWMUU/btsLE3iw9pi/EcneZYReVElEQKXqXycqAk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRWMUU/btsLE3iw9pi/EcneZYReVElEQKXqXycqAk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRWMUU%2FbtsLE3iw9pi%2FEcneZYReVElEQKXqXycqAk%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;863&quot; height=&quot;587&quot; data-origin-width=&quot;863&quot; data-origin-height=&quot;587&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;이제 DMA을 통해 Host에 있는 data을 Device로 받아야함. Host Memory에 Read와 Write하기 위해 위와 같은 과정을 거침. PCIe Device는 Cache가 없음. PCIe protocol에서는 Cache Coherency가 없기 때문임. Host Memory는 Cachable하기 때문에, Host Cache가 존재. 먼저 DMA Engine에서 MRd, MWr을 HCOH (Coherency Bridge)에 보내고, HCOH는 해당하는 cache line이 Modified상태인지 확인. Modified일 경우, Host Memory보다 Host Cache에 있는 data가 최신이므로, Host Cache에서 data을 device가 받을 수 있음. 또한, HCOH에서 Host Cache의 Snoop할 수 있어, Cache Coherency를 보장할 수 있음. Packet에서 NS bit가 있는데, NS bit가 set되면, HCOH에서 snoop없이 무조건 directly하게 Host Memory으로부터 Device가 Data을 받음. 이를 통해 snoop에 의한 latency가 없어짐. &lt;br&gt;&lt;br&gt;이제 Private Device Memory (PDM)이 있을 때 과정을 설명하고자 함. 근데 위와 거의 비슷.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Host to Device Config/MMIO Access&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;Host가 Device의 Config와 MMIO로 접근할 때 아래와 같음. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dA0BM2/btsLFMORF9C/UYe7QGO1D7hZcqKKUPUywK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dA0BM2/btsLFMORF9C/UYe7QGO1D7hZcqKKUPUywK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dA0BM2/btsLFMORF9C/UYe7QGO1D7hZcqKKUPUywK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdA0BM2%2FbtsLFMORF9C%2FUYe7QGO1D7hZcqKKUPUywK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;809&quot; height=&quot;545&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;Private Device Memory (PDM)은 Host Memory의 extension이 아님. 그렇다고 access가 불가능한 것은 절대 아님. 이 Host to Device Config/MMIO Access는 PDM 없을 때와 거의 같지만, PDM에 BAR가 있어 PDM에 access하는 과정이 있음. 그래야 PDM에 read나 write할 수 있음. 똑같이 MMIO space는 Host Cache에 not cacheable함. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Device to Host MMU Access&lt;/b&gt;&lt;/h2&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2SL57/btsLE2Smtyz/PkQaQNlOdbhebnO90gGfdK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2SL57/btsLE2Smtyz/PkQaQNlOdbhebnO90gGfdK/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2SL57/btsLE2Smtyz/PkQaQNlOdbhebnO90gGfdK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2SL57%2FbtsLE2Smtyz%2FPkQaQNlOdbhebnO90gGfdK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;930&quot; height=&quot;499&quot; data-origin-width=&quot;930&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;이것도 PDM없을 때와 똑같음. Address Translation 및 Grant를 받을 수 있음. &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Device &amp;amp; Host Access with DMA&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;br&gt;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;501&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tj2Ba/btsLFPredq8/VQ4MYWGrcxDBDu0MKhMJXk/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tj2Ba/btsLFPredq8/VQ4MYWGrcxDBDu0MKhMJXk/tfile.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tj2Ba/btsLFPredq8/VQ4MYWGrcxDBDu0MKhMJXk/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftj2Ba%2FbtsLFPredq8%2FVQ4MYWGrcxDBDu0MKhMJXk%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;809&quot; height=&quot;501&quot; data-origin-width=&quot;809&quot; data-origin-height=&quot;501&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;Device to PDM이라는 과정이 추가됨. 이 과정은 PCIe Link을 타지 않음. 자기 자신의 PDM을 access하기 때문임. &lt;/p&gt;</description>
      <category>공부/CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/56</guid>
      <comments>https://johnkims2.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 6 Jan 2025 20:41:58 +0900</pubDate>
    </item>
    <item>
      <title>CXL protocol &amp;amp; Device type</title>
      <link>https://johnkims2.tistory.com/55</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CXL protocol&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CXL protocol에는 3가지가 있음.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;CXL.io, CXL.cache, CXL.mem&lt;/b&gt;&lt;/u&gt;으로 각자 역할이 다름.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CXL.io은 PCIe기반으로 device discovery, status reporting, virtual to physical address translation, direct memory access (DMA)에 사용됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CXL.cache는 device가 system memory를 caching할 때 사용됨.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CXL.mem은 CPU와 다른 CXL device가 device memory을 cachable memory (HDM)처럼 접근할 때 사용됨. 하나의 host memory처럼 보임.&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CXL type&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NVm89/btsLCGIYmAH/YabHQmSW0LKfwDliTIZy4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NVm89/btsLCGIYmAH/YabHQmSW0LKfwDliTIZy4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NVm89/btsLCGIYmAH/YabHQmSW0LKfwDliTIZy4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNVm89%2FbtsLCGIYmAH%2FYabHQmSW0LKfwDliTIZy4k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;877&quot; height=&quot;278&quot; data-origin-width=&quot;877&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Type-1은 smart NICs와 같은 가속기를 말함. PCIe형태의 DMA transfer로 coherency 관리. CXL.io와 CXL.cache 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Type-2은 GP-GPUs와 FPGAs같이 local memory가 있어, cacheable system memory에 mapping될 수 있는 가속기를 말함. system memory을 caching할 수 있음. 따라서, CXL.io, CXL.cache, CXL.mem 사용.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Type-3은 CXL.io와 CXL.mem을 사용함. cost, power, pin-efficient한 DDR channel추가 등을 할 수 있음.&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/55</guid>
      <comments>https://johnkims2.tistory.com/55#entry55comment</comments>
      <pubDate>Fri, 3 Jan 2025 14:19:47 +0900</pubDate>
    </item>
    <item>
      <title>CXL 이후와 이전</title>
      <link>https://johnkims2.tistory.com/54</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GJgaw/btsLDk6eUAh/Wy0bWZbRLNZjm6JcgYI0Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GJgaw/btsLDk6eUAh/Wy0bWZbRLNZjm6JcgYI0Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GJgaw/btsLDk6eUAh/Wy0bWZbRLNZjm6JcgYI0Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGJgaw%2FbtsLDk6eUAh%2FWy0bWZbRLNZjm6JcgYI0Nk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;886&quot; height=&quot;405&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;405&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;CXL (Compute Express Link) 이전에는 PCIe (Peripheral Component Interconnect Express)를 사용하여, GPU, GP-GPUs, FPGA 등의 다양한 가속기와 storage를 연결하여 사용하였음. &lt;br /&gt;DDR (Double Data Rate)로 CPU와 연결해서 병렬 인터페이스를 사용했었음. &lt;br /&gt;&lt;br /&gt;하지만, 광범위한 종류 및 개수의 device를 관리하기에는 한계가 있음. 아래가 몇 가지 한계점임.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Challenge 1 : Coherent Access to System and Device Memory &lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;이전에는 DDR를 통해, System memory가 사용되고, CPU cache 계층적 구조로 캐싱이 가능하였음. 반대로, PCIe device에서 system memory로 접근할 대, non-coherent reads/wirtes가 발생함. &lt;b&gt;PCIe device가 system memory를 캐시할 수 없어서&lt;/b&gt;, locality를 활용할 수 없고, operation을 연속으로 처리 불가능함. 매번 device에서 system memory로 read/write할 때 host의 RC (root complex)를 통해서 PCIe는 CPU cache와 coherency를 지켜야 함. 비슷하게, PCIe device에 부착된 memory는 host로 부터 non-coherently 접근됨. 이 때문에 device memory는 캐싱 가능한 system address space에 mapping을 할 수 없음. &lt;br /&gt;&lt;br /&gt;이러한 non-coherent 접근은 I/O operation에는 잘 작동함. 문제는 가속기임. &lt;b&gt;&lt;u&gt;전체 data를 system memory로 부터 가속기에 이동시켜야 하고 동작해야함. 이 때, main memory에 다시 data가 이동하기 전에 마쳐야 하고 CPU와 가속기 사이에 동시 접근을 맞기 위해 software가 필요하게 됨&lt;/u&gt;&lt;/b&gt;. 이 같은 &lt;b&gt;data 이동은 AI, ML (Machine Learning), NICs (Network Interface Cards)에 치명적인데, device가 device-local cache를 사용하여 CPU와 동시에 동일한 data에 접근&lt;/b&gt;하려 하고 data 전체를 이동시키지 않기 때문임. &lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Challenge 2 : &lt;/b&gt;&lt;b&gt;Memory Scalability&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;막대한 계산량을 포괄하기 위해 Memory 용량과 대역폭을 늘리려 요즘 사력을 다하고 있음. 근데, DDR memory는 이러한 요구에 적합하지 못함. CPU당 대역폭이 낮기 때문임. 병렬 DDR interface의 pin-inefficiency (데이터를 전송하기 위해 많은 핀이 필요하지만, 효율적으로 사용되지 않아 HW complexity 및 power 소모 증가) 때문임. DDR channel을 더해서 scaling up을 하더라도 문제가 있음. PCIe는 DDR보다 적은 pin으로도 같은 대역폭을 낼 수 있어서 그나마 나음. PCIe는 근데, coherency를 지원하지 않고 device에 부착된 memory를 coherent memory space에 mapping할 수 없음. 그러므로, PCIe는 DDR을 대채할 수 없음. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Challenge 3 : &lt;/b&gt;&lt;b&gt;Memory and Compute Inefficiency Due to Stranding&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;오늘날 datacenter는 활용되지 못하는 resource 때문에, 비효율적임. memory와 같은 resource는 idle capacity가 남아 있을 때 활용되지 못하고 다른 compute와 같은 다른 resource는 fully used됨. compute, memory와 I/O device가 하나의 server에서 동작하는 것이 주요 원인임. 결과적으로 각 server는 memory와 가속기를 많이 공급받아서, 최적의 capacity demands를 다룰 수 있도록 해야함. 하지만, server은 memory가 사용되지 않은 채로 종종 남을 것임. 이런 활용되지 않은 memory는 power, cost, sustainability 등 다양한 부분에서 low resource utilization을 유발함.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Challenge 4 : &lt;/b&gt;&lt;b&gt;Fine-grained Data Sharing In Distributed Systems&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분산 시스템에서 fine-grained synchronization을 주로 의존함.&amp;nbsp; 더 상세한 단위로 data를 공유하기 때문에, datacenter에서 communication delay가 큼.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;&lt;b&gt;The role of CXL&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 4가지 단점을 해결할 수 있는 CXL.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;301&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tRV6b/btsLCHnxJ1V/ZCO5BI8ex9ZakiyyCv5ZfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tRV6b/btsLCHnxJ1V/ZCO5BI8ex9ZakiyyCv5ZfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tRV6b/btsLCHnxJ1V/ZCO5BI8ex9ZakiyyCv5ZfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtRV6b%2FbtsLCHnxJ1V%2FZCO5BI8ex9ZakiyyCv5ZfK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;885&quot; height=&quot;301&quot; data-origin-width=&quot;885&quot; data-origin-height=&quot;301&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;CXL 1.0&lt;/b&gt;&lt;/u&gt;은 coherency와 memory semantic 중 하나를 골라서 할 수 있음. CXL은 custom link와 transaction layer를 사용하여 remote socket memory access보다 더 적은 latency를 가짐. Challenge 1과 2를 해결 가능.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;CXL 2.0&lt;/b&gt;&lt;/u&gt;은 Challenge 3을 multiple host에서 resource pooling을 하여 해결. CXL switch를 활용하여 여러개의 device를 pooling함. Pooling 덕분에 underutilization이 감소.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;&lt;b&gt;CXL 3.0&lt;/b&gt;&lt;/u&gt;은 Challenge 3을 해결하는데, CXL switch가 더 많이 들어감. pooling 및 resource간의 sharing이 가능하여, Challenge 4를 해결.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/54</guid>
      <comments>https://johnkims2.tistory.com/54#entry54comment</comments>
      <pubDate>Fri, 3 Jan 2025 13:48:39 +0900</pubDate>
    </item>
    <item>
      <title>CXL Port Layered Architecture</title>
      <link>https://johnkims2.tistory.com/53</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;CXL에서는 여러 Layer가 Data Packet을 송신 및 수신하여 분해, 오류 검증을 단계별로 진행함.&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;610&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csqM7O/btsLtWlmmzu/ki7E5tr61lehyAoM7OxYfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csqM7O/btsLtWlmmzu/ki7E5tr61lehyAoM7OxYfk/img.png&quot; data-alt=&quot;CXL Layer Architecture&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csqM7O/btsLtWlmmzu/ki7E5tr61lehyAoM7OxYfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsqM7O%2FbtsLtWlmmzu%2Fki7E5tr61lehyAoM7OxYfk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;479&quot; data-origin-width=&quot;485&quot; data-origin-height=&quot;610&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CXL Layer Architecture&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CXL Transaction Layer&lt;/b&gt;에서는 managing 담당.&lt;br&gt;&lt;b&gt;CXL Link Layer&lt;/b&gt;에서는 Transaction를 받고 flit으로 바꿈.&lt;br&gt;&lt;b&gt;CXL ARB/MUX Layer&lt;/b&gt;에서는 .io, .cache, .mem 프로토콜 통합.&lt;br&gt;&lt;b&gt;Flex Bus Physical Layer&lt;/b&gt;에서는 flit을 송신 및 수신.&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Transaction Layer&lt;br&gt;&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CXL.io&lt;/b&gt; &lt;b&gt;(IO side)&lt;/b&gt; 지원하여 ATS extension, Deferred Writes, Vendor Defined Message등 CXL 성능을 높임.&lt;br&gt;&lt;b&gt;CXL.mem&lt;/b&gt;, &lt;b&gt;CXL.cache&lt;/b&gt; &lt;b&gt;(Cache &amp;amp; Mem side)&lt;/b&gt; protocol 지원함.&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;처음부터 끝까지, CXL.mem과 CXL.cache transaction을 tracking함.&lt;/li&gt;&lt;li&gt;tracking할 때, tag (16 bits)와 CQID &amp;amp; UQID (12 bits)을 사용.&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Link Layer&lt;br&gt;&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;IO filt (IO side), &lt;/b&gt;&lt;b&gt;cache 및 memory flit (Cache &amp;amp; Mem side)&lt;/b&gt;을 만듦.&lt;br&gt;TLP와 DLLP를 Flit으로 만듦.&amp;nbsp;&lt;br&gt;Flow Control 및 ACK, NACK Error Detection, Correction 가능.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/p&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;ARB/MUX Layer&lt;br&gt;&lt;/b&gt;&lt;/h2&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
 &lt;li&gt;&lt;b&gt;어느 flit을 보낼지 결정.&lt;/b&gt; 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;CXL.io (IO side)와 CXL.cache 및 CXL.mem (Cache &amp;amp; Mem side)에서 만든 packet을 동적으로 선택함.&amp;nbsp;&lt;/li&gt; 
   &lt;li&gt;이 때, 두 protocol사이에 누구를 고를 것인지는 Weighted Round Robin Arbitration 사용.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;32 GT/s로 PCIe 5.0 PHY에 Packet이 송신됨.&lt;/li&gt; 
 &lt;li&gt;&lt;b&gt;virtual Link State Machines (vLSM)&lt;/b&gt;로 송수신 관리. 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;CXL.io LL와 CXL.cache/mem LL두 Link Layer의 protocol로 부터의 request를 다룸.&amp;nbsp;&lt;/li&gt; 
   &lt;li&gt;ARB/MUX Layer Link Management Packets (ALMP) Flits는 두 link의 vLSM 사이의 communication을 위하여 쓰임.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;br&gt;&lt;br&gt;Logical Physical Layer&lt;br&gt;&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;Byte Striping, 8b/10b, 128b/130b, Scrambling 담당.&lt;br&gt;이를 통해 아래와 같은 것을 할 수 있음.&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;&lt;b&gt;CXL.io Flits, CXL.cache/mem Flits, ALMP Flits, NULL Flits&lt;/b&gt; 앞에 &lt;b&gt;Protocol ID&lt;/b&gt;를 추가 가능.&lt;/li&gt;&lt;li&gt;송신할 다른 Flit이 없으면 NULL flit 삽입.&lt;/li&gt;&lt;li&gt;Latency Optimized Mode로 설정 가능.&lt;/li&gt;&lt;li&gt;Link Training와 LTSSM 수정을 할 수 있음.&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Flits (CXL Native Packets)&lt;br&gt;&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;Flit은 68B로 구성되어 있음. (Protocol ID + Flit Payload + CRC or 0s)&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;65&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kEqwr/btsLwHtnscX/00y35ik3VDNkB0O9BjL8tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kEqwr/btsLwHtnscX/00y35ik3VDNkB0O9BjL8tK/img.png&quot; data-alt=&quot;Flit 구성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kEqwr/btsLwHtnscX/00y35ik3VDNkB0O9BjL8tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkEqwr%2FbtsLwHtnscX%2F00y35ik3VDNkB0O9BjL8tK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;675&quot; height=&quot;65&quot; data-origin-width=&quot;675&quot; data-origin-height=&quot;65&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Flit 구성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;unique한 Protocol ID로 4개의 Flit type를 나타냄&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
 &lt;li&gt;CXL.io Flits (TLPs 와 DLLPs가 Flit payload안에서 전송됨)&lt;/li&gt; 
 &lt;li&gt;CXL.cache/CXL.mem Flits 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;다양한 format으로된 Protocol Flits&lt;/li&gt; 
   &lt;li&gt;All-Data Flits&lt;/li&gt; 
   &lt;li&gt;Control Flits&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;ALMP (ARM/MUX Layer Link Management Packets) Flits&lt;/li&gt; 
 &lt;li&gt;NULL Flits&amp;nbsp;&lt;/li&gt; 
&lt;/ul&gt;</description>
      <category>공부/CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/53</guid>
      <comments>https://johnkims2.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 24 Dec 2024 16:30:42 +0900</pubDate>
    </item>
    <item>
      <title>CXL 이란 무엇일까</title>
      <link>https://johnkims2.tistory.com/52</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CXL (Compute Express Link)란?&lt;/b&gt;&lt;/h2&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EcXZm/btsLrb2ZNGS/MJWEjmakvtrJxBPqKAYx50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EcXZm/btsLrb2ZNGS/MJWEjmakvtrJxBPqKAYx50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EcXZm/btsLrb2ZNGS/MJWEjmakvtrJxBPqKAYx50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEcXZm%2FbtsLrb2ZNGS%2FMJWEjmakvtrJxBPqKAYx50%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;591&quot; height=&quot;397&quot; data-origin-width=&quot;591&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;고성능 컴퓨팅 시스템에서 processor와 다양한 device(가속기, memory expansion, smart I/O device) 간의 &lt;b&gt;&lt;u&gt;표준화된 high-speed interconnect&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;주로 &lt;b&gt;&lt;u&gt;PCIe 기반&lt;/u&gt;&lt;/b&gt; (PCIe 5.0이며 32.0 GT/s, 64.0 GT/s의 data 전송 속도를 가지는 x16, x8, x4 link width를 제공)&lt;/li&gt;&lt;/ul&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CXL에서 사용하는 중요한 3가지 protocol&lt;/b&gt;&lt;/h2&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
 &lt;li&gt;&lt;u&gt;&lt;b&gt;CXL의 transaction layer에서는 3가지 protocol 제공&lt;/b&gt;&lt;/u&gt; 
  &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
   &lt;li&gt;&lt;b&gt;CXL.io&amp;nbsp;&lt;/b&gt; 
    &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
     &lt;li&gt;PCIe 5.0기반으로 device를 발견&lt;/li&gt; 
     &lt;li&gt;Configuration 진행&lt;/li&gt; 
     &lt;li&gt;초기화 진행&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;b&gt;CXL.cache&lt;/b&gt; 
    &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
     &lt;li&gt;CXL device (ex. memory expander) 가 host processor의 memory에 access할 수 있도록 만듦&lt;/li&gt; 
     &lt;li&gt;cache coherence를 관리&amp;nbsp;&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
   &lt;li&gt;&lt;b&gt;CXL.mem&lt;/b&gt; 
    &lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt; 
     &lt;li&gt;host가 device에 부착된 memory (memory expander)에 접근할 수 있도록 함&lt;/li&gt; 
     &lt;li&gt;이때 load/store command 사용&lt;/li&gt; 
    &lt;/ul&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CXL Device의 3가지 type&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type-1 device&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;Smart NIC처럼 DDR memory와의 통신을 하기 위한 CXL.io, CXL.cache 사용&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type-2 device&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;GPU, ASIC, FPGA가 해당&lt;/li&gt;&lt;li&gt;CXL.io, CXL.cache, CXL.mem 사용하여 processor와 memory를 공유하고 같은 cache domain에서 다양한 workload의 성능을 개선&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Type-3 device&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;CXL.io와 CXL.mem을 사용하여 memory expansion과 pooling을 함&lt;/li&gt;&lt;li&gt;&lt;b&gt;DRAM 용량 확보 가능&lt;/b&gt;, &lt;b&gt;memory 대역폭 향상&lt;/b&gt;, DRAM slot 사용없이 &lt;b&gt;비휘발성 메모리 추가&lt;/b&gt; 가능&lt;/li&gt;&lt;li&gt;high-speed, low-latency storage로 &lt;b&gt;DRAM을 보완하는 기능&lt;/b&gt;을 가짐&lt;/li&gt;&lt;li&gt;거의 많이 사용됨&lt;/li&gt;&lt;/ul&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CXL을 왜 사용할까&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CXL 등장 전&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;PCIe로 데이터 전송&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;u&gt;Cache Coherence 문제 발생&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;CPU 메모리 접근이 어려워 별도의 &lt;b&gt;&lt;u&gt;DMA control&lt;/u&gt;&lt;/b&gt;이 필요하였음&lt;/li&gt;&lt;li&gt;데이터 복제가 비번해서 &lt;b&gt;&lt;u&gt;latency 증가 및 resource 낭비 발생&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;device간 메모리 공유가 비효율적임&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;CXL 등장 후&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;PCIe기반이지만, protocol을 통해 &lt;b&gt;&lt;u&gt;cache coherency와 memory share가능&lt;/u&gt;&lt;/b&gt;&lt;/li&gt;&lt;li&gt;latency 감소, 효율적인 interconnect 생성 가능&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;결국은 cache coherence 문제를 CXL이 잘 다뤄서 성능 부분에서 극대화 되는 듯한 느낌&lt;br&gt;&lt;br&gt;PCIe의 TLP (Transaction Layer Packet)은 4KB payload size를 지원&lt;br&gt;CXL은 더 작은 64B Flit payload size를 지원하기 때문에, 데이터 전송 및 수신 했을 때 처리 하는 과정이 짧음&lt;br&gt;이에 CXL이 PCIe와 비슷한 대역폭을 가지면서 latency는 작음&lt;br&gt;&amp;nbsp;&lt;br&gt;CXl의 Flex Bus Port로 CXL device가 아닌 PCIe device도 지원함&lt;/p&gt;&lt;hr data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot;&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CXL VERSION (1.0, 2.0, 3.0)&lt;/b&gt;&lt;/h2&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;426&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BCYJg/btsLrLqweM5/1rdYGK2k3KnAKWlziKUVzK/tfile.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BCYJg/btsLrLqweM5/1rdYGK2k3KnAKWlziKUVzK/tfile.jpg&quot; data-alt=&quot;CXL 1.1과 2.0 비교. CXL switch로 memory pooling 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BCYJg/btsLrLqweM5/1rdYGK2k3KnAKWlziKUVzK/tfile.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBCYJg%2FbtsLrLqweM5%2F1rdYGK2k3KnAKWlziKUVzK%2Ftfile.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;426&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;426&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CXL 1.1과 2.0 비교. CXL switch로 memory pooling 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;br&gt;&lt;br&gt;CXL 1.0 (2019년 발표)&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;CXL protocol 갖춤&lt;/li&gt;&lt;li&gt;우리가 잘 아는 CXL&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;CXL 2.0 (2020년 발표)&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;1.0에서 기능 추가&lt;/li&gt;&lt;li&gt;메모리 풀링 : 여러 CPU가 동일한 메모리 리소스를 공유할 수 있도록 지원&lt;/li&gt;&lt;li&gt;메모리 보안 : 데이터 암호화 및 보안 기능 강화&lt;/li&gt;&lt;li&gt;Hot-plug 지원 : 동적 장치 연결/해제 기능&lt;/li&gt;&lt;li&gt;CXL switch 지원 : device가 여러 개 일 때 필요함&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;428&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7KHMM/btsLs2ruA14/spz6aaCULyYEpZKxTmTtgK/tfile.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7KHMM/btsLs2ruA14/spz6aaCULyYEpZKxTmTtgK/tfile.png&quot; data-alt=&quot;CXL 3.0으로 Fabric 형성. 많은 host processor가 device를 효율적으로 interconnect함.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7KHMM/btsLs2ruA14/spz6aaCULyYEpZKxTmTtgK/tfile.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7KHMM%2FbtsLs2ruA14%2Fspz6aaCULyYEpZKxTmTtgK%2Ftfile.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;640&quot; height=&quot;428&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;428&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CXL 3.0으로 Fabric 형성. 많은 host processor가 device를 효율적으로 interconnect함.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&lt;b&gt;CXL 3.0 (2022년 발표)&lt;/b&gt;&lt;/p&gt;&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;&lt;li&gt;멀티 헤드 디바이스 : 여러 host processor가 하나의 device를 동시에 활용 가능&lt;/li&gt;&lt;li&gt;Fabric 지원 : 다중 노드 간의 네트워크 구조 (Fabric)을 통해 확장성 극대화&lt;/li&gt;&lt;li&gt;Bandwidth improved : PCIe 6.0과 호환성을 통해 더 빠른 데이터 전송 가능&lt;/li&gt;&lt;li&gt;리소스 공유 개선 : 더 정교한 메모리 공유 및 관리 기능&lt;/li&gt;&lt;/ul&gt;&lt;p data-ke-size=&quot;size16&quot; style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/CXL</category>
      <category>CXL</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/52</guid>
      <comments>https://johnkims2.tistory.com/52#entry52comment</comments>
      <pubDate>Tue, 24 Dec 2024 15:07:31 +0900</pubDate>
    </item>
    <item>
      <title>c++에서 값 초기화</title>
      <link>https://johnkims2.tistory.com/43</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;c++코딩하는 중에 착오가 있어서 초기화가 제대로 되지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727968867997&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    int max_index_list[TLB_SET] = {0};
    int min_index_list[TLB_SET] = {0};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;c++에서 배열을 선언함과 동시에 모든 값을 위와 같이 0으로 초기화가 가능하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 코드를 선언하고 사용한 뒤에 다시 초기화 할 때면 아래와 같은 방법으로는 사용할 수 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727969412132&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;max_index_list[TLB_SET] = {0};
min_index_list[TLB_SET] = {0};&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 초기화가 안된다...... 이래서 이상한 데이터로 분석하고 있었음....&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 선언한 배열을 초기화 하려면 &lt;b&gt;std::fill&lt;/b&gt;이나 &lt;b&gt;memset&lt;/b&gt;을 사용하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1727969498403&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;std::fill(max_index_list, max_index_list+TLB_SET, 0);
std::fill(min_index_list, min_index_list+TLB_SET, 0);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러면 0으로 전체 값이 초기화 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;std:: 를 써줘야지 vscode에서 다음과 같은 에러가 나오지 않는다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GVmU0/btsJTAqaXv0/KCgEjwecEhkdQKXq9PDxe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GVmU0/btsJTAqaXv0/KCgEjwecEhkdQKXq9PDxe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GVmU0/btsJTAqaXv0/KCgEjwecEhkdQKXq9PDxe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGVmU0%2FbtsJTAqaXv0%2FKCgEjwecEhkdQKXq9PDxe0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;482&quot; height=&quot;81&quot; data-origin-width=&quot;482&quot; data-origin-height=&quot;81&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 에러는 동일한 이름의 함수가 있어 충돌이 발생할 수 있다는 에러다. 에러라 해도 처음에는 돌아가지만, std::를 명시하지 않으면 std::로 돌렸는지 다른 fill 함수로 돌렸는지 알 수 없으니 웬만해서는 쓰도록 하자.&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/리눅스 &amp;amp; 코딩</category>
      <category>c++</category>
      <category>코딩</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/43</guid>
      <comments>https://johnkims2.tistory.com/43#entry43comment</comments>
      <pubDate>Fri, 4 Oct 2024 00:36:41 +0900</pubDate>
    </item>
    <item>
      <title>VSCode 갑자기 안 될 때 (SSH 사용 시) : Failed to parse remote port from server output</title>
      <link>https://johnkims2.tistory.com/42</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh 원격으로 서버 컴퓨터에 잘만 접속하다가, 갑자기 위 (Failed to parse remote port from server output) 에러가 뜨면서 연결이 안되는 문제가 발생하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도대체 뭐지????&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;104&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgzJke/btsJG4SoEuE/fQs9ksyIfnItyVfPBXGWQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgzJke/btsJG4SoEuE/fQs9ksyIfnItyVfPBXGWQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgzJke/btsJG4SoEuE/fQs9ksyIfnItyVfPBXGWQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgzJke%2FbtsJG4SoEuE%2FfQs9ksyIfnItyVfPBXGWQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;794&quot; height=&quot;104&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;104&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신기하게도 vscode로 ssh 연결할 때에만 안되고, MobaXterm으로 할 때에는 가능했다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예상되는 원인은 vscode가 업데이트 되면서 서버 컴퓨터에 ~/.vscode-server 내용과 버전이 불일치 되는 것이라 판단된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode로 ssh 호스트 연결할 때 어차피 ~/.vscode-server는 자동으로 만들어 주기 때문에 해당 폴더를 삭제하고 재접속하였다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1726993814067&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf ~/.vscode-server&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러더니 재접속 성공!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vscode 잘만 되다가 안된다 싶으면 위 명령어를 서버 컴퓨터에 입력하자.&amp;nbsp;&lt;/p&gt;</description>
      <category>공부/리눅스 &amp;amp; 코딩</category>
      <category>Linux</category>
      <category>vscode</category>
      <category>리눅스</category>
      <category>원격</category>
      <category>코딩</category>
      <author>박사님공부하셔야죠</author>
      <guid isPermaLink="true">https://johnkims2.tistory.com/42</guid>
      <comments>https://johnkims2.tistory.com/42#entry42comment</comments>
      <pubDate>Sun, 22 Sep 2024 17:32:11 +0900</pubDate>
    </item>
  </channel>
</rss>