Sức dài vai kô rộng

hihi

Tôi nghĩ mình là một thằng điên.Một thằng điên chính hiệu khi luôn tự dằn vặt bản thân mình bởi những chuyện éo le không có lối thoát.Nghĩ xem , 1 kẻ như tôi loay hoay ở tiệm sách mô tả người bán sách cái loại sách mình định mua , tôi định nói nhan đề nhưng tôi quên mất.Khốn nạn hơn là tôi quên mất mình vốn là cái hạng sướng ca vô loài , không có mục đích và chủ nghĩa sống nhất định .Thế thì mua sách đọc ở đây là điều hết sức hợm hĩnh và hoang tưởng.Àh mà sẽ thật hay nếu bạn biết tôi đang nung nấu 1 ý tưởng cực kì bệnh hoạn thế này

Đang bán sở hữu 1 kho ebook về System – Hacking – Programming – Peopleing.Giải thích thêm Peopleing có nghĩa là sách dạy làm người , nó có thể là 1 tuyển tập vô số truyện ngắn của lũ chính trị gia , lũ quan chức , hoặc lũ bệnh hoạn thích khoe mình ngu viết.Tôi không biết có tên cho những loại sách đó không nhưng tạm thời tôi gán cho nó 1 cái mác Peopleing.Và bởi vì nhiều sách như vậy tôi nghĩ tại sao mình lại không làm 1 thư viện ebook online nho nhỏ để chia sẻ cho mọi người cùng đọc.Và tất nhiên nó hoàn toàn miễn phí.

Continue reading

Forever and One or Everlasting

heineken

Sống để gặp nhau
Con người ta tồn tại và thụ hưởng như 1 sự đa nhân cách được sắp đặt sẵn từ số phận.Có thể đó không phải là 1 lỗi lầm , cũng chẳng phải là 2 dấu gạch kẹp giữa 1 khái niệm như 1 sự khẳng định giá trị đúng đắn tuyệt đối của nó , nhưng tôi nghĩ cái gì cũng có giới hạn hoặc 1 điểm dừng , nơi đó có tôi , có bạn của bây giờ , quá khứ và cả tương lai nữa.
Có đôi khi con người ta vững mạnh 1 niềm tin vào những thứ tưởng chừng như không thể đổ vỡ , những giá trị sống to cao và lớn lao như 1 đức tin mãnh liệt vào sự đổi thay của cuộc đời này.Bản thân tôi đã từng thế đúng hơn là đã rất nhiều lần như thế và cứ mỗi lần tin thế tôi lại sờ được một điều gì đó trong sáng hơn hạnh phúc hơn

Continue reading

System Administrator

SYsadmin

Vân nhà tôi hay hỏi tôi thế này
Thực ra anh làm nghề gì ?


Lần nào tôi cũng chỉ cười cho qua chứ không trả lời.Không phải là vì tôi không muốn nói hay có ý che giấu , vì có muốn che dấu cũng chẳng được.Cả tâm can , tiếng thở của tâm hồn tôi cô ấy còn biết thì che giấu gì mấy việc này.Nhưng cứ lần nào cũng vậy , hỏi là không trả lời.
Tôi nghĩ nghề của tôi luôn bị hiểu nhầm với nhiều nghề , bản thân tôi đã làm nó hơn 2 năm nay rồi nhưng thật lòng chưa lần nào giải thích hay dẫn dắt nó cho người nghe hiểu được.Tôi làm System Administrator chứ không làm Network Administrator.Bản thân định nghĩa của 2 nghề này cũng khác nhau rất nhiều , nhưng vì ta đang sống ở Việt Nam và vô tình 2 nghề này bị đánh dấu nhầm là một.
Hôm rồi về NhaTrang khi bồi thẩm đoàn hỏi tôi đang làm nghề gì thì tôi trả lời luôn tôi làm Quản Trị Hệ Thống.Họ nói Quản Trị Hệ Thống thì đơn giản chỉ là đi trông coi và chăm sóc các máy tính hoặc cao hơn là duy trì sự hoạt động của 1 trang Web.Tôi phì cười định giải thích cặn kẽ hơn nhưng mà không được vì ở đây không như ở nhà.Thế là ở đó những người ngồi dưới sẽ vô tình hiểu rằng System Administrator = Help Desktop + Web Developer .Tôi không trách họ mà thực ra nói đúng hơn là tôi cũng chẳng có quyền gì trách họ , ở đây về mặt cá nhân tôi chỉ có quyền khinh họ thôi.
Có điều này không chỉ ở Việt Nam mà 1 số nước trong khu vực Đông Nam Á tôi đã từng đi qua họ đều hiểu System nghĩa là 1 máy tính cá nhân (Individual PC).Thế nên System Administor là người phải đi quét dọn virus , đi cài đặt các phần mềm (Sofware – Game v.v….).Nó không sai nhưng thật sự nó chỉ là 1 chương trong cái nghề SySAdministrator.
1 hệ thống lớn là bao gồm sự hoạt động của rất nhiều máy tính (Desktop – Laptop – Server) & vô số các thiết bị ngoại vi (Print , Scanner , Modem , Router v.v….).Những máy tính này làm việc và tương tác được lên nhau thông qua môi trường Network.Nó thuộc sở hữu của 1 cty 1 tổ chức hoặc có thể là 1 cá nhân lắm tiền nào đó.Nhưng nó được vận hành và quản lí dưới quyền của SystemAdministrator.Tất cả những hoạt động như lướt Web – chia sẻ File -  chơi Game – Chat chit đều là 1 sự tương tác nhỏ vào hệ thống.Nó là 1 mớ bòng bong và rối ren và đã là rối ren phức tạp thì nó cần được xử lí dưới bàn tay của SysAdministrator.
SysAdministrator quản lí hệ thống dưới vô vàn sự cố , lỗ hổng , mối đe dọa từ bên trong và bên ngoài.Họ duy trì hệ thống mạng và sắp xếp tài nguyên cho người dùng đạt được sự tiện dụng dễ dàng nhất.Họ Backup dữ liệu và Restore nó khi cần .Họ security cho hệ thống bằng nhiều phương pháp đã được kiểm định và thông qua từ ban lãnh đạo.Àh họ còn xây dựng mạng và điều phối nó nữa .Tôi nghĩ và tất cả những người đã từng là 1 SysAdministrator đều nghĩ nó không bao giờ dễ dàng.Nó đòi hỏi bất cứ SysAdministrator nào cũng phải có 1 kiến thức nền tảng vững chắc từ Network – Program , những tip – trick sử lí xự cố , thậm chí là cả những ma lanh khôn lỏi để phục vụ cho nhu cầu công việc lúc cần thiết.
Tôi làm SYSadministrator đến nay cũng được 2 năm.Kinh nghiệm không dám nói là nhiều , kĩ năng thì lại càng không dám phô trương nhưng tôi nghĩ.Thách thức của nghề này là xây dựng 1 hệ thống máy tính , toàn bộ hệ thống mạng và tài nguyên mạng từ Client – Server.Để nó làm việc cùng nhau , làm tốt , làm ổn .Sống chung dưới 1 mái nhà cơm chẳng lành canh chẳng ngọt là chuyện bình thường.Cái khó là bạn phải làm sao làm được như tôi nói.
Chắc chắn sẽ có nhiều mối nguy hại đe dọa hệ thống của bạn lắm nhưng nếu bạn là 1 SysAdministrator giỏi bạn sẽ không mất nhiều thời gian vì nó đâu.Tin tôi đi tôi đang nói thật đó.
Có một sự thật thế này.Nếu máy tính gặp vấn đề và mạng gặp sự cố.Mọi người đều nghĩ ngay đến người SysAdministrator.Thực ra ở các nước phương tây với trình độ hiểu biết tiên tiến 1 SysAdministrator sẽ không phải mó tay vào những chuyện này nhiều vì nếu máy tính gặp sự cố thì sẽ có Help Desk – Mạng gặp sự cố sẽ có Network Administrator.

- Nếu nói như vậy có nghĩa là SysAdministrator sẽ chẳng phải làm gì àh ? sẽ ăn rồi chơi cuối tháng kiếm tiền àh ?

+ Không phải đâu SysAdministrator sẽ phải mó tay vào toàn bộ nhưng họ thường đưa ra những giải pháp để từng bộ phận thi công .

- Nếu nói vậy thì có nghĩa SysAdministrator là cấp quản lí àh , sẽ là những kẻ ngồi chỉ tay 5 ngón àh ?

+ Càng không phải SysAdministrator sẽ mó tay vào bất cứ thứ gì miễn là hệ thống được chu toàn .Nếu HelpDesk không làm được thì không có nghĩa SysAdministrator không làm được …Và chúng ta cứ mường tượng như vậy với các bộ phận khác như Network Administrator – Programming – Security v..v…..


Ngày mai  là ngày thứ 6 cuối cùng của tháng 7.Và nó được gọi là System Administrator Day .Tôi viết bài này như 1 lời cảm ơn đến cái nghề này cũng như cảm ơn đến những con người đã hết mình với nghề này.Trong mắt tôi họ là những người nhiều hoa tay.Họ rất khéo tay và rất cô đơn nữa.Tôi mong khi Vân nhà tôi đọc hết bài này cô ấy sẽ gọi cho tôi như 1 lời chúc mừng như 1 bó Hoa Sen cho người Quản Trị Hệ Thống

Tái búi : Anh yêu em .Anh mong em đã hiểu.Úm ba la hết suy nghĩ tiêu cực này.Hết lăn tăn sao anh cứ úp úp mở mở này.Hôn em

Giả sử Ubuntu nhiễm ?

hacking

Mấy hôm rồi , tôi bận đi xa thế nên không check mail thường xuyên được.Mãi đến hôm nay về tôi mới tranh thủ login vào tài khoản mail để xem có cái nào thân thiện được lũ HR nhét vào Inbox không.Toàn là mấy cái thứ mời linh tinh , nhưng không phải không có những mail đáng để đọc.Tôi nhận được một mail với nội dung thế này


Anh ơi , Em rất quen anh và em biết anh sử dụng *nix vào mọi việc.Vậy giả sử 1 ngày nào đó *nix bị dính virus anh sẽ xử lí ra sao ạ
Em trai xa xứ của anh


Hà hà thế là với hàng ngàn hàng tá hỗn độn u mê tôi mới tự làm khó tiếp mình thế này


Nếu giả sử 1 ngày ubuntu bị nhiễm thì sao
?

Không phải tự nhiên tôi lại chọn Ubuntu mà không hỏi Fedora , BSD , Centos v.v….Đơn giản tôi sử dụng ubuntu là nhiều và cũng quen với “bản tính” nó có.Thường khi con người ta tìm hiểu 1 vấn đề gì đều muốn xét từ những thứ gần gũi thân thuộc nhất với họ.Tôi cũng thế , không khác gì cả

Tôi nghĩ thế này

- Windows dễ bị hack vì Windows được dùng quá nhiều , và vì quá nhiều nên cái gì Windows đưa ra cũng sẽ bị soi mói dưới vô vàn con mắt của những Attacker – Hacker
- Không có virus nào dành cho Linux phát tán trên Internet vì:

+ Hầu hết các phiên bản Linux dành cho người dùng bình thường đều có tài khoản mặc định không phải root. Người dùng có thể chạy chương trình/script độc hại tha hồ, nhiều nhất là dữ liệu của người dùng đó bị ảnh hưởng, không vấn đề gì đến hệ thống. Người dùng Windowws không thể tránh khỏi dùng tài khoản admin trong hầu hết trường hợp, ngay cả làm các tác vụ rất đơn giản.

+ Hầu hết các chương trình của Linux đều được cài qua 1 package manager, và có nguồn đáng tin cậy (như từ repository của distro đó),người dùng Linux đã quen với việc kiểm tra độ tin cậy của 1 phần mềm download từ trên mạng bằng cách hỏi qua forum, search hoặc qua IRC.Người dùng Windows, hoặc vì quen dùng phần mềm bị crack, vì quảng cáo (free, tăng tốc độ hệ thống, báo lỗi hệ thống dỏm)… sẵn sàng mở bất kì 1 chương trình nào đó trên mạng ma không hề nghi ngờ.

+ Hầu hết chương trình của Linux là mã nguồn mở, khả năng các đoạn code có hại được phát hiện trong chương trình là rất cao (thường có thể được phát hiện tự động bằng chương trình hoặc scripts), lỗi được sửa tính bằng giờ, thậm chí phút sau khi được phát hiện.

Tóm lại:

- Linux không có (và không cần) các chương trình linh tinh để “tăng tốc hệ thống” như trên Windows, các cải tiến quan trọng luôn được update vào nhân Linux và chương trình. Khả năng nhiễm virus là không thể (điều đó cũng chiếm phần lớn cac trường hợp nhiễm virus trên Windows).

- Thông tin về phần mềm có hại phát tán rất nhanh trong cộng đồng mã nguồn mở.

- Người dùng Linux luôn được khuyến khích KHÔNG chạy bất kì chương trình nào bằng tài khoản root, trừ khi nó có mục đích rõ ràng và đã được kiểm tra kĩ.

- Có nhiều cách để thử 1 chương trình không rõ nguồn gốc mà không ảnh hưởng đến hệ thống chính: chroot, Virtual Machine, chạy bằng tài khoản người dùng khác giới hạn hơn…

Thế nên chuyện bị dính Virus có lẽ là điều khó tưởng tượng ra đối với Ubuntu , tuy nhiên cái gì cũng có thể bị phá vỡ , luật bất thành văn.Chắc chắn không có gì bền vững mãi được

- Theo lối mòn tôi sử dụng 1 Antivirus cho hệ điều hành mã nguồn mở của tôi àh ? Kaspersky – Avira – nghe hơi bị nực cười và ấu trĩ
- Hay sử dụng vài câu lệnh để tránh sự lây lan , giảm thiểu sự thiệt hại do virus gây ra và lại tìm đến các thầy chỉ bảo cách diệt con này
…..

Tôi lại sắp hoảng lên với cách nghĩ này rồi.Thôi tôi hướng dẫn bạn 1 cách để tạm quên đi cái lo lắng về Virus với các *nix nhé.

1.Tôi download gói phần mềm Avast Antivirus for linux vì tôi thấy mấy cao nhân đắc đạo bảo cái giống này giao cấu tối với *nix

2.Save file và mở nó dưới kiểu Gdebi Package installer

Open Avast installer with GDebi package installer

3.Chọn Install Package và gõ PassWord

4.Sau phần chờ đợi và cài đặt bạn sẽ tìm được nó ở đây

Avast location

5.Đăng kí (Tạo 1 account trên trang chủ để lấy licensed) – Update Database và Scan thôi

Update virus definitions

Hugepage

bluesky

Sáng 9h 04/07 tôi nhận 1 cuộc điện thoại ở HồngKông.Sếp của cty A là chỗ thân quen với tôi lâu năm nhờ tôi Care giùm 1 con Database Server.3 phút điện thoại đường dài tôi loáng thoáng hiểu được vấn đề mà Database Server này đang mắc phải.Tôi không vội nhận lời ngay để lão Sếp tiếp tục rót mật vào tai mình

” Anh không hiểu sao con Database Server của bên anh cứ chạy tầm 15 phút là lên đường , treo cứng ngắc.Bây giờ anh đang ở Hồng Kông nên không thể theo dõi và xử lí sự cố này.Em giúp anh xem xét thử ”

Cười khểnh ! Tôi biết với tài năng hạn hẹp của lão này cho dù có kè kè ở cạnh Server cũng không giúp được gì cho nó đâu.Đại loại đây là cái Khéo có phương tắc.

Mở máy tôi SSH thẳng vào con Database Server của bên A trên quyền RoOT.Bạn đọc đến đây đừng lầm tưởng tôi có khả năng biết được User & Pass của mọi hệ thống.Chẳng qua là nó đã đi kèm dưới dạng messeage từ ông @nh gửi đến tôi.:D

Chà 1 con server hơi bị khủng hoảng đây.16 CPU Intel Itanium 2 + 32 G Ram “sụm bà chè”.Chạy Database Oracle 10g.Tôi gõ liên hồi hàng loạt câu lệnh top , vmstat , iostat , sar ,oprofile.Mở vài cái “tail –f” trên alert Log của Oracle , không quên đăng nhập vào Oracle Metalink…Xong xuôi , tôi bật Oracle lên lại và thử cho người dùng kết nối vào lại

Chạy được đúng 20′, server lại “hấp hối”. top báo rằng CPU idle là 0%, trong đó iowait (iowait = network i/o + memory i/o + disk i/o) chỉ dao động từ 3-4%, user (các thao tác thuộc user space, Oracle process nằm ở đây) cũng chỉ tầm 5%-10%, còn lại tất cả tập trung dồn vào sys (các thao tác thuộc kernel space). Trong danh sách process list của top, kswapd liên tục dẫn đầu. Đây là điều bất thường so với baseline của server này. Lẽ ra user phải chiếm đa số, kế tiếp là iowait, rồi mới đến sys.

Rồi server bắt đầu swapping đến chóng mặt. iowait tăng lên, sys vẫn không giảm, user và idle luôn ở mức xấp xỉ 0%. Mà bạn biết rồi đó, một khi server đã swapping thì chẳng còn cách nào khác ngoài việc reboot nó. May mắn là tôi đã chuẩn bị sẵn lệnh shutdown Oracle trước khi quá muộn, thành ra lần này không cần reboot nữa.

Có hai câu hỏi được đặt ra:

- Tại sao sys lại chiếm đa số? kswapd đang làm gì?

- Tại sao với lượng RAM nhiều như thế mà iowait vẫn tăng lên và server bắt đầu swapping dữ dội?


05/07 9h40 Tiếp tục SSH vào server của cty


Kinh nghiệm trong quá khứ làm việc với Oracle cho tôi biết rằng, mọi câu hỏi liên quan đến Oracle đều có thể được trả lời trong Oracle Metalink (nếu sếp của bạn bắt bạn sử dụng Oracle nhưng không mua account Metalink cho bạn, lời khuyên là hãy xin nghỉ việc càng sớm càng tốt :-d).

Tôi bắt đầu tìm kiếm với các keyword có thể nghĩ ra được. Mất gần 1h mò mẫm mà tôi vẫn chưa tìm được bất kì tài liệu nào đề cập đến hiện tượng giống với tình trạng hiện thời của tôi. Cũng may là lúc này đã qua giờ giao dịch rồi, nên thời gian cũng tương đối rộng rãi hơn. Tôi quyết định dành ra 30′ nữa để tìm, trước khi tạo một service request yêu cầu sự hỗ trợ trực tiếp từ Oracle.

Ngoài tôi ra, các anh chị DBA (trực thuộc Cty) cũng ra sức tìm kiếm. Thường trong trường hợp như thế này, tất cả sẽ join vào một conference để tiện việc trao đổi thông tin. Đây là việc làm rất có lợi và cần thiết, bởi lẽ các anh chị DBA thường không rành lắm về Linux, còn bản thân tôi cũng không có nhiều kiến thức về Oracle.

Trong số các tài liệu được các anh chị DBA gửi lên conference, tôi chú ý đến một tài liệu có tên như sau: How to Configure RHEL 4 32-bit for Very Large Memory with ramfs and HugePages Note:317141.1 Type: WHITE PAPER.

Chà, “very large memory”, sao tôi không nghĩ đến keyword này nhỉ?

Lúc đầu tôi vẫn không nghĩ tài liệu này sẽ giải quyết được vấn đề, bởi lẽ nó ghi rõ ràng là 32-bit, trong khi hệ thống của tôi là 64-bit. Hơn nữa nếu tôi nhớ không lầm, HugePages chỉ có tác dụng cho hệ thống 32-bit mà thôi. Tuy thế, tôi vẫn mở nó ra xem; dẫu gì nãy giờ cũng tiêu tốn nhiều thời gian rồi, tốn thêm một chút nữa cũng không sao :-p.

Điều đầu tiên tôi nhìn thấy trong tài liệu là dòng:

This document aims to guide Linux system administrators on Red Hat Enterprise Linux 4.0 to configure Very Large Memory and big SGA for Oracle RDBMS with ramfs and hugepages

The configuration provided in this document applies strictly to 32-bit Linux. For HugePages on 64-bit Linux, see Note 361468.1

Chà, nó ghi là nếu muốn tìm hiểu về HugePages trên Linux 64-bit thì coi cái Note:361468.1. Như vậy có nghĩa là vẫn có thể áp dụng được HugePages cho 64-bit Linux àh? Tôi nhanh chóng tải cái Note:361468.1 về và quả thật, nó chính là thứ tôi cần tìm!

Hóa ra tôi hiểu nhầm về HugePages thật:

HugePages is a feature of the Linux kernel which allows larger pages to manage memory as the alternative to the small 4K pagesize. For a detailed introduction, see Note 361323.1.

There is a general misconception where the HugePages is a feature specific to 32-bit Linux. This document focuses on uses of HugePages on 64-bit Linux platforms.

Phần cuối của tài liệu này trông có vẻ rất promising:

Why HugePages Should Be Used on 64-bit Linux?

* Very Large Memory: The 64-bit systems do have VLM. So the general VLM issues apply.

* Not swappable: HugePages are not swappable. Therefore there is no page replacement mechanism overhead. HugePages are universally regarded as pinned.

* Eliminated page table lookup overhead: Since the pages are not subject to replacement, page table lookups are not required.

* Faster overall memory performance: On virtual memory systems each memory operation is actually two abstract memory operations. Since there are less number of pages to work on, the possible bottleneck on page table access is clearly avoided.

* kswapd: kswapd will get very busy if there is a very large area to be paged (i.e. 13 million page table entries for 50GB memory) and will use an incredible amount of CPU resource. When HugePages are used, kswapd is not involved in managing them.

Có vẻ như tôi đang đi đúng hướng rồi. Tôi quyết định đọc lại về HugePages để hiểu rõ hơn về nó. Một điều may mắn là trước đây tôi có đọc rất kĩ về phần memory management của Linux kernel trong cuốn Understanding The Linux Kernel, thành ra tôi không mất nhiều thời gian lắm để hiểu rõ HugePages.
HugePages là một tính năng được giới thiệu từ phiên bản Linux kernel 2.6. Linux sử dụng page như là đơn vị cơ bản của bộ nhớ – bộ nhớ vật lý được phân chia và truy cập theo từng page. Kích thước mặc định của một page trong kiến trúc x86 là 4KB, trong ia64 là 16KB, nghĩa là nếu tôi có 32G RAM, Linux sẽ tự động chia lượng RAM này thành 2^21 page, một con số khổng lồ.

Hugepages, như tên gọi của nó, giúp Linux tăng kích thước mỗi page lên, nhằm mục đích giảm số lượng page. Với kiến trúc x64, khi sử dụng Hugepages, mỗi page sẽ có kích thước lên đến 256MB, nghĩa là nếu tôi có 32RAM, Linux chỉ cần chia ra 128 hugepage là đủ.

Trước khi đi vào chi tiết những lợi ích của Hugepage, ta hãy cùng điểm qua hai thành phần rất quan trọng trong cách Linux quản lý bộ nhớ:

Page Table: Một page table là một cấu trúc dữ liệu ánh xạ giữa địa chỉ bộ nhớ ảo (virtual memory address) và địa chỉ bộ nhớ vật lý (physical memory address). Chúng ta đều biết, mỗi process trong Linux đều được kernel cấp cho một không gian bộ nhớ ảo tách biệt lẫn nhau. Các bộ nhớ ảo này sẽ được ánh xạ qua bộ nhớ vật lý thông qua các page table. Khi lượng RAM tăng quá lớn, sử dụng page với kích thước mặc định sẽ làm cho page table trở nên cực lớn. Khi đó kernel sẽ mất nhiều thời gian để dò tìm ánh xạ giữa địa chỉ bộ nhớ ảo và bộ nhớ vật lý.

TLB: TLB là một bộ nhớ đệm (còn gọi là buffer hay cache) nằm trong CPU; TLB chứa một phần của page table. TLB có kích thước cố định, được tạo ra nhằm mục đích tăng tốc việc chuyển đổi từ địa chỉ bộ nhớ ảo sang bộ nhớ vật lý (tốc độ truy xuất TLB cao hơn tốc độ truy xuất RAM nhiều lần). TLB là một tài nguyên có hạn, và đương nhiên nó cũng bị ảnh hưởng tương tự như page table nếu lượng RAM quá lớn.

Rõ ràng, việc sử dụng Hugepages sẽ đem lại nhiều lợi ích đáng kể trong trường hợp bạn có quá nhiều RAM, mà thiết thực nhất là:

Giảm thời gian truy xuất page table: Do số lượng page giảm xuống, kích thước của page table cũng giảm theo, do đó thời gian để kernel tìm kiếm trong page table sẽ giảm xuống đáng kể. Ngoài ra việc tận dụng TLB cũng sẽ trở nên hiệu quả hơn

Kernel không bao giờ swap out Hugepages: những vùng bộ nhớ đã được đánh dấu là hugepages sẽ nằm vĩnh viễn trong RAM (cho đến khi reboot hoặc sysadmin muốn thay đổi), kernel không bao giờ swap đám hugepage này ra ngoài ổ cứng. Đây chính là điểm hay nhất của Hugepages, nó giúp chúng ta có thể dedicate một vùng bộ nhớ dành riêng cho một dịch vụ quan trong nào đó trên hệ thống. Trong case này, tôi dùng cho SGA của Oracle.

Sau khi tìm hiểu kỹ về Hugepages, tôi quyết định trao đổi với các anh chị bên DBA cũng như phía lãnh đạo của khách hàng(nói cho sang chứ làm gì có :D). Họ tỏ ra khá nghi ngờ, bởi lẽ cũng như tôi, họ nghĩ chỉ có thể áp dụng Hugepages được cho x86 mà thôi. Dẫu vậy, họ không còn cách nào khác cả, tôi lúc đó là niềm hi vọng duy nhất của họ, nên họ cũng quyết định cho phép tôi thực hiện.

Việc đầu tiên cần phải làm là tính số lượng Hugepages cần phải có để chứa đủ SGA hiện tại của thằng Oracle. Oracle có cung cấp sẵn một script để làm chuyện đó:

#!/bin/bash

#

# hugepages_settings.sh

#

# Linux bash script to compute values for the

# recommended HugePages/HugeTLB configuration

#

# Note: This script does calculation for all shared memory

# segments available when the script is run, no matter it

# is an Oracle RDBMS shared memory segment or not.

# Check for the kernel version

KERN=`uname -r | awk -F. ‘{ printf(“%d.%d\n”,$1,$2); }’`

# Find out the HugePage size

HPG_SZ=`grep Hugepagesize /proc/meminfo | awk {‘print $2′}`

# Start from 1 pages to be on the safe side and guarantee 1 free HugePage

NUM_PG=1

# Cumulative number of pages required to handle the running shared memory segments

for SEG_BYTES in `ipcs -m | awk {‘print $5′} | grep “[0-9][0-9]*”`

do

MIN_PG=`echo “$SEG_BYTES/($HPG_SZ*1024)” | bc -q`

if [ $MIN_PG -gt 0 ]; then

NUM_PG=`echo “$NUM_PG+$MIN_PG+1″ | bc -q`

fi

done

# Finish with results

case $KERN in

’2.4′) HUGETLB_POOL=`echo “$NUM_PG*$HPG_SZ/1024″ | bc -q`;

echo “Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL” ;;

’2.6′) echo “Recommended setting: vm.nr_hugepages = $NUM_PG” ;;

*) echo “Unrecognized kernel version $KERN. Exiting.” ;;

esac

# End

Script này tính tổng số lượng shared memory mà hệ thống đang có tại thời điểm chạy script. Tôi chạy script này ngay lúc thằng Oracle đang giãy chết, và kết quả là: Recommended setting: vm.nr_hugepages = 82.

Như vậy, tổng cộng lượng RAM mà tôi phải dành riêng cho thằng Hugepages là 82 x 256M = 20,5G. Do Oracle sẽ sử dụng đám hugepage này như là shared memory, vì thế, tôi phải điều chỉnh cấu hình Linux để nâng tổng dung lượng shared memory lên 25G, trong đó kích thước lớn nhất của một segment là 21G.

Tôi thêm ba dòng như sau vào /etc/sysctl.conf:

# single segment = 21G, Oracle SGA = 20G

kernel.shmmax = 22548578304

# total shared memory 25G

kernel.shmall = 1638400

# total hugepages = 20,5G

vm.nr_hugepages= 82

Nếu bạn không hiểu các dòng trên, hãy thử tự tìm trên Google tài liệu về kernel.shmmax và kernel.shmall để xem các thông số này nghĩa là gì. Do số lượng non-swappable RAM mà Oracle chiếm dụng là rất lớn, nên tôi phải thêm hai dòng sau đây vào /etc/security/limit.conf:

oracle soft memlock 22020096
oracle hard memlock 22020096

Hai dòng này cho phép user oracle được phép chiếm dụng tối đa 21G RAM. Nhắc lại, nếu bạn không hiểu những thông số này, thử tìm trên Google xem sao.

Chuẩn bị xong xuôi. Tôi yêu cầu được phép khởi động lại máy chủ. Lý do phải khởi động là sau một thời gian chạy, RAM đã bị phân chia thành nhiều mảnh nhỏ, cách duy nhất để gom RAM lại là khởi động lại máy chủ, rồi mới có thể chia RAM thành hugepage và gán 20G hugepage cho Oracle. Oracle rất thông minh, khi nó thấy có hugepage, nó sẽ tự động sử dụng hugepage, mà không cần phải cấu hình gì thêm.

Sau 20′ chờ cho thằng Oracle nó dừng và đóng database lại, khách hàng cho phép tôi khởi động lại máy chủ. Máy chủ này nó khởi động cũng tương đối nhanh, chỉ mất chưa đầy 10′ là đã xong rồi.

Việc đầu tiên phải làm là kiểm tra xem Linux đã chia RAM thành Hugepages chưa:

# cat /proc/meminfo | grep Huge

HugePages_Total: 82

HugePages_Free: 82

Hugepagesize: 262144 kB

Rồi đã có 82 hugepage đang nằm chờ thằng Oracle “sực”. Tôi khởi động Oracle, và kiểm tra lại số lượng hugepage:

# cat /proc/meminfo | grep Huge

HugePages_Total: 82

HugePages_Free: 2

Hugepagesize: 262144 kB

Yahoooo! Oracle đã “ăn” mất 80 miếng hugepage x 256M = 20G, vừa bằng với cấu hình SGA của nó. Tôi báo cho khách hàng biết, kêu nhân viên của họ làm việc lại và tôi bắt đầu theo dõi xem hệ thống vận hành thế nào.

Thật là hồi hộp, không biết những điều chỉnh của tôi có hiệu quả hay không nữa. 10′, 20′, 30′, 1 tiếng trôi qua, vmstat không thấy swap nữa rồi, top cũng không thấy kswapd nữa, toàn là Oracle, CPU idle 50%-60%, mọi thứ êm ru đến tận hôm nay!