vtables

Trong post trước có nói về v-table, v-table là gì!? Với lập trình procedural truyền thống, gọi hàm thực chất là một lệnh hợp ngữ (Assembly), chỉ cần một lệnh JMP – Jump là nhảy ngay đến vùng nhớ chứa đoạn mã – hàm cần thực hiện! Nên gọi hàm trong ngôn ngữ C có tốc độ nhanh, nhanh đến mức không tưởng. Nhưng sự việc không đơn giản như vậy với các ngôn ngữ hướng đối tượng, như C++. Lấy ví dụ như: a->some_function(), trong trường hợp đơn giản nhất, ta cần nhảy 2 lần, lần đầu đến vùng nhớ chứa đối tượng (object) ‘a’, sau đó mới tìm trong vùng nhớ đó con trỏ đến hàm ‘some_function’ và nhảy thêm một lần nữa. Nhưng sự việc không đơn giản như vậy vì OOP có tính kế thừa, có nhiều phiên bản khác nhau của cùng một hàm ảo, những phiên bản này được chứa trong một cái bảng gọi là v-table, và việc gọi hàm lúc này bao gồm: 1. nhảy đến vùng nhớ bắt đầu đối tượng ‘a’, 2. tìm xem trong v-table của ‘a’ địa chỉ của hàm cần gọi, 3. nhảy đến vùng nhớ chính xác của hàm đó. Và cái bảng v-table này càng ngày càng lớn nếu kế thừa nhiều cấp, 20 ~ 30 cấp cũng là việc đã từng thấy! Sự việc bắt đầu trở nên phức tạp hơn nữa với những ngôn ngữ hỗ trợ đa kế thừa, đối tượng ‘a’ có thể kế thừa từ 1, 2 hay nhiều lớp khác nhau!

Lúc đó, compiler sẽ phải tạo ra nhiều v-table, và việc gọi hàm là một công cuộc tìm kiếm, tra bảng dài lê thê, thay vì chỉ một lệnh hợp ngữ JMP đơn giản! Thời gian tiêu tốn cho việc gọi hàm có thể dao động đâu đó trong khoảng 5 ~ 50% toàn bộ thời gian chạy chương trình. Đến tận ngày hôm nay, mấy chục năm sau khi các ngôn ngữ hướng đối tượng ra đời, bản chất của việc gọi hàm vẫn không đổi, và vẫn chưa có cải tiến nào mang tính cách mạng xảy ra! OOP đúng là một mô hình rõ ràng, dễ hiểu đối với lập trình viên, nhưng cực kỳ đau khổ cho những người làm compiler! OOP sinh ra, đầu tiên và trên hết là cho lập trình UI, mỗi cửa sổ, mỗi nút bấm trên UI là một đối tượng – object, nguyên thủy là vậy, về sau người ta mới mở rộng OOP từ UI sang những lĩnh vực khác! Nên những người làm ứng dụng lớn, cần lớp lang, cấu trúc rõ ràng, những người đó sẽ cảm thấy khó hiểu khi những coder ở mức thấp bên dưới chỉ thích procedural! OOP đúng là rõ ràng và tiện lợi, nhưng không phải là cách tiếp cận duy nhất đối với các vấn đề lập trình, mọi việc có thể sẽ thay đổi! Và nhiều coder không hiểu vì sao một số người cố sống cố chết bám vào một số phong cách xưa cũ, vì… bản năng mách bảo rằng làm như thế mới là đúng!

thôi thủ

Facebook nhắc lại ngày này năm trước… Không phải là lười xuống nước, nhưng đúng là gần một năm qua cảm thấy thiếu ý tưởng và thiếu cả động lực, cảm thấy không tìm ra được ý tưởng gì mới. Mùa mưa coi như là đã về đi, chuẩn bị khởi động lại chương trình ra sông tập luyện! Một trong những điều cốt yếu của brace và roll là sự tự nhiên, mềm dẻo…

Cơ thể mà căng cứng, lo sợ là sẽ không làm được! Nói theo một nghĩa nào đó thì như bạn đang “thôi thủ – 推手 – pushing hands” với nước vậy, mà nước thì vô cùng mềm dẻo! Không biết “thôi thủ” là gì thì tìm xem một vài phim tài liệu về Thái cực quyền, các cao thủ chỉ cần chạm nhẹ cánh tay vào nhau là đã biết đối phương cao thấp thế nào!

rust

Những cái thuộc về ngôn ngữ, 10 năm là ít, 30 năm chưa phải là nhiều, thời gian để cho một ngôn ngữ trưởng thành, trở nên chính chắn, cẩn trọng từng câu, từng lời, bảo đảm mọi điều nói ra phải có nghĩa chính xác. Nhiều người bảo, chỉ là một tập cú pháp – syntax thôi mà, nói sao không được!? Không phải vậy, đã từng có vô số cú pháp “nhảm” bị đào thải sau vài năm, đơn cử như là C#, C# đã từng có vô số cú pháp nhảm, nhảm đến mức thiểu năng, ngu xuẩn! Và cũng đã có một số cú pháp kiểu “chữa lành – chảnh lừa” như async – await vẫn tiếp tục lừa người thêm độ chục năm, cho đến khi người ta nhận ra chẳng có lợi ích gì ngoài những câu chữ oang oang, trơn tuột! Và cũng đã có những ngôn ngữ đã dùng trên hai mươi năm nhưng rồi cuối cùng thì người ta quyết định: thôi, tốt hơn là… bỏ, không đi tiếp nữa, ví dụ như Obj-C, Flash, thậm chí có thể cả Java! Nhưng chừng đó năm cũng đủ cho người ta mường tượng ra được một ngôn ngữ “tốt” tương lai nó sẽ trông như thế nào!

Đầu tiên là nó phải giống ngôn ngữ C, điều này… đơn giản như chân lý vậy, cứ phải giống C thì mới tốt! Thứ hai, ngôn ngữ phải strong-type, có kiểu rõ ràng và kiểm tra kiểu khi biên dịch, không đợi đến khi chạy. Thứ ba, dù gọi tên gì: reference, optional, thì cũng phải làm cho người ta hiểu rằng đây là con trỏ – pointer, ở điểm này thì C thẳng thắn đến mức trần trụi! Thứ tư là quản lý bộ nhớ bằng reference counting và lần nữa, phải làm từ lúc biên dịch (compile time), đừng đợi đến đến lúc run-time, quên garbage collector và những thứ khác đi! Thứ năm là làm sao để lập trình concurrent, thread, process dễ hiểu hơn! Và cuối cùng, rất quan trọng, là dù thời đại đã đi tới mức zettabyte, nhưng một ngôn ngữ vẫn phải thật sự hiệu quả, hiểu theo nghĩa phải đếm từng bits khi cần. Xét những tiêu chí đó thì có lẽ Rust sẽ là ngôn ngữ phổ thông kế tiếp, dần thay thế C++! Đã nói rồi, phải cải tiến trước rồi hãy dùng, đừng dùng xong mới cải tiến, gọi là ++C có phải đã tốt rồi không!?

Đương nhiên, đây là ngôn ngữ phổ thông (general purpose) ở mức thấp (low level), những lĩnh vực đặc thù vẫn sẽ có những ngôn ngữ riêng! Nhưng với một ngôn ngữ phổ thông cấp thấp, ưu tiên hàng đầu là performance, những thứ khác vẫn chỉ là phụ. Rust thậm chí còn chưa phải là một ngôn ngữ OOP – hướng đối tượng đúng nghĩa, theo nghĩa thường hiểu trong C++ hay Java. Nói cho đúng hơn là mô hình OOP của Rust được thiết kế ưu tiên cho performance, chứ không phải cho sự tiện lợi của người viết code! Thậm chí ta còn có thể đặt câu hỏi rằng, có thực sự cần OOP hay không, ví dụ như glibc chỉ dùng “struct” của C để biểu diễn “class” đó thôi! Nhưng qua đó cho thấy rằng, đã rất nhiều thế hệ khác nhau của C++ rồi, mà vẫn không giải quyết được bài toán vtable – gọi hàm hướng đối tượng làm sao cho hiệu quả. Nên Rust đành phải đổi một cách tiếp cận khác, mang tính chất lai lai, một nửa là OOP và nửa còn lại vẫn là functional theo kiểu C truyền thống!

Quá trình hình thành một ngôn ngữ thực chất phản ánh muôn mặt của cái cộng đồng làm ra và sử dụng nó. Đầu tiên là từ góc độ tương đối hàn lâm, ngôn ngữ phải thể hiện được tính đúng đắn và hiệu quả tính toán! Cái yếu tố “hiệu quả – performance” này là yếu tố quyết định, đôi khi nó phủ quyết (veto) tất cả những yếu tố khác. Tiếp nữa mới đến chuyện cú pháp rõ ràng, tiện lợi, thân thiện với lập trình viên. Kế đến nữa mới là chuyện tổ chức, lớp lang, các hệ thống thư viện phụ trợ để dễ dàng phát triển phần mềm! Phần lớn lập trình viên chỉ tranh luận phía trên bề mặt, cú pháp như thế này, lớp lang như thế kia, họ không hiểu rằng yếu tố tiên quyết của một ngôn ngữ là vấn đề hiệu suất (performance). Những ngôn ngữ bỏ lơ vấn đề này… đều có kết cục thê thảm!!! Như Objective-C, người ta bỏ vì nó đã trở thành một con quái vật, phức tạp đến mức vô lý, hay như một số code React – TypeScript, mới viết có cái app Hello-World là đã chiếm mất hơn 3GB đĩa cứng.

parade

Thông lệ hàng năm, 9 tháng Năm là ngày Gấu Nga trình diễn, khoe cơ bắp! Xem mãi các cuộc diễu binh cũng chán, mời các bạn xem trích đoạn bộ phim Người thợ hớt tóc ở Siberia, đoạn Sa-hoàng Alexander-3 dự lễ tốt nghiệp của các sĩ quan. Phim dựng lại theo đúng lịch sử, Alexander-3 là người to lớn, vạm vỡ với sức mạnh phi thường, cầm nguyên bộ bài Tây 54 quân, ông ta xé nó thành 2 mảnh. Hay đang ăn với chiếc đĩa bạc, ông ta dùng tay cuộn tròn cái đĩa lại như người ta cuộn bánh tráng vậy! Cái trò dùng tay cuộn đĩa kim loại này, đã có nhiều đời Sa-hoàng biểu diễn trên các bàn tiệc ngoại giao như một cách… hù đối phương!

Phim có đoạn Sa-hoàng Alexander-3 trò chuyện với hoàng hậu Maria Feodorovna bằng tiếng Anh: – Em còn phải lặp đi lặp lại bao nhiêu lần nữa, tại sao anh không bao giờ nghe em, Michael còn quá nhỏ, nó rất dễ bị kích động bởi các cuộc diễu binh cũng như các trò chơi quân sự. Alexander 3 trả lời rất hóm hỉnh, cũng bằng tiếng Anh: – Nếu tôi mà nghe theo em á, thì đến tận giờ chúng ta còn chưa có con được đâu! Haiza, xem phim để thấy rằng, đây đúng là một dân tộc kiêu hãnh và mạnh bạo, một nền văn hóa đầy màu sắc, một loại âm nhạc sinh động, tuôn chảy, phức tạp! Luôn tràn đầy sức sống, luôn tiến về phía trước!

space-time

U50 rồi, “hơn nửa đời hư” (chữ “hư – ” này không phải là “hư hỏng” như thường hiểu trong tiếng Việt nhé, gì chứ lão Vương kia là khá rành chữ Hán đấy). U50 rồi, không thể tránh khỏi có những giai đoạn giấc ngủ xáo trộn. Dù vẫn ngủ rất đủ, và rất sâu, y như thanh niên 20, nhưng thỉnh thoảng vẫn bị kiểu jet-lag rất khó chịu! Nhiều đêm trằn trọc, đưa tay chạm nhẹ cái đồng hồ đặt trên tủ đầu giường, nó có cái “máy chiếu” tí hon, phóng ảnh lên trần nhà để thông báo giờ hiện tại. Thời gian cứ thế trôi đi, một lúc lại chạm nhẹ xem giờ lần nữa, trằn trọc không ngủ nên suy nghĩ linh tinh…

Đêm nghe tiếng mưa rơi, đếm mấy triệu hạt rồi… Có một không gian nào đo chiều dài nỗi nhớ…, đương nhiên đây sẽ là không-thời-gian Minkowski (Minkowski spacetime) rồi, không thể là không gian Euclide hình học cổ điển được, bởi vì chỉ có trong không gian Minkowski thì khoảng cách giữa 2 sự kiện (events) là độc lập (không phụ thuộc) vào hệ quy chiếu quán tính (inertial frame of reference) dùng để quan sát, đo lường hai sự kiện đó. Nhưng, những điều này cần phải được đặt vào trong một phép biến đổi Lorentz (Lorentz transformation) thì mới có thể hình dung được!

nhiệt

Đến lúc này có thể khẳng định chắc chắn máy có thể chạy heavy – duty rất tốt, đã chạy 24 tiếng liên tục, lúc nào cũng 100% công suất, chương trình xử lý dữ liệu tạo ra 72 processes, dùng đến hơn 40GB RAM, mà nhiệt độ 2 con CPU ổn định ở mức 60~62°C, nhiệt độ dầu ổn định ở mức 41~42°C, còn nhiệt độ GPU và SSD còn thấp hơn nữa, chỉ loanh quanh 37~38°C! Tuy vậy nhìn lại, vẫn có chút tiếc nuối, vẫn có chút không hoàn hảo, vì vẫn có thể làm tốt hơn, vẫn có những giải pháp tản nhiệt tốt hơn nữa! Haiza, nhiệt, nhiệt độ, chính là vấn nạn của cả loài người!

Cứ mỗi năm mỗi nóng hơn thế này, năm nào cũng thiết lập kỷ lục mới! Cái quá trình không đảo ngược được, con người và xã hội đã bị đẩy vô guồng, bị gài vô một cái thế cứ phải hơn, hơn nữa! Ai cũng muốn có những cái máy chạy nhanh hơn nữa, kết quả là cái quả cầu màu xanh xanh kia nó sẽ cứ nóng đỏ dần lên thôi. Đây là chuyện mà không bất kỳ một loại khoa học, kỹ thuật nào, không bất kỳ một hệ tư tưởng nào có thể giải quyết được, càng không nói đến cái đám cứ xoen xoét green & clean kia! Có lẽ phải nghĩ đến chuyện đào hầm tránh nóng là vừa!

chiều tây bắc

Nhớ năm đó chạy xe máy qua đèo Pha Đin – Sơn La – Điện Biên… con đường đèo mới vừa làm xong, tráng nhựa rộng rãi, phẳng phiu, chạy song song với con đường cũ! Xe thì mạnh và đường thì tốt, chạy cái vèo, mới có chút xíu đã qua hết con đèo. Giật mình vì kiểu “Trư Bát Giới ăn nhân sâm”, còn chưa kịp thưởng thức cái gì, chưa thấy được cảnh nào đẹp thì đã hết mịa nó con đèo. Bèn quay ngược xe lại, rẽ vào con đường cũ, đi chậm, thong thả, dừng xe, leo lên các ngọn đồi chụp ảnh, cứ như thế chạy qua đèo cả thảy 3 lần! Các đèo lớn ở miền Bắc thì mình đi hết cả rồi, nên Pha Đin cũng không phải là ấn tượng lắm, nhưng không phải vì thế mà nó không lớn!

Khi nhỏ ở Sơn Trà, Đà Nẵng, chỉ là mấy cục đá cao mấy chục mét, nhưng leo cũng trầy vi tróc vẩy chứ không đùa. Mà không leo mấy chục mét, thì làm sao hiểu được độ cao vài trăm mét, không leo vài trăm mét, thì làm sao hiểu được con số ngàn!? Giờ công nghệ hiện đại rồi, cơ giới hóa lớn, xe ủi, xe xúc, nên đường làm ra cứ gọi là rộng rãi, thông thoáng! Đám trẻ chạy xe hơi qua dừng lại dè bỉu: tưởng thế nào, chỉ có thế thôi à!? Nhưng sẽ là chuyện khác nếu như không có đường làm sẵn, cứ bắt gùi 30kg, vạch cây, bám đá mà đi, thì sẽ tự hiểu, tự ngộ ra được núi cao bao nhiêu ngay thôi! Tranh: Nhớ một chiều Tây Bắc – sơn mài – Phan Kế An – 1955.

nông trại

Tốt nghiệp xong, về làm việc tại trung tâm máy tính, ĐH KHTN, rồi trung tâm máy tính ĐH Quốc gia TPHCM. Cái trung tâm mới xây, đúng là thiên đường cho những ai đam mê, chuỗi (cluster) 64 máy con hàng xịn, cộng với những con server hàng khủng, và nhiều loại thiết bị mà tôi còn chưa nhìn thấy bao giờ, chưa biết là cái gì, tất cả được đặt trong phòng riêng, cùng với nhiều cục lưu điện – UPS to hơn cái tủ lạnh 200 lít. Nếu cúp điện thì những cục UPS này vẫn đủ khả năng giữ cho toàn hệ thống chạy suốt hơn nửa ngày, và khi lượng điện trong UPS xuống dưới một mức nào đó, thì do đã được lập trình sẵn, hệ thống sẽ tự khởi động cái máy phát đặt ở phòng kế bên, cấp điện cho toàn hệ thống, tất cả chạy hoàn toàn tự động!

Và đồng thời hệ thống cũng gởi tin nhắn qua điện thoại về tình hình hiện tại của các loại máy móc đến cho quản trị viên – admin, thường là đang đi uống cafe ở đâu đó biết để còn chạy về xử lý nếu cần! Vâng, giai đoạn khá là ngu ngơ, nhiệt huyết và lý tưởng, từ chối những “lời mời gọi tình yêu” của một số em gái, về đó nghiên cứu grid – computing, mà bây giờ người ta hay gọi là computing – farm – nông trại tính toán! Và vâng, đi vòng quanh, vòng quanh cái nông trang tập thể, năng lực tính toán thì có thừa, chỉ thiếu… bài toán cho nó giải quyết mà thôi! Hơn 25 năm sau, chuyện làm “nông trại” bây giờ thật quá dễ dàng, và cũng không thiếu bài toán cho nó giải quyết… Ekh, yedem my, yedem, Yedem, a krugom kolkhozy…

nhạc lộc thư viện

Từ thời Hán cho đến qua thời Tống, Nguyên, Minh, suốt khoảng 1500 năm, nơi có nhiều đầu sách nhất thế giới chính là… Trung Quốc! Từ các thư viện hoàng gia cho đến các thư viện tư nhân như Nhạc Lộc, họ có khoảng 6 ngàn đầu sách (tựa sách), nhiều hơn bất kỳ nơi đâu, dù là Baghdad, Varanasi hay Rome, thì cũng không có nhiều sách bằng! Viết bằng thứ chữ giun dế siêu phức tạp như thế, bao quát đủ mọi lĩnh vực, từ Sơn hải kinh, Thủy kinh chú, Cửu chương toán thuật, Hải đảo toán kinh, Võ bị chí, etc.. bao quát đủ mọi mặt kiến thức, trên thiên văn, dưới địa lý, từ tư duy trừu tượng cho đến các vấn đề xã hội… công phu, trình độ quả thực đáng nể! Các đoàn sứ thần VN sang TQ, sau khi nộp cống phẩm xong đều được “lại quả”, loại “quả” thường được yêu cầu (và đáp ứng) nhiều nhất chính là… sách! Mà chẳng riêng gì VN, các nước đương thời như Nhật Bản, Hàn Quốc cũng thế: chẳng phải mọi phát minh tốt đẹp đều đến từ Trung Quốc đó sao, người Nhật Bản đương thời nói như vậy!

Mọi chuyện bắt đầu thay đổi khi kỹ thuật in ấn bắt đầu được phổ biến sang châu Âu! Chính vì kỹ thuật in có thể tạo ra được số lượng ấn phẩm lớn, đưa kiến thức đến với nhiều người hơn, nên dần dà, nó tạo thành một kiểu hiệu ứng đô-mi-nô, bắt đầu từ đó, châu Âu càng ngày càng đẻ ra thêm nhiều tựa sách, và bắt đầu vượt qua Trung Quốc. Số lượng đầu sách (tính trên tựa, không phải tính trên bản in) không còn ở mức số ngàn nữa mà bắt đầu tăng, đương nhiên khởi đầu chậm nhưng sau đó cứ nhanh dần theo cấp số nhân, bắt đầu đạt con số chục ngàn, trăm ngàn, rồi đến mức triệu… Quá trình này mất đến vài thế kỷ, dần dần đưa nhân loại bước vào “kỷ nguyên Ánh sáng”… Sang đến thế kỷ 21, ở cái xứ mọi rợ phương Nam kia cũng bày đặt nói chuyện sách, toàn những thứ như Thám tử Sherlock Holmes, Trở lại Eden, Những năm ảo tưởng, Cánh buồm đỏ thắm, .v.v… haiza, sách vở gì chúng nó!?

turbo button

Đã nói về nút Reset, nay nói về nút Turbo, chắc không mấy người còn nhớ, một thời phổ biến trên các dòng x86 nhưng dần biến mất kể từ Pentium 1, 2 trở đi! Cái nút Turbo này thực chất nó làm gì? Chính là overclock – ép xung để cho CPU chạy nhanh hơn! Đang có ý định làm lại cái nút Turbo này cho con Aquarium-PC! Chỉ cần nhấn nút một cái là CPU chuyển từ xung nhịp cơ sở 2.3 GHz lên xung nhịp tối đa 3.6 GHz ngay!

Trên một số dòng mainboard, CPU, thực hiện “Turbo” rất dễ, ép xung / hạ xung và tăng thế, hạ thế (undervolt) đối với các chip hoàn toàn làm được từ phần mềm một cách dễ dàng, có hiệu quả ngay lập tức, mà không cần bất kỳ can thiệp gì đến phần cứng! Tuy nhiên, và cũng có khi, cách tốt nhất để tăng tốc, gia tốc, turbo một cái máy tính, đó chính là… loại gia tốc có giá trị 9.8 mét trên giây bình phương ấy!

đệ quy

Ví dụ về đệ quy, như thế nào là đệ quy – recursive!? Đầu tiên từ Terminal, gõ lệnh VIM để sửa file. Từ trong VIM, gõ lệnh term để mở một cái Terminal mới bên trong VIM, cái này thường cần cho lập trình viên để vừa sửa code một bên, vừa chạy kiểm tra bên kia xem code có đúng hay không, mà không cần phải thoát ra ngoài!

Nhưng vì ta cắc cớ, nên bên trong cái Terminal chạy trong VIM chạy bên trong Terminal này, gõ thêm một lệnh VIM nữa, kết quả là VIM nằm trong Terminal, nằm trong VIM, nằm trong Terminal, nằm trong VIM, nằm trong Terminal, nằm trong VIM, nằm trong Terminal… và trên nguyên tắc có thể kéo dài… vô hạn cấp!

performance

Để làm con Aquarium-PC, tôi mua cái mainboard Huananzhi X99, đây được xem là loại mainboard chạy 2 CPU… rẻ nhất trên thị trường, một sản phẩm đáng ngạc nhiên của các “pháp sư” Trung Hoa, còn CPU là 2 con Xeon Haswell E5-V3, cũng là loại cũ, và khá rẻ. Đơn giản vì đây là lần đầu mạo hiểm, mua rẻ rẻ thôi, lỡ có thất bại, cháy nổ hay hỏng hóc ở đâu đó thì cũng không quá xót tiền! Hệ thống ráp xong chấm được 23K điểm Passmark, một điểm số không hề tệ, ngang ngửa với con MacMini đời 2022! Thế nhưng đến khi chạy thực tế, các bài toán thực, thì Aquarium-PC luôn thua MacMini một chút trong mọi vấn đề, mặc dù thua không nhiều! Đúng là bách nhục, một bên là hệ thống lớn, 2 CPU to cồng kềnh, lại dùng tản nhiệt dầu, còn bên kia người ta bé có chút xíu! Nhưng nghĩ kỹ thì cũng thấy hợp lý, Xeon Haswell là công nghệ của gần mười năm trước, không thể nào so sánh công bằng được!

Nhưng cũng như tôi dự đoán, có một số lớp bài toán mà Aquarium-PC hơn MacMini, nhìn vào 2 cái ảnh dưới đây bạn sẽ hiểu vì sao! Chạy chương trình phân tích dữ liệu tự viết bằng Python, nó tạo ra đến hơn một chục process và dùng hơn 30GB bộ nhớ SWAP. RAM là điểm yếu của MacMini, chương trình chạy đến một lúc lượng SWAP quá lớn, máy nó lì ra không chịu chạy nữa, thậm chí… tự khởi động lại do quá nhiệt! Nhưng con Aquarium-PC thì chạy được, tuy năng lực xử lý thua chút xíu, nhưng có đến 64GB RAM, và chạy vô cùng mát! Không chỉ về RAM, Aquarium-PC còn hơn về thời gian xử lý với những lập trình nhiều processes! Ngày xưa để xử lý dữ liệu lớn/phức tạp, người ta chia thành nhiều bước, lưu kết quả trung gian ra file/database và quay lại xử lý nhiều lần! Ngày nay, với một số lớp bài toán, cứ tận dụng tài nguyên, bỏ hết lên RAM chạy một lần, code vừa nhanh, vừa đơn giản!

aquarium pc, phần 9

Lắp cái mạch điều khiển tốc độ quạt quay vào phía sau (rất tiếc không để lên bảng điều khiển phía trước được vì nó hơi to). Chạy đầy tải – stress-test 6 tiếng, nhiệt độ dầu ổn định ở mức 40°C, nhiệt độ CPU loanh quanh 60°C toàn thời gian, mà quạt chỉ mới chạy 50% công suất, tiếng ồn tương đương với cây quạt đứng trong phòng, kết quả này là đã tốt hơn dùng tản nhiệt nước nhiều! Nếu không chạy đầy tải mà chỉ dùng máy tính bình thường, nghe nhạc, xem phim, mở vài chục trang web cùng lúc, thì chỉnh quạt về cỡ 25% công suất, tiếng ồn lúc này rất nhỏ, thậm chí nếu chỉ xài máy tính trong vài tiếng thì không cần phải bật cả quạt, vì dầu có nhiệt dung khá lớn, vẫn có thể chịu được! Quạt có công suất khá lớn đến 120W, nên nếu chỉnh tốc độ cao hơn thì hệ thống sẽ còn mát hơn nữa, nhưng việc này không cần thiết, vì thứ nhất là ồn, thứ nhì là nhiệt độ CPU đã dưới 60°C, không cần phải giảm thêm!

Hệ thống hoàn toàn có thể chạy heavy – duty liên tục thời gian dài, nhưng phải chấp nhận có chút tiếng ồn! Còn với nhu cầu sử dụng bình thường hàng ngày thì khá im lặng! Ngồi chỉnh sửa cái video này bằng phần mềm Blender trên Debian, dùng ngay con Aquarium-PC này, vì chưa rành Blender nên chỉ sửa video ở mức đơn giản. Render video 1080 mà nhiệt độ CPU vẫn chưa qua mức 52°C, đương nhiên đây chỉ là một đoạn video ngắn! Đến đây thì xem như hoàn thành, cái “bể cá” cố định một bên trên bàn làm việc, sẵn sàng cho những công việc hàng ngày, cũng như các nhiệm vụ heavy – duty, các tác vụ cần “hiệu năng tính toán cao” khác! Tản nhiệt dầu nói cho đúng có rất nhiều điểm bất lợi: hệ thống cồng kềnh, nặng nề, khó sửa chữa nâng cấp, dầu mà rò rỉ ra ngoài là rất phiền, nhưng cũng có những ưu điểm nhất định, có thể giử nhiệt toàn hệ thống ở mức thấp sẽ khiến máy “thọ” hơn!

Nó tản nhiệt cho toàn hệ thống, cả nguồn, mainboard, RAM, SDD, GPU, tất tần tật… (chứ không phải riêng mỗi con CPU). Có nhiều điều nhận ra trong quá trình thực hiện cái Aquarium-PC – máy tính – bể cá này! Nó kiểu giống như cái… “bánh mì gà”, khi nhỏ, thèm ăn bánh mì gà lắm, ngon vô cùng, nhưng khi lớn rồi tìm lại thì thấy… nó không ngon như ngày xưa nữa! Khi xưa thích cái khái niệm “máy tính – bể cá” này lắm, nhưng đến khi làm được rồi thì lại thấy nó bình thường, chẳng có gì quá hấp dẫn nữa! Nhưng nói vậy không có nghĩa là toàn bộ quá trình làm đều vô nghĩa. Ít ra nó cũng tạo ra một vật xài được, và cũng học được nhiều bài học kinh nghiệm trong quá trình làm! Nếu phải làm lại cái Aquarium-PC này, tôi sẽ có những phương cách khác, sẽ áp dụng những giải pháp khác, hiệu quả và gọn gàng hơn, hoặc tiến tới làm tản nhiệt 2-pha đúng nghĩa, thay vì chỉ tản nhiệt đơn giản 1-pha cổ điển!

trên núi đồi Mãn Châu

Trên núi đồi Mãn Châu – On the hills of Manchuria! Trở lại một chút cái cái mood nhạc Nga, nếu nghe kỹ (và đọc lời) thì mới thấy rằng, bài ca là sự than khóc, cầu nguyện được ngụy trang (a mourning and praying in disguise), tác giả bài hát, nhạc sĩ Ilya Alekseevich Shatrov, đã có mặt ở đó, đã chứng kiến tất cả… là thành viên của băng nhạc Trung đoàn Mokshansky trong trận Phụng Dương (Mukden) với quân Nhật!

Chỉ 700 trong số 4000 người ban đầu của Trung đoàn còn sống sót sau trận chiến phá vòng vây, và băng nhạc thì… chơi nhạc để động viên tinh thần binh sĩ trong suốt thời gian chiến trận đó! Bài ca được viết sau đó để tưởng nhớ những đồng đội đã ngã xuống! Chiến tranh cũng đồng nghĩa là chết chóc, thương đau, chỉ là anh đối diện với nỗi đau như thế nào mà thôi… Bài ca trên nền clip phim Anna Karenina (2017).

aquarium pc, phần 8

Để cho nó chạy chục ngày, lúc này dầu bắt đầu loang màu và mờ đục, không còn trong như trước, dù muốn dù không, các thành phần, vật liệu cấu thành nên cái “hồ cá” đều có sự “ô nhiễm” nhất định. Phát hiện quan trọng nhất là loại keo nến (silicone) dùng để gắn kết, cố định các chi tiết bắt đầu… tan ra trong dầu khoáng, điều phi lý hết sức, vì dầu khoáng là chất tương đối “trơ – inert” ở nhiệt độ thông thường! Nhưng đó là sự phi lý bạn phải chịu khi làm một cái gì đó ở VN, các loại vật liệu, hóa chất đều bị “độn”, bị “pha”, trở nên không đúng với thuộc tính ban đầu! Vì silicone tan ra nên làm cho dầu khá đục, phải tháo dầu ra! Suy nghĩ ban đầu là có thể lọc dầu cho nó trong trở lại, nhưng nghĩ kỹ thì thấy không đúng, các phần tử màu đa số đều có kích thước tới nanomet, các loại lưới lọc micromet không thể làm gì được! Thế là đành phải… thay dầu, hy vọng là chỉ phải thay một lần này mà thôi!

Cũng nhân lúc xả dầu ra này mà chỉnh trang lại hệ thống chút đỉnh, thay cái máy bơm mới công suất nhỏ hơn chỉ 25W (ban đầu mua bơm đến 50W, tính hơi dư), cái bơm mới là hiệu Channing! Chúng ta gọi đó là “hàng Trung Quốc”, nhưng chuyện nó không giống như trước đây đâu, hàng TQ cũng có vô số chủng loại, phân khúc, bơm hiệu Channing được xem như là cấp chất lượng cao nhất trong làng “thủy sinh, cá cảnh” rồi, cao hơn cả bơm chuyên dùng cho máy tính! Chỉnh tốc độ ở mức vừa phải, bơm chạy không hề gây ra bất kỳ một tiếng động nào! Trục máy bơm làm bằng gốm sứ, không bị ăn mòn như thép, cộng với việc đặt chìm trong dầu xem như chất bôi trơn, nên có chạy liên tục nhiều năm cũng không sao! Chỉnh trang lại ngoại thất / nội thất cái “bể cá” lại một tí, không dám xài keo nến nữa, phải xài epoxy! Đem cái khung gỗ chà nhám, ra đi thêm một lớp epoxy nữa cho nó đều màu!

Thay cái bảng điều khiển mới, bỏ các công tắc điện “đểu”, đi dây lại cho gọn gàng hơn! Nhìn nó chạy cỡ một chục ngày qua mà suy nghĩ mãi về vấn đề tản nhiệt! Tản nhiệt không dùng quạt rất khó, vẫn có thể làm được nhưng khi đó cái tháp tản nhiệt nó sẽ to bằng hay hơn cái máy tính, còn dùng quạt thì lại quá dễ dàng! Cái máy tính nguyên gốc rất ồn vì nó có đến 8 cái quạt, mỗi cái có công suất, tốc độ, và chất lượng khác nhau, 8 cái quạt chạy cùng lúc tạo thành bản “hợp xướng âm thanh” vô cùng khó chịu, nếu giảm xuống chỉ còn một cái quạt, nhưng chất lượng tốt thì tiếng ồn tuy vẫn còn nhưng sẽ giảm đáng kể! Thế là đặt mua cái quạt 36 x 36cm, và mạch điều chỉnh công suất thay đổi tốc độ quạt quay, lắp vào phía sau tản nhiệt như trong hình! Lắp ráp tất cả vào, và lại stress-test – thử đầy tải, kết quả mỹ mãn, có thể chạy các tác vụ heavy-duty liên tục nhiều ngày, sẽ nói rõ hơn ở phần sau!

aquarium pc, phần 7

Từ console Linux, gõ một lệnh là chương trình stress-test – thử đầy tải bắt đầu chạy, các con CPU đều sử dụng hết 100% công suất, chạy liên tục 6 tiếng. Kết quả là nhiệt độ CPU bị đẩy lên đến 70~75°C, và nhiệt độ dầu lên đến ~55°C! Trong các hình, nếu tinh mắt sẽ nhận ra một cái nhiệt kế điện tử dùng để đo nhiệt độ của môi trường dầu, và nhiệt độ dầu luôn thấp hơn nhiệt độ CPU khoảng 15~20°! Trở lại với stress-test, kết quả này là tệ hơn so với việc dùng tản nhiệt nước, khi dùng tản nhiệt nước, nhiệt độ CPU luôn dưới 65°C trong các bài kiểm tra đầy tải, nhưng thực ra, điều này đã nằm trong dự tính từ trước khi bắt đầu bắt tay vào làm con Aquarium-PC này! Có nhiều yếu tố ảnh hưởng đến nhiệt độ, đầu tiên là dầu khoáng tải nhiệt của toàn hệ thống: CPU, GPU, SSD, RAM, main, và cả cục nguồn (đây vốn là nguồn sinh nhiệt nhiều nhất), còn tản nhiệt nước chỉ dùng cho mỗi con CPU mà thôi!

Điều đáng nói là nhiệt độ của toàn hệ thống vẫn luôn được giữ ở mức thấp: RAM, SSD, GPU… luôn dưới 55°C! Còn nhiệt CPU tuy khá cao, nhưng vẫn chưa chạm mức nguy hiểm (85+°C). Yếu tố thứ hai là do tản nhiệt không dùng đến quạt gió, và tôi nhất quyết không dùng quạt để không gây ra tiếng ồn, để hệ thống chạy hầu như hoàn toàn im lặng! Và điều thứ ba nữa là thiết kế của tản nhiệt là tối ưu cho các quạt gió (forced air cooling) chứ không tối ưu cho tản nhiệt tự nhiên, và thứ tư nữa là có thể kích thước cục tản nhiệt chưa đủ lớn! Điểm đáng lưu ý là dầu khoáng có nhiệt dung riêng (specific heat capacity) khá lớn, lớn hơn nước rất nhiều (đó cũng là lý do tại sao bỏng dầu luôn nghiêm trọng hơn bỏng nước sôi, vì dầu có khả năng mang nhiệt lượng lớn hơn nhiều), cái nhiệt dung riêng này làm trễ các kết quả đo, cần phải thực sự stress-test nhiều giờ mới đọc được các con số có ý nghĩa!

Kết luận: hệ thống hoạt động như mong đợi, tải nhiệt tốt với các ngữ cảnh sử dụng thông thường, hoặc tải nặng trong vài giờ, nhưng chưa tản nhiệt tốt đến mức có thể dùng cho các tác vụ heavy – duty, chạy 100% công suất liên tục 24/24, ví dụ như dùng để đào “coin”, mặc dù dùng máy không phải cho mục đích đào tiền ảo, mà dùng để phân tích và xử lý số liệu, lên đến hàng trăm GB! Thường là như thế, khởi đầu một công việc gì đó thì chưa đâu, nhưng có khi, ngay khi vừa kết thúc nó xong, là tự ngộ ra được chỗ ngu rồi! Từ đây, có 3 khả năng phát triển tiếp: #1: không làm gì cả, hệ thống đã đủ tốt cho các công việc phổ biến thông thường! #2: Tìm một cái tản nhiệt có kích thước & thiết kế tốt hơn cho việc tản nhiệt tự nhiên, và #3: lắp các quạt gió phía sau tản nhiệt, và lập trình điều khiển quạt gió quay với tốc độ tỷ lệ với nhiệt độ cảm biến (chỉ xài đến quạt khi chạy tải nặng thời gian dài)!

torii gate

Cổng Torii thường thấy trong các công trình kiến trúc cổ Nhật Bản là một kiểu kiến trúc rất kỳ lạ! Để đánh dấu, phân biệt về địa giới, khu vực, như cổng Tam quan của VN, cổng Bài Phường của TQ, trong hầu hết các trường hợp, chính là đánh dấu một ranh giới rất rõ ràng! Nhưng cổng Torii đôi khi được xây ở những nơi rất “trời ơi đất hỡi”…

Nó đôi khi chẳng đánh dấu một ranh giới địa lý nào rõ ràng, xuất hiện “in the middle of nowhere”, như ở giữa khoảng không trống rỗng vậy! Nên, thay vì gợi ý sự dịch chuyển trong không gian vật lý, địa lý, cổng Torii tạo nên ẩn dụ rằng sự dịch chuyển, biến chuyển này không nằm trong thế giới vật chất, mà nằm ở trong… tâm!

aquarium pc, phần 6

Cuối cùng là khâu hoàn thiện và lắp đặt… quét hai lớp epoxy pha loãng với màu cánh gián, nửa chừng thì… hết màu, lười chạy đi mua, đành chấp nhận để cái màu hơi nâu nâu, không được thật nâu bóng như vậy! Ráp cái hồ cá vào vị trí bên trong khung gỗ, cố định lại bằng 4 con vít tại các mấu làm sẵn, rồi đi các dây nối lên bảng điều khiển, các mối nối đều được hàn chì và bọc nhựa và bọc keo nến lại chắc chắn, kiểm tra kỹ vài lần xem có sai sót gì không! Mấy cái công tắc điện mua trên Shoppee về lắp vào, cắm điện vào bật lên nghe nổ cái kịch… một cái công tắc cháy, may mà mình đã cẩn thận, phòng xa lắp sẵn một cái cầu chì bảo vệ! Khả năng đi dây lỗi hầu như không có, gì chứ đi dây, hàn chì là mình có nghề lắm! Xem xét một hồi kết luận là các công tắc này là dùng cho điện một chiều, miễn cưỡng dùng cho điện xoay chiều vẫn được, nhưng các bóng đèn LED đều không chịu nổi điện thế và… cháy!

Thế là đành chấp nhận sự không hoàn hảo thứ hai, các nút nguồn không có đèn LED chiếu sáng, mặc dù vẫn bật tắt được! Tiếp đó phát hiện ra trong 5 cái công tắc có 1 cái không chịu chạy, mịa, thế là tính năng bơm khí, sủi bọt tạm thời chưa làm việc, đành để đó sửa sau vậy! Rất bực với hàng mua trên các trang thương mại điện tử, đôi khi rất phiêu, không có cách nào kiểm tra quy cách và chất lượng, gây mất nhiều công sức và thời gian chỉ để đi sửa sai! Lắp tản nhiệt vào phía sau, rồi nối hai đầu ống máy bơm và xiết lại bằng cổ-dê (hose clamps). Đến đây là xem như việc chế tạo cơ bản hoàn tất! Tiếp theo là “giây phút của sự thật – the moment of truth”, mở nắp đậy ở phía sau và đổ vào 10 lít dầu khoáng, khởi động máy bơm cho dầu luân chuyển bớt sang phía bên cái tản nhiệt, rồi đổ tiếp vào thêm 8 lít nữa là vừa đầy! Rồi vừa chắp tay cầu nguyện, vừa bấm nút nguồn khởi động máy tính!

Máy khởi động vào màn hình đăng nhập của hệ điều hành Debian, mừng hết lớn, thế là đã chạy được! Chạy êm ru không một tiếng động, ngồi bên cạnh không nghe thấy gì, chỉ áp tai vào thùng máy mới nghe tiếng máy bơm rì rì, be bé! Kiểm tra sơ qua xem có rỏ rì dầu chỗ nào không dọc theo đường ống, có vẻ như tất cả đều hoạt động tốt! Như thế là coi như qua được phần wet–smoke-test – bài kiểm tra ướt! Máy rất nặng, cân đến 37kg, trong đó có khoảng 17 kg dầu, không hiểu phần còn lại sao khối lượng lớn thế! Theo dõi nhiệt độ của 2 con CPU thấy thường xuyên ở mức 45 ~ 50 độ C! Đương nhiên, chạy với tải nhẹ thì nhiệt độ như thế chưa nói lên điều gì, phải stress – test – thử đầy tải nhiều tiếng đồng hồ liên tục rồi mới có thể có kết luận được! Nhưng đó sẽ là nội dung của phần sau, còn giờ thì châm điếu thuốc, xoa tay hài lòng ngồi ngắm thành quả lao động lấp lánh, lung linh đã!

aquarium pc, phần 5

Dùng mũi phay (router) để tạo cái đường viền (phào chỉ) kiểu khung tranh, bao quanh cái khung hồ cá, vừa tạo ra một điểm nhấn, vừa giúp giấu đi một số “phốt” trên mặt kính acrylic gần ngay các mối nối. Tranh thủ làm luôn cái khung cho con iPad cũ, biến nó thành bức tranh treo tường và đồng hồ báo thức (chắc phải viết cái app nhỏ, kết hợp báo thức, ảnh nền, nhắc lịch, chơi nhạc, và vô số những việc linh tinh khác cho “bức tranh treo tường”, nhưng đó sẽ là một project DIY khác kế tiếp)! Phần khá phức tạp là tạo cái “bảng điều khiển”, bao gồm các nút: nguồn tổng, nguồn máy bơm, nguồn máy tính, các lỗ cắm USB và audio! 25 năm trước, loay hoay hoài mà không cắm được dây power/reset của máy tính, 25 năm sau vẫn phải lên mạng tra cách đấu dây. Nói chút về nút reset, đây là một tính năng đã rất lạc hậu, máy tính giờ hiếm khi xài đến nút reset, nếu cần reset thì chỉ cần tắt nguồn bật lại!

Nên rút jumper reset ra khỏi mainboard, cắm vào bộ điều khiển đèn LED, lúc này nút reset mang công năng mới, trở thành nút điều khiển LED, bật, tắt, chuyển qua lại giữa các chế độ chiếu sáng khác nhau! Khi cần tập trung làm việc thì chỉ nhấn một cái là tắt hết các thể loại nhấp nháy xanh đỏ, tím vàng kia đi cho bớt xao nhãng. Làm mộc cực kỳ bụi và bẩn, nhất là những ngày chuẩn bị nắng nóng này, có rất nhiều việc vô danh, linh tinh, không kể hết ra ở đây được, nhưng làm cái Aquarium-PC này tốn một số ngày công đáng kể! Ví dụ như làm 2 cái tay nắm bên trên, nhìn đơn giản như vậy, nhưng bên trong phải gia cố bằng 1 thanh sắt tròn + 2 con vít lớn, vì Aquarium-PC này rất nặng (lên đến 25 ~ 30 kg), tay nắm bằng gỗ thông thường sẽ không chịu nổi sức nặng khi bưng bê cái máy đi, lại phải đem cái máy hàn que ra, việc mà tôi rất ghét vì kỹ năng hàn của tôi dở tệ, luôn nham nhở như chó liếm!

Cái tản nhiệt cũng phải chế độ lại chút xíu, cắt bớt đi những phần không cần thiết để lắp vào trong khung gỗ được gọn gàng hơn! Các đầu nối ống của dàn tản nhiệt cũng phải chế lại để việc lắp ống dẫn dầu thuận tiện hơn, bớt đi các “khúc co” không cần thiết để dòng chảy chất lỏng bên trong được suôn sẻ, bớt cản trở! Cái két tản nhiệt này có một cửa xả đáy, dùng trong trường hợp cần phải rút dầu ra ngoài, đây cũng là tính năng ít khi xài tới nhưng thực ra cũng khá cần thiết, vì cũng có khả năng là sau một thời gian chạy, các thiết bị, chi tiết máy móc điện tử sẽ… loang màu và các màu này sẽ làm dầu khoáng không trong, không đẹp nữa, phải thay dầu, hoặc cũng có thể cần xả dầu để tháo máy ra sửa chữa nâng cấp. Vẫn còn khá nhiều việc phải làm để hoàn tất cái Aquarium-PC này, nhưng chỉ cuối tuần mới làm nhiều được, trong tuần chỉ có thể làm 1, 2 tiếng / ngày nên tiến độ rất chậm!

aquarium pc, phần 4

Nói chút về các loại tản nhiệt máy tính: tản nhiệt nước vốn đã rất hiệu quả, nhưng chỉ áp dụng được với các thành phần chủ yếu như CPU, GPU, không dùng cho toàn hệ thống được. Tản nhiệt khí tuy cũng khá hiệu quả nhưng phải dùng đến các quạt thổi, mát nhưng ồn ào. Muốn loại bỏ quạt (forced air cooling) thì buộc phải làm cái tản nhiệt thật lớn và dựa vào trao đổi nhiệt tự nhiên với môi trường! Đó cũng là lý do cái Aquarium-PC này xài cái tản nhiệt đến 40×50 cm, mà tôi vẫn cảm thấy là… chưa đủ (nếu mà không đủ nữa thì ta… xách cái quạt để sau lưng máy tính!) Nhiều người đã làm cả cái cooling-tower to… hơn cái máy tính, không xài đến quạt, chỉ gồm các lá tản nhiệt! Lắp các thiết bị vào rồi nhìn tới nhìn lui vẫn không hài lòng, lại tháo ra, bố trí cho hợp lý hơn về sử dụng không gian, có quá nhiều dây nhợ, 2 sợi cáp mạng, 2 sợi cáp audio, 4 sợi cáp USB, 2 sợi cáp màn hình, và vô số cáp điện!

Tiếp theo là công đoạn smoke test – đương nhiên chỉ mới test khô chứ chưa phải là test ướt thật sự với dầu khoáng! Khởi động máy tính vài phút, kiểm tra mọi thứ có làm việc tốt hay không, rà soát lại kỹ càng bởi cho vào “bể cá” rồi là sẽ khó thay đổi, sửa chữa, mặc dù vẫn làm được. Rồi lại sắp các vật trang trí vào, lúc này mới để ý thấy loại sỏi trắng rải nền… hơi “ướt”. Trừ một số loại đá như magma rất đậm đặc, khô ráo, nhiều loại khác vẫn có chút tính “xốp” và chứa một lượng nước nhất định, nước này dù ít mà cho vào hệ thống máy tính là không được! Thế là đem đống đá bỏ vào lò vi sóng, quay tới quay lui một hồi cho đến khi nó khô hẳn thì thôi! Tiếp theo đi lại hệ thống dây điện cho gọn gàng, có đến 3 hệ thống điện riêng, điện cho máy tính, điện cho các loại đèn, và điện cho máy bơm + máy thổi khí. Đến đây phần “hồ cá” cơ bản là hoàn thành, quay lại với công việc yêu thích là… làm mộc!

Đóng một cái khung gỗ bao ngoài hồ cá, có khiêng cái hồ làm bằng nhựa acrylic trên tay, trong chứa 20 lít nước (test xem có rò rỉ chỗ nào không) mới thấy hồ cá dù sao cũng khá là mong manh dễ vỡ, cần phải có thêm một lớp bảo vệ bên ngoài, cái thùng gỗ này cũng chứa luôn cái két tản nhiệt ở phía sau! Từ khi bắt đầu làm mộc đóng thuyền đến nay đã chục năm có dư, nhưng luôn làm mọi thứ theo kiểu… để chạy được – functional mà thôi, chưa bao giờ quá quan tâm trau chuốt hình thức bên ngoài! Nhưng cái Aquarium-PC này là ngoại lệ, tuy cũng không công phu gì, nhưng lần đầu tiên có sự chú ý để cho nó mang dáng vẻ “đồ nội thất”, bo viền, bo góc, đánh véc-ni màu gỗ… Đến đây mới nghĩ lại, nếu 15 năm trước mà mình làm cái Aquarium-PC này thì thất bại là chắc chắn, vì… tay nghề vụng về, kỹ năng không có, những năm đóng xuồng ít ra cũng đào tạo mình trở thành một con người khác!