Giải ngố về bí ẩn gần 10 năm nay: Android hay iOS tốn RAM hơn?

    Nguyễn Hải,  

    Câu hỏi này là khởi nguồn của không biết bao nhiêu cuộc tranh cãi giữa fanboy của cả iOS và Android trong gần 10 năm nay, kể từ thời điểm hai hệ điều hành này xuất hiện.

    Nếu bạn nhìn vào thông số của một thế hệ iPhone bất kỳ và so sánh nó với một chiếc Android flagship ra mắt cùng năm, bạn sẽ nhận thấy chiếc iPhone có xu hướng ít RAM hơn. Điều đó đã làm nhiều người kết luận rằng các ứng dụng iOS cần ít bộ nhớ hơn ứng dụng Android, cũng như cho rằng các ứng dụng Android ngốn bộ nhớ hơn. Vậy câu hỏi là: Có đúng ứng dụng Android sử dụng nhiều bộ nhớ hơn iOS?

    Nhưng trước khi trả lời câu hỏi đó, có lẽ ta cần làm rõ một số khái niệm xung quanh câu hỏi gây tranh cãi này?

    RAM là gì?

    Điều đầu tiên cần lưu ý ở đây là chúng ta đang thảo luận về RAM, hay bộ nhớ truy xuất ngẫu nhiên (Random Access Memory), phần bộ nhớ được sử dụng bởi CPU. Đừng nhầm lẫn bộ nhớ RAM này với bộ nhớ lưu trữ trong máy (đôi khi cũng được gọi tắt là “bộ nhớ” do nó sử dụng bộ nhớ flash).

    Dưới đây là bảng so sánh về RAM giữa một số thế hệ iPhone với những chiếc Android flagship ra mắt cùng năm.

    Bạn có thể hầu hết những chiếc iPhone ở trên đều có ít RAM hơn những chiếc Android tương ứng, ngoại trừ chiếc Nexus 5X có cùng 2G RAM với chiếc iPhone 6S ra mắt cùng năm. Và đây cũng chính là hai thiết bị sẽ được sử dụng cho bài test bên dưới.

    Bộ nhớ RAM trống (hay Free RAM) là gì?

    Bên cạnh lượng bộ nhớ RAM hiện có, điều quan trọng không kém là cách quản lý RAM đó trong các thiết bị điện toán (như PC, laptop, tablet hay smartphone). Trước đây, các máy tính chỉ có một đoạn bộ nhớ RAM cho hệ điều hành và một phần RAM khác cho việc thực thi các chương trình và dữ liệu. Tuy nhiên, với nhu cầu đa nhiệm và sự ra đời của bộ nhớ RAM ảo (Virtual Memory), về cơ bản mỗi ứng dụng sẽ được chạy trên một không gian địa chỉ ảo riêng.

    Điều này có nghĩa là trên iOS và Android, bên cạnh bộ nhớ RAM cho hệ điều hành, cũng sẽ có những khu vực của RAM (hay còn gọi là các “trang” (page)) được dành cho mỗi ứng dụng. Bất kỳ đoạn RAM nào chưa bị chiếm dụng sẽ được xem là trống (free). Tuy nhiên, việc có RAM trống hay RAM chưa bị chiếm dụng lại là điều không hiệu quả.

    Vì hệ điều hành có thể lấy một phần RAM trống để làm bộ nhớ đệm - điều này sẽ giúp cải thiện tốc độ khởi động các tác vụ đơn luồng. Nhưng các ứng dụng cũng cần RAM để chạy, vì vậy nếu một ứng dụng chiếm nhiều RAM hơn, bộ nhớ đệm có thể bị loại bỏ để phần bộ nhớ RAM đó được chuyển sang cho ứng dụng.

     Một bộ nhớ RAM được sử dụng hiệu quả với mức Free còn khá thấp, khoảng 5,4%.

    Một bộ nhớ RAM được sử dụng hiệu quả với mức Free còn khá thấp, khoảng 5,4%.

    Điều này có nghĩa là, một hệ điều hành (OS) tốt sẽ hầu như không còn RAM trống, nhưng sẽ luôn có “RAM có sẵn” (available RAM hay available memory), lượng RAM đang được dùng nhưng có thể tái sử dụng cho mục đích khác ngay lập tức. Do vậy, lượng RAM có sẵn, chứ không phải RAM trống, mới là một thước đo hữu ích cho việc vận hành các thiết bị di động.

    Vậy Android có sử dụng nhiều bộ nhớ RAM như iOS không? Để kiểm tra điều đó, chúng ta có thể bắt đầu từ việc khởi động lại một chiếc Nexus 5X và iPhone 7. Sau khi khởi động lại, chiếc iPhone có 730 MB RAM có sẵn, trong khi với thiết bị Android là 840 MB RAM có sẵn. Điều này có nghĩa là Android sử dụng bộ nhớ RAM ít hơn iOS khoảng 100 MB!

    Bộ nhớ lưu trú của ứng dụng – Resident Set Size (RSS)

    Tương tự như việc RAM trống không có nghĩa là RAM có sẵn, cũng có sự khác biệt giữa kích thước ảo và kích thước thực của một chương trình. Giả sử một ứng dụng yêu cầu cấp 1MB bộ nhớ để nó có thể tải một hình ảnh từ ổ đĩa. Tại thời điểm ứng dụng yêu cầu bộ nhớ, kích thước ảo của ứng dụng sẽ tăng lên, nhưng hệ điều hành sẽ vẫn chưa thực sự đưa cho ứng dụng đó 1 MB bộ nhớ thực của RAM.

    Vì vậy, lượng RAM thực mà ứng dụng đó sử dụng không tăng lên. Nhưng khi ứng dụng thực sự đọc file đó và bắt đầu ghi vào bộ nhớ RAM, OS mới cấp cho nó một phần RAM thực. Nếu ứng dụng chỉ sử dụng một nửa lượng RAM yêu cầu, OS có thể sẽ không trao cho nó toàn bộ 1 MB bộ nhớ RAM thực, mà ít hơn con số đó.

    Lượng RAM thực mà một ứng dụng chiếm còn được gọi là Resident Set Size (RSS - kích thước bộ nhớ lưu trú của ứng dụng) và nó là một thước đo hữu ích cho việc một ứng dụng cụ thể cần bao nhiêu RAM để chạy. Sử dụng nhiều công cụ phát triển khác nhau trên Android và iOS, bạn có thể biết được các ứng dụng đang chạy cùng với kích thước lưu trú của nó.

     Bộ nhớ lưu trú cho ứng dụng Star Wars: Force Arena - 254 MB.

    Bộ nhớ lưu trú cho ứng dụng Star Wars: Force Arena - 254 MB.

    Để thử nghiệm xem liệu ứng dụng Android có thực sự ngốn bộ nhớ RAM hơn iOS, phóng viên Gary của trang Android Authority thử cài đặt một số trò chơi và ứng dụng công việc để xác định kích thước RSS của ứng dụng đó khi nó chạy. Và dưới đây là kết quả mà ông thu được:

     So sánh dung lượng bộ nhớ lưu trữ RSS giữa các ứng dụng trên iOS và Android.

    So sánh dung lượng bộ nhớ lưu trữ RSS giữa các ứng dụng trên iOS và Android.

    Bạn có thể thấy kết quả khá khác nhau. Trong khi ứng dụng Crossy Road trên Android sử dụng 383 MB bộ nhớ RAM, trên iOS nó lại chỉ sử dụng 308 MB. Nhưng ngược lại, ứng dụng Temple Run 2 sử dụng 211 MB bộ nhớ RAM trên Android trong khi nó lại ngốn đến 364 MB trên iOS. Xu hướng chung là các ứng dụng Android sử dụng nhiều bộ nhớ RAM hơn iOS khoảng 6%, tuy nhiên kích thước các ứng dụng Android lại chưa bằng một nửa các ứng dụng iOS.

    Background (chạy ngầm) và Foreground (chạy nổi)

    Phương pháp đo bộ nhớ RSS ở trên mới chỉ dành cho các ứng dụng foreground (chạy nổi), các ứng dụng đang chạy và đang tương tác với người dùng. Nhưng hiện giờ trên cả iOS và Android, bạn đã có thể rời khỏi một ứng dụng hiện tại để chạy một ứng dụng khác và sau đó quay trở lại ứng dụng đó. Khi bạn rời khỏi nó, ứng dụng đó chuyển từ ứng dụng chạy nổi thành một ứng dụng chạy ngầm (background), và nó lại được xử lý rất khác biệt so với ứng dụng chạy nổi.

    Điều quan trọng ở đây là trải nghiệm người dùng. Khi bạn đang sử dụng Gmail và sau đó chuyển sang Solitare và chơi trong một thời gian ngắn, rồi lại quay lại dùng Gmail. Lúc này bạn sẽ kỳ vọng rằng Gmail vẫn đang chạy như khi bạn rời đi. Nhưng đó là các ứng dụng chiếm dụng ít bộ nhớ RSS, liệu điều gì sẽ xảy ra với các ứng dụng lớn hơn, chiếm nhiều bộ nhớ RAM hơn?

    Giả sử, khi bạn đang sử dụng Microsoft Word và chuyển sang chơi Crossy Road, sau đó lại quay trở lại dùng Word và lại chuyển sang chơi Temple Run 2. Tính theo kích thước RSS ở trên, thiết bị của bạn sẽ cần hơn 750 MB bộ nhớ RAM có sẵn để chạy nổi cả 3 ứng dụng này. Tuy nhiên, bộ nhớ RAM có sẵn trên cả hai thiết bị iPhone 7 và Nexus 5X sau khi reboot chỉ có 700 MB. Vậy khi lượng bộ nhớ cần để giữ các ứng dụng chạy ngầm và khởi động ứng dụng mới lớn hơn lượng RAM có sẵn, điều gì sẽ xảy ra?

     Ứng dụng chiếm đến 364 MB bộ nhớ thực (hay kích thước lưu trú) trên iOS.

    Ứng dụng chiếm đến 364 MB bộ nhớ thực (hay kích thước lưu trú) trên iOS.

    Sự khác biệt giữa Android và iOS trong quản lý bộ nhớ

    Ưu tiên của hệ điều hành là khởi động ứng dụng mới và chạy nó, nhưng khi không có đủ bộ nhớ RAM có sẵn, một số điều như dưới đây sẽ xảy ra.

    Trên các máy desktop hay máy chủ, điều thường thấy là OS sẽ sử dụng ổ đĩa cứng để lưu trữ tạm thời các khu vực bộ nhớ bị chiếm dụng bởi ứng dụng ngầm. Đây cũng chính là kỹ thuật swapping, kỹ thuật lưu trữ tạm các ứng dụng trên bộ nhớ hoán đổi. Android không sử dụng cách này, bởi vì tốc độ ghi của bộ nhớ flash khá chậm, cộng thêm với nguy hiểm từ việc gây ra hao mòn bộ nhớ flash. Thay vào đó, cả iOS và Android đều cần một cách khác.

    Cách tiếp cận Android sử dụng là kỹ thuật hoán đổi nén (compressed swapping). Các khu vực bộ nhớ thay vì được ghi tạm trên ổ đĩa, chúng sẽ được nén và lưu trữ trong RAM. Không gian tiết kiệm được do nén dữ liệu sẽ trở thành RAM có sẵn. Một kỹ thuật tương tự cũng được sử dụng trên MacOS từ phiên bản OS X 10.9 Mavericks.

     Kỹ thuật hoán đổi nén cũng được sử dụng trên Mac OS X.

    Kỹ thuật hoán đổi nén cũng được sử dụng trên Mac OS X.

    Tuy nhiên, vấn đề của việc nén dữ liệu là nó không có một tỷ số cố định. Ví dụ với các dữ liệu ở một dạng đơn giản như văn bản, tỷ số nén sẽ rất cao và lượng RAM mới có sẵn cũng sẽ cao. Tuy nhiên, với những dữ liệu đã được nén như một file ảnh JPEG, tỷ số nén sẽ thấp. Ngoài ra, việc nén dữ liệu cũng sẽ làm hao tốn xung nhịp CPU.

    Nhưng nếu OS không thể thu hồi được đủ bộ nhớ RAM có sẵn, nó không còn cách nào khác ngoài tắt hẳn ứng dụng đó. Bằng thuật toán của mình, OS sẽ xác định ứng dụng chạy ngầm nào cần loại bỏ và thông báo để ứng dụng đó lưu lại trạng thái của mình và chuẩn bị bị tắt. Khi ứng dụng đó được khởi động lại, nó sẽ xem xét trạng thái thông tin và tải liệu các dữ liệu và thiết lập mọi thứ như cũ, tuy nhiên cách làm này sẽ mất thời gian hơn so với chuyển đổi ứng dụng đã có sẵn trên bộ nhớ RAM.

    IOS cũng sử dụng kỹ thuật loại bỏ ứng dụng tương tự như Android, nhưng dường như iOS còn có những thủ thuật khác. Cho dù cũng phải tắt các ứng dụng tuy nhiên iOS không phải thường xuyên làm vậy như Android. Có lẽ, iOS đã tìm ra một cách nào đó để giảm kích thước bộ nhớ lưu trú RSS mà không phải tắt ứng dụng đó.

     Kích thước bộ nhớ lưu trú RSS (hay bộ nhớ thực) của ứng dụng Crossy Road khi chạy ngầm trên iOS.

    Kích thước bộ nhớ lưu trú RSS (hay bộ nhớ thực) của ứng dụng Crossy Road khi chạy ngầm trên iOS.

    Ví dụ, với ứng dụng Crossy Road chiếm đến 308 MB bộ nhớ RAM khi khởi động , nhưng khi được chuyển sang chạy ngầm, iOS thu gọn kích thước lưu trú RSS của ứng dụng đó xuống còn chưa đến 10 MB. Tuy nhiên, ứng dụng không bị tắt và bạn có thể chuyển sang trò chơi đó gần như ngay lập tức, mà không phải tải lại. Vì vậy, với lượng RAM 2GB trên chiếc iPhone 7, bạn có thể chạy hai ứng dụng nặng cùng lúc, nhưng khi bạn khởi động thêm game thứ ba mà bạn sẽ không phải tắt một trong hai ứng dụng kia.

    Do vậy, khi bạn quay trở lại một trong hai ứng dụng kia, nó được bật lên rất nhanh gần như ngay lập tức, đem lại cảm giác mượt mà hơn cho người dùng. Tuy nhiên, Apple không tiết lộ thông tin về giải pháp bên trong của iOS. Liệu nó có sử dụng cơ chế nén như trên MacOS? Hay OS sử dụng các khuc vực bộ nhớ hiệu quả hơn, với dữ liệu read-only đã nằm sẵn trên ổ đĩa, và chúng sẽ bị xóa khỏi bộ nhớ và tải lại từ ổ đĩa khi cần thiết? Dù sao kỹ thuật xử lý bộ nhớ của iOS cũng rất ấn tượng.

    Kết luận

    Đến đây, chúng ta có thể phần nào trả lời được câu hỏi trên. Các ứng dụng trên iOS không sử dụng ít bộ nhớ hơn Android cũng như ngược lại, nhưng iOS có lược đồ bộ nhớ tốt hơn để xử lý các ứng dụng chạy ngầm và tái sử dụng bộ nhớ.

    Nói chung, dường như các ứng dụng Android khi được chuyển sang chạy ngầm vẫn sử dụng lượng bộ nhớ RAM tương đương khi chạy nổi. Trong khi đó, trên iOS, các ứng dụng chạy ngầm chiếm dụng ít bộ nhớ hơn, nhưng hệ điều hành vẫn đưa cho nó vừa đủ bộ nhớ để ứng dụng có thể chuyển sang chạy nổi gần như ngay lập tức.

    Tuy nhiên, lược đồ bộ nhớ của Apple sẽ không còn hiệu quả khi họ chuyển sang hỗ trợ đa nhiệm split view. Với hai ứng dụng chạy song song với nhau, không ứng dụng nào có thể giảm kích thước bộ nhớ lưu trú RSS. Do các ứng dụng iOS và Android sử dụng bộ nhớ gần tương đương nhau, những chiếc iPad với 2GB RAM (như iPad Air 2 và iPad Mini 4) thực sự là không đủ.

    Với cách xử lý bộ nhớ cho ứng dụng chạy ngầm như Android, dễ hiểu vì sao các nhà OEM cần bổ sung thêm 1 đến 2 GB bộ nhớ. Đó là giải pháp hoàn hảo vào thời điểm này, khi giá RAM tương đối rẻ so với những gì nó làm được. Tuy nhiên, sẽ tốt hơn nếu Android có thể xử lý các ứng dụng ngầm tốt hơn hiện tại.

    Tham khảo Android Authority

    Tin cùng chuyên mục
    Xem theo ngày

    NỔI BẬT TRANG CHỦ