Bộ nhớ cache là gì và cách nó hoạt động?

mình có 1 số thắc mắc như sau :

  1. theo như mình search gg thì trong window , cpu nó tự động có chức năng cache dữ liệu và lệnh , ví dụ bạn chạy đoạn lệnh xử lý nào đó nó sẽ tự động lưu kết quả lại sau này nếu có đoạn lệnh nào giống hoàn toàn thì nó sẽ tự động lấy kết quả kia luôn ko cần tính lại phải ko?
  2. nếu như ý 1 là đúng thì cho mình hỏi tiếp làm sao nó có thể biết được đoạn lệnh sau là giống hoàn toàn với đoạn lệnh trước , và thời gian để tìm và so sánh rồi lấy kết quả nó có thực sự nhanh hơn là chạy lại mới hay không
  3. nếu mình dùng web thì khi mình load trang web mình tải các resource về rồi lưu tạm trong cache , khi nào mình gửi 1 request mới mà trong request có yêu cầu tải các resource đã tải thì nó sẽ ko gửi request nữa mà sài thằng resource trong cache , vậy làm sao nó biết được resource trong cache đúng là resource mà web site muốn tải ?
  4. ví dụ mình tạo 1 proxy server đơn giản để forward request , mình dùng PC kết nối đến proxy server , rồi sau đó truy cập web trên PC thông qua proxy server thì các request mình từng truy cập có được lưu trên cache của proxy server không ?

1 và 2 (CPU cache) thì trong môn kiến trúc máy tính có đó bạn :slight_smile:

Cache dựa trên 3 kiểu truy cập:

  • Temporal Locality: Một số ô nhớ được đọc ghi nhiều lần.
  • Sequential Locality: Các ô nhớ thường được đọc ghi có thứ tự (thay vì rải rác khắp nơi).
  • Branch Locality: Một số đoạn lệnh được lặp đi lặp lại nhiều lần.
8 Likes
  1. Cpu liên quan gì tới cpu, vậy cứ chạy Windows thì cpu biết cache hoặc có thêm chức năng cache? Bạn đọc ở đâu ra được kiến thức đó? Dù cho link bạn tìm đọc là link uy tín thì có chắc bạn đọc hiểu đúng không?

  2. Bạn trả lời câu 1 trước rồi tính

  3. Có người hỏi bạn mấy giờ rồi, bạn nhìn đồng hồ và trả lời, sau đó vài giây người khác lại hỏi nữa bạn không xem đồng hồ mà trả lời luôn, sao bạn biết được những thứ bạn đang nhớ sẵn trong đầu, cái nào là cái bạn cần?
    Máy tính bạn có nhiều file, làm sao bạn phân biệt được file nào là nhạc, file nào là hình, file nào sách lập trịn, file nào sách ngôn tìnn?

  4. Có ghi hay không còn tùy thuộc người lập trình ra proxy đó có làm tính năng đó không, người setup có bật tính năng đó hay không

Qua 4 câu hỏi của bạn thì bạn hầu như không hiểu cache là gì

4 Likes

? thế mục đích mình lên đây hỏi là gì khi mình đã hiểu cache , bạn buồn cười vl , như anh ở trên nói ít nhưng giá trị mang lại lớn , bạn nói rất nhiều nhưng mục đích là dè biểu , nếu bạn ko biết hoặc ko muốn chia sẽ thì có thể ko cần cmt … và đúng như anh rogp10 trong tài liệu môn kiến trúc mt có giới thiệu về cpu cache

1 hoc sinh mới học hết lớp 3 biết cộng trừ nhân chia, nghe loáng thoánh anh chị lớp 12 nói về tích phân
thế là đi hỏi giáo viên tích phân là gì, sao trông khó hiểu quá, vậy có nên giải thích hay không?

không biết thì hỏi, chuyện này chả có gì sai cả, nhưng không có đủ kiến thức để tiếp nhận và hiểu câu trả lời nhưng lại lấy lý do “không biết nên mới hỏi chứ biết rồi còn hỏi làm chi” thì là đúng hay sai, cứ tự trả lời đi

5 Likes

ko cần giải thích chỉ cần cho key word hoặc chỉ dẫn để họ tự tìm ? còn bạn so sánh khập khiển giữa học sinh lớp 3 với 1 người trưởng thành ? vì học sinh lớp 3 có thể tư duy nó chưa đủ để tự tìm hiểu , giờ nếu bạn so sánh 1 sinh viên đại học không hiểu các thuyết lượng tử của Einstein là ko có quyền hỏi về nó ko có quyền tìm hiểu nó ? có nói nó cũng ko biết ? tư duy kiểu gì vậy bạn ?

" Nếu bạn không thể giải thích điều gì đó cho một đứa trẻ 6 tuổi thì chính bạn cũng không hiểu điều đó"- Albert Einstein

1 Like

Trong tin học, cache (/ˈkæʃ/ KASH-’ [1]) là bộ nhớ đệm chứa dữ liệu, các dữ liệu được nằm chờ yêu cầu từ ứng dụng hoặc phần cứng. Dữ liệu được chứa trong cache có thể là kết quả của tính toán trước đó, hoặc là sự trùng lặp dữ liệu được lưu trữ ở một nơi khác. !

nhìn cái hình xem có keyword gì đặc biệt để tìm không mà cần phải giới thiệu keyword? tôi không thuộc kiểu người thích giải thích mọi chuyện cho đứa trẻ 6 tuổi nên không tranh luận nữa. chúc bạn sớm giải thích được cache cho đứa trẻ 6 tuổi hiểu

8 Likes

Anhxanh cũng ko nói câu nào như câu đó nha :V

còn giải thích cho trẻ 6 tuổi thì cache như là cái bàn làm việc ấy. Người lớn làm việc họ để sách/văn bản ở trên bàn cho gần dễ lấy đồ mà làm việc. Nhưng bàn ko chứa hết, họ lại để văn bản ở kệ sách trong phòng. Nhưng kệ sách cũng ko chứa hết, họ phải để thêm sách ở phòng khác. Nhưng phòng khác cũng ko chứa hết, họ phải để ở kho công ty. v.v… Cache là bộ nhớ tạm thời, truy cập nó rất nhanh, nhưng dung lượng của nó nhỏ nên cần phải có những bộ nhớ lớn hơn, truy cập chậm hơn.

CPU registers là lẹ nhất, nhưng nó chỉ có vài chục registers.
L1 cache lẹ nhì, dung lượng khoảng vài chục KB
L2 cache dung lượng khoảng 2MB thì phải
L3 cache thì ~32MB
RAM dung lượng khoảng vài GB tới vài trăm GB
HDD/SSD dung dượng vài trăm GB tới vài chục TB
và cuối cùng là Internet :V dung lượng gần như vô tận :V

HDD có thể được xem là cache cho Internet: down 1 file từ internet về mất vài trăm ms tới vài giây, file đọc từ HDD lên chỉ tốn vài ms.
RAM có thể được xem là cache cho file trong SSD :V
L3 là cache cho RAM
L2 là cache cho L3
v.v… :V

hiểu từ “cache” là cái gì rồi thì

  1. Cái này do trình biên dịch biên dịch chương trình tối ưu cho, hoặc thuật toán yêu cầu như vậy (quy hoạch động), hoặc do programmer bảo chương trình nó lưu như vậy (quy tắc Dont Repeat Yourself - DRY). Hay “cache dữ liệu và lệnh” nghĩa là đọc lệnh từ HDD lên RAM lên L3 lên L2? Nếu vậy thì là thuộc về kiến trúc máy tính thì nó có prefetch lệnh lên L2 L1 gì cho chạy lẹ hơn là đọc mỗi câu lệnh từ HDD chắc vài trăm ngàn lần :V
  2. Khi đã load từ HDD lên RAM lên L3 lên rồi thì ví dụ cái mảng/tập lệnh 1MB đó nó nằm ở L3, lần đầu tiên load nó từ HDD lên L3 có thể tốn vài chục ms, nhưng những lần truy cập sau chỉ mất vài us thôi, lẹ hơn cả ngàn lần :V Như moi 1 đống văn bản từ kho lên rồi để ở trên bàn làm việc, những lần sau cần truy cập những văn bản sau đó bạn chỉ mất vài giây thay vì vài tiếng lấy từ kho lên :V
  3. Edit lại: chỉ cần gửi 1 request là được: đầu tiên browser nó ktra xem trong thư mục cache có file với url cần tải chưa. Nếu chưa nó sẽ gửi request xin download bình thường. Nếu có rồi nó sẽ ktra tiếp “tuổi” của file này, nếu quá thời hạn định sẵn trước đó, vd lần đầu tiên cache thời hạn hợp lệ chỉ là 7 ngày, quá 7 ngày phải tải lại thì nó sẽ gửi request xin down bthg. Nếu còn trong thời hạn, nó sẽ gửi request với 1 header đặc biệt If-Modified-Since: {##}, server khi nhận được request nếu có enable client caching nó sẽ ktra xem file được yêu cầu được sửa đổi khi nào, nếu ko bị thay đổi trước ## thì nó sẽ gửi về response chỉ có header ko có body với status 304 là unmodified (ko thay đổi), browser nhận respone 304 này sẽ lấy file từ cache lên, ko cần down response body. Nếu bị thay đổi trước ## thì server sẽ gửi về response với header 200 ok và body là file đó, browser nhận được response 200 sẽ phải tải response body về :V
  4. Cache nào của proxy server đó? HDD/SSD? RAM? L3? L2? L1? Lưu trong thời gian bao lâu? Vài ns, vài us, vài ms hay vài phút? Lưu để làm gì? Sợ bị lưu để làm gì? Tùy vào loại server em xài chứ ai biết mà phán được :V Có thể có loại nó lưu 1 tháng, có loại nó lưu 1 ngày, có loại nó lưu 15 phút, ai mà biết được?
12 Likes
  • về câu 1 thì mình cũng vừa đọc lại giáo trình về kiến trúc máy tính , thì các cache L1,L2,L3 nó chỉ là tải các phần tử có khả năng sẽ được sử dụng trong tương lai gần hoặc những phần tử vừa được tham chiếu có xu hướng sẽ được tham chiếu lại trong tương lai gần lên lưu tạm ở đó sau đó cpu muốn truy cập dữ liệu mà dữ liệu đã có ở cache thì lấy luôn không cần tải mới nên giảm đc thời gian truy xuất , không có phần lưu sẳn kết quả ,

  • câu 2 thì trong tài liệu cũng giải thích luôn rồi ,

  • câu 3 thanks bạn ,

  • còn câu 4 thì do lúc đầu mình chưa nắm đc cache nên cứ nghĩ dữ liệu đi qua proxy thì tự động nó cache nhưng trên thực tế phải tạo ra riêng 1 chương trình để lưu trữ dữ liệu đó (redis , Memcached)

Mình không biết chuyện ai có lý ở đây, chỉ góp ý với chủ topic là nên viết đúng chính tả hơn, cụ thể: đầu câu phải viết hoa, NÊN chứ không phải LÊN (tức đang L, N lẫn lộn), cuối câu không phải là dấu phẩy.

Việc đọc đâu đó thì nên đối chiếu vài nguồn, nghiền ngẫm trước khi hỏi. Hỏi mấy cái tào lao vớ vẩn thì người ta ghét cho, chửi cho sấp mặt rồi lại đi cãi nhau với họ mà lại không học hỏi được gì, quay lại tự sỉ vả bản thân <= con chó tự cắn đuôi của mình.

Cảm giác của mình là bạn đang rất bị kích động, nóng vội muốn làm chủ kiến thức, nhưng điều đó là… không thể khi chưa rèn được cách tiếp cận kiến thức sao cho cái não phải biết suy xét, so sánh.

Ví dụ luôn của việc đọc mà không bỏ thời gian suy ngẫm, đó là bạn trích câu của Albert Einstein với ý rằng: à, thằng kia cứ làm ra vẻ hiểu biết, bày đặt nhưng thực ra nó cũng cóc hiểu cái gì nên nó giải thích tào lao. Nhưng hoá ra, khi bạn trích câu đó, người ta lại hiểu vầy: thằng nhóc này nó đang tự ví nó như đứa học lớp 6, đã thế tao cảm thấy chán, cóc thèm giải đáp, trả lời cho thằng con nít/ trẻ em/ trẻ trâu này. Bạn có thấy sự tai hại vì ít dùng đến não bộ, đến chất xám chưa?

Để tránh làm nản lòng chiến sỹ mới, thì mình “khích” bạn kiểm tra lại các thứ của bạn:

  1. Theo như mình Google gì đó: kiến thức sai bét, không phải là trong window nào cả nhé. Cache của CPU là do nhà thiết kế phần cứng, không phải là hệ điều hành. Còn cách cache hoạt động thế nào thì có trên Wikipedia https://en.wikipedia.org/wiki/CPU_cache

  2. Vế 1 bạn đã tào lao nên không có 2 này.

  3. Cache của web và cache của CPU là hai thứ khác nhau nên cái này bạn cũng tào lao nốt. Việc tại sao “nó” ở đây bạn đã không làm rõ nó là ai, bạn mơ hồ đến mức không biết mình đang hỏi gì. Cache ở web có nhiều cấp độ cache, bạn nên đọc về giao thức liên quan đến web để hiểu rõ rồi mới biết cache bạn đề cập là cache nào, web động và web tĩnh có cache không hoàn toàn giống nhau.

  4. Bạn tạo một proxy server để làm gì? Vì sao bạn đề cập đến proxy ở đây mà không đề cập đến một cái gì khác? Các request của bạn có được lưu trên cache của proxy hay không thì bạn hình dung câu chuyện thế này: bạn tới cửa hàng mua cái bánh mì (bạn là PC gửi request), người bán lấy bánh mì trong tủ đưa cho bạn (anh/ chị ấy là proxy). Rồi bạn mua thêm vài ổ bánh mì khác, hãy quan sát xem cache hoạt động thế nào :D. Nên nhớ, câu này chỉ là để giúp bạn chủ topic tập “vặn xoắn não”, nó không có đúng - sai, trúng trật gì ở đây nên các bạn khác đừng có nhảy vào ném đã mình tơi tả nhé, lại là sự nhầm nhọt đáng tiếc đấy.

11 Likes

Để mình văn hoa 1 tí.
Cache giống như Y TÁ túc trực bên cạnh giúp đỡ BÁC SĨ trong ca phẫu thuật vậy.
BÁC SĨ là cpu.
Trong khi mổ, Y TÁ quan sát sắp đến công đoạn nào rồi, thì tiếp theo cần xài dụng cụ gì, Y TÁ cầm lên, chuẩn bị sẵn. Càng nhiều Y TÁ, Y TÁ càng nhiều tay thì chuẩn bị dụng cụ càng dc nhiều.
BÁC SĨ cần cái gì chỉ cần hô, “kéo đâu”, “dao đâu”, “chích thêm thuốc tê”. Là Y TÁ sẵn sàng có trên tay để đáp ứng (cache hit)

Thỉnh thoảng cũng có khi Y TÁ chuẩn bị đồ ko chuẩn, khi đó ko đáp ứng dc yêu cầu của BÁC SĨ (cache miss), thì phải lục lại hộp đồ nghề → tốn thêm thời gian.

7 Likes

Có lẽ bạn nên phân biệt cache của CPU và cache của soft. Bạn đang bị nhầm lẫn hai khái niệm này. Hãy tìm hiểu thêm rồi sẽ bàn tiếp.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?