Review WSL trên windows sau 6 tháng sử dụng - The best of both world

Khả Sỹ
4/12/2021 19:17Phản hồi: 68
Review WSL trên windows sau 6 tháng sử dụng - The best of both world
Có một thực tế rằng lập trình viên không thích powershell, mình cũng vậy.
Lý do không phải powershell tệ, mà là các công cụ chạy trên powershell không nhiều. Đặc biệt gây khó khăn trong việc phát triển phần mềm trong một team dùng nhiều hệ điều hành linux/mac/windows.

Gần đây Microsoft trình làng một chức năng mới có tên Windows Subsystem for Linux - viết tắt là WSL.
Về cơ bản, tính năng này cho phép bạn dùng song song cả windows và linux.
Điều này có ý nghĩa rất lớn với mình (và mình cũng nghĩ có ý nghĩa rất lớn đối với giới lập trình nói chung).
Mình bắt đầu thử chuyển công việc của mình qua WSL từ 6 tháng trước và ai thấy cũng hỏi một câu:
Sao ông không dùng linux đi cho rồi, cài vậy chi cho nặng máy?

Nguyên nhân hàng đầu là về UI/UX, mình không thích UI/UX trên linux, nhìn kiểu amateur ý.
Nguyên nhân thứ 2 là về hệ sinh thái, mình cần windows để làm các thứ chỉ bên windows mới có.

WSL có chậm không?

Trước hết WSL là máy ảo, đúng, nó là máy ảo. Nhưng bạn có biết hệ điều hành windows của bạn cũng là máy ảo?

Để hiểu được vấn đề, trước hết ta phải nhớ rằng:
"Công nghệ ảo hóa được cung cấp bởi CPU, không phải hệ điều hành, ở một thời điểm chỉ một phần mềm duy nhất được sử dụng tính năng này"
ok, giờ hãy nhìn lại về các loại máy ảo:

https://www.researchgate.net/profile/Karama-Kanoun/publication/221351476/figure/fig1/AS:305492556566528@1449846509293/Type-1-and-Type-2-Virtual-Machine-Monitors.png
Như hình trên, ta có 2 loại máy ảo:
Type 2: Đây là dạng máy ảo kiểu VM ware, virtual box …
Các loại máy ảo này chạy trên hệ điều hành (host system), trong trường hợp này là Windows, (không phải Linux như trong hình đâu nhé). VM Ware sẽ là phần mềm sử dụng công nghệ ảo hóa của CPU để tạo ra các máy ảo khác như ubuntu, mac os …
Type 1: Đây là dạng máy ảo mà tất cả các VM chạy trực tiếp trên một nền tảng ảo hóa, không thông qua một hệ điều hành nào cả. Nếu các bạn bật tính năng Hyper-V trong windows lên thì chính windows cũng đang chạy trên một tầng ảo hóa (là Hyper-V), có nghĩa windows các bạn đang dùng cũng là một con máycon, Hyper-V là tầng ảo hóa, Hyper-V là phần mềm sử dụng công nghệ ảo hóa của CPU.

Điều đó có nghĩa các máy ảo Type 1 sẽ nhanh hơn rất rất nhiều so với các máy ảo Type 2, do không phải thông qua một OS trung gian.

Quảng cáo


Bên cạnh đó, do một ở một thời điểm chỉ có một phần mềm được sử dụng công nghệ ảo hóa, nên nếu bật Hyper-V thì VM-Ware không chạy được và ngược lại.

Đến đây chắc các bạn cũng đoán được WSL là dạng máy nào rồi phải không?
WSL là máy ảo dạng 1, hiệu suất của nó tương đương với hiệu suất của Windows chạy trên Hyper-V.

Vậy hiệu suất so với chạy trên máy vật lý thì như thế nào, bật Hyper-V lên có khiến máy chậm đi không?
Với cảm nhận của mình thì không, mình không cảm thấy bất kì điều gì khác biệt cả.
Không tin các bạn có thể xem kết quả benchmark ở đây:
Does Enabling WSL2 Affect Performance of Windows 10 Applications (pugetsystems.com)

WSL khiến docker chạy nhanh hơn

Thật vậy, khi chạy linux container với docker, Windows phải làm một số thứ để giả lập môi trường linux. Điều này khiến việc start một container hoặc khởi động docker cũng rất ì ạch.
Nhưng khi đã có WSL thì mọi chuyện trở nên dễ dàng hơn. Docker sử dụng WSL để chạy phần engine và UI thì vẫn chạy trên windows. Điều này khiến cho Docker trên windows nhanh hơn rất rất nhiều và tốn ít ram hơn. Thật toẹt vời các bác ạ.

Quảng cáo



WSL có chiếm nhiều RAM không?

Câu trả lời ngắn gọn là không. WSL chiếm rất rất ít ram, khoảng hơn 200MB thôi. Các bạn đừng nhìn vào Task Manager nhé, số ram Task manager báo là Ram hệ thống cấp cho máy ảo WSL để đỡ phải cấp đi cấp lại nhiều lần, còn số ram máy ảo thực tế sử dụng các bạn dùng lệnh htop để xem nhé.
Số ram này còn chưa bằng số ram mình mất khi phải chạy docker trực tiếp trên windows nữa nên coi như chả mất gì.

Restart máy mà lại không restart

Nghe hơi hư trúc nhưng thật ra lại rất mộ dung phục.
Khi bạn muốn restart môi trường làm việc thì chỉ cần restart lại service LxssManager là được, cỡ 30 giây là xong, chia tay với màn hình boot luôn.
Nhiều khi cảm thấy mình cài cắm nhiều thứ rác quá, muốn xóa hết cài lại từ đầu thì chỉ cần clear dữ liệu của con WSL là xong, chả liên quan gì đến dữ liệu trong windows, max nhanh gọn.

VS code hỗ trợ WSL tận răng

Phải gọi là được hỗ trợ từ răng cửa tới tận răng khôn luôn, bác nào code trên VS code thì sướng thôi rồi.

Bất lợi khi dùng WSL

  • Không hỗ trợ lưu dữ liệu máy ảo trên ổ đĩa khác ổ C. Điều này có nghĩa nếu máy bạn lỗi, cần cài lại win thì bạn liệu mà dùng đĩa cứu hộ vào ổ C mà copy file máy ảo ra trước.
  • Không nên copy file qua lại giữa WSL và windows, tại định dạng file khác nhau, copy file text qua lại bọn nó không hiểu. Nhưng copy các file định dạng khác như pdf, png, jpg các thứ thì thoải mái.

Chốt

Trải nghiệm của mình với WSL trên windows rất tuyệt vời. Có thể nói với WSL, ta đã có những điều tốt nhất từ Windows lẫn Linux.

Mình nghĩ các bạn nên thử và chuyển dần qua WSL nếu có thể.
Từ giờ sẽ không có khái niệm lập trình trên windows chán nữa, tại nói vậy chả khác nào nói lập trình trên linux chán cả. =))

Các bạn có trải nghiệm gì thì cũng comment luôn nhé.
68 bình luận
Chia sẻ

Xu hướng

Ơ ko ai comment nhỉ 😆 làm như dev ở đây ít hay sao á
Mình cũng cài wsl nhưng cũng ít khi sài, căn bản là mình dev cũng đơn giản, với win giờ code cũng ngon lắm rồi, ko như xưa
@quangduy90 cũng không ít, cơ mà dân xài dev nếu xài win (như mình hồi trước), thì có gì xài nấy, thực ra Win để mà code thì cũng chả thiếu đồ chơi gì, không tính đến mấy cái món chuyên dụng kiểu code app cho iOS thì chịu, còn nếu không dùng win thì cài luôn Linux (như mình là dùng ubuntu) hoặc xài Mac.

Mình vẫn nhớ đợt trước dịch nên cty cũ cho làm ở nhà, nhưng không cho dùng máy cá nhân mà phải remote đến máy cơ quan (policy của công ty), mà công ty chặn mạng các thứ tưng bừng nên để setup được remote ở ubuntu đúng là cực hình, mà con dự án của mình lại chỉ chạy được ở trên ubuntu, thế là có thanh niên nghĩ ra vụ dùng cái WSL này để setup được dự án chạy được trên windows mà vẫn setup được remote ngon lành. Còn ngoài vụ đó ra thì vẫn chưa thấy ích lợi của cái này nhiều lắm so với dùng ubuntu trực tiếp, còn nếu cần dùng gì ở win thì thấy nên cài song song 2 OS mà dùng.
Khả Sỹ
ĐẠI BÀNG
2 năm
@Xuân Híu Khi chạy docker trên mac thì mac nó phải làm 1 môi trường giả lập để container chạy, thành thử nó chậm như rùa nhé bạn, ko thể so với wsl đc.
Mình đang dùng 1 con macbook pro đây.
trước có xài cái này mà xài lớt phớt để chạy 1 dự án đặc thù bắt buộc phải cài trên linux mới chạy được thôi, chứ mình cũng chưa đi sâu. Theo mình hiểu thì dùng WSL thì mình sẽ coi như có 1 con ubuntu cài trong window nhỉ? Và giả sử mình code NodeJS đi, thì thay vì mình setup ở trên win, mình sẽ install node và các dependencies ở con máy ảo kia hết phải không?
@Xuân Híu đúng rồi bạn chạy WSL rồi cd đến project và cài như bình thường thôi. Bạn setup cho cả bên win luôn lúc cần thì chạy node bằng powershell.
Khả Sỹ
ĐẠI BÀNG
2 năm
@pikupi Thường thì mình sẽ dùng WSL kết hợp với dev container.
Có nghĩa nodejs các thứ sẽ được cài trong từng container chứ k phải cài trên wsl.
Với cách làm này thì mỗi service sẽ chạy được 1 nodejs version khác nhau.
@Khả Sỹ a cho em hỏi, có nghĩa là từng images pull nodejs về, mỗi khi code thì mình start cái images đó lên thôi đúng ko a.... e đang thử nghiệm mấy cái này vì nếu không cần phải cài local env thì tiện quá
Khả Sỹ
ĐẠI BÀNG
2 năm
@Vu Duc Thien Ừ, b search devcontainer là ra.
mình cũng thích dùng WSL vì có thể vừa code trên môi trường unix và chán code thì chơi game, nghịch nhiều thứ khác như edit, render ảnh video các kiểu 😆
Khả Sỹ
ĐẠI BÀNG
2 năm
@pikupi Chuẩn bài rồi.
Mình cũng tay mơ code vớ vẩn làm smarthome thôi nhưng phải nói là từ ngày có WSL2 thì mọi thứ ngon hơn rất nhiều
Bạn giải quyết vấn đề WSL ngốn ổ cứng sau một thời gian dùng docker thế nào?
@ndv92 Dùng docker tốn ổ cứng thì liên quan gì đến WSL?
@ahxdtngh Có liên quan đấy bạn.
https://github.com/microsoft/WSL/issues/4699
https://github.com/docker/for-win/issues/244
Khả Sỹ
ĐẠI BÀNG
2 năm
@ndv92 Trong link của bạn hình như cũng có giải pháp luôn rồi đó.
Nếu có bị thì thường mình sẽ clean docker files đi là xong, lấy lại được vài chục GB.
Nhưng kể cả nếu không lấy lại được thì mình chỉ cần clean wsl đi cài lại là xong mà.
Lý do là mình dùng docker + dev container để code, môi trường của mình (nodejs, .net ...) nằm trong từng container chứ k nằm trong wsl.
Thành thử nếu có reset wsl thì cũng chỉ cần cài lại mỗi vs code + pull lại code là xong, môi trường sẽ tự động được cài đặt như ban đầu khi mình open project =)).
Vẫn khoẻ hơn rất rất nhiều việc bạn phải đi xoá file rác khi dev trên hệ điều hành host (dev trực tiếp trên mac/windows, hoặc thậm chí là wsl).
@Khả Sỹ hello a cho em hỏi: a chạy docker trực tiếp trong wsl2 là không cần docker destop đúng ko a. kiểu như mình install docker daemon on wsl2 luôn.,.. e đang thử cách này vì docker desktop nó nhai ram kinh dị quá
Sao mình thấy WSL chạy docker vẫn chậm như rùa bò thế nhỉ, chậm hơn chạy trên MacOs. Và tất nhiên Không thể bằng chạy trên Ubuntu được.
@ahxdtngh Bác phải lưu source code vào folder của wsl, chẳng hạn như /home/user/Project. Win 11 nó có biểu tượng luôn rồi. Chỉ cần move project từ thư mục của win sang wsl thì bác sẽ thấy ngay tốc độ chạy web bàn thờ là như nào. 😆.
@tungjk Ok bác để mình thử 😁
Các cao nhân cho em hỏi là docker desktop em cài chạy trên nền wsl 2 (Windows 11) mặc dù chưa chạy bất cứ container nào nhưng em thấy nó đã ngốn khá nhiều cpu(tầm 25%). Thế là lúc nào quạt cũng kêu ầm ầm luôn, nghe xót thật sự. Có bác nào biết lý do và cách khắc phục như nào thì chỉ em với ạ 😔
@Đức Nhân Trần Bác show thông tin cấu hình lên thì ms biết đc, đang sử dụng bao nhiêu ram nữa.
Từ ngày biết tới cái WSL2 trên Windows, đặc biệt là con Surface Pro 8 mình đang xài (chip x86), mình đang nghĩ tới chuyện bán luôn con Macbook Pro 14 inch M2 Pro luôn. Bây giờ code, xài VScode remote connection với WSL2, performance ngon hơn hẳn.
bài này chắc trải nghiệm sử dụng WSL1. Giờ WSL2 khá xịn xò rồi
@htux ko biết có xài VS Code ko, nếu xài thì xóa đi nhé
@ncn_nguyen hàng của jetbrains thì đắt rồi b, nhưng mà đắt nó xắt ra miếng. Có điều kiện thì nên mua để làm, nó tăng hiệu quả công việc đấy (check lỗi, check format code, warning, refactor này nọ...). Không có tiền thì b lên voz có ông chuyên đi reg acc student, 100k/năm, dùng được tất cả các tool của jetbrains luôn
@baomat1585 Vãi Phpstorm mà lại nhẹ hơn VS code làm sao được :v. Bịp à
@XoaiDaddy thì bth mà :v chứ thật ra vs code nó cũng đâu có nhẹ, cơ bản là đồ của jetbrains nó check lỗi, check code, format các thứ các thứ nó tiện.
@XoaiDaddy lúc mở project lần đầu nó cực kì nặng do chạy index, còn nhưng lần sau đó thì 2 thằng tương đương nhau, nếu máy cấu hình tốt (i5 đời 8+, ram 16gb+, SSD) thì lúc sử dụng ko khác biệt, mở project vscode vẫn nhanh hơn (nếu cài ít plugin)
Cái này là heterogeneous computing. Nhiều hệ điều hành khác nhau chạy trên 1 architecture với nhiều loại cpu, GPU risc-v, arm, x86 và FPGA. Cái hypervisor sẽ là nơi trao đổi dữ liệu và share hardware resources giữa các hệ điều hành khác nhau. Cái này có nhiều hãng sử dụng lắm như trên xe tesla, space X , blue origin , amazon, Microsoft…Mình thấy cloud technologies hay dùng cái này. Nhiều cty cũng build 1 cái hệ thống như thế này để chạy Dynamic machine learning. Macbook m1 cũng là 1 dạng heterogeneous computing in SoC . Hy vọng tương lai gần, apple add thêm risc-v vô macbook.
lnt55
TÍCH CỰC
2 năm
Dùng WSL thì bị đóng cửa sổ hoài 😔 Đang làm việc thì mất hết
@lnt55 ủa sao bị đóng vậy bác
lnt55
TÍCH CỰC
2 năm
@Vu Duc Thien Mở bằng cmd thì làm việc không được 1 giờ, mở bằng PS thì khá hơn. Không hiểu tại sao!
Mặt khác, từ WSL ssh sang máy Linux khác trong mạng LAN dễ dàng, còn ngược lại thì không được!
Nhiều lúc không có điều kiện phải xài như thế này chứ có điều kiện làm 2-3 máy Code cho khỏe
1. Mac M2
2. Windows PC
3. Linux

Sợ tốn tiền mua con mini PC cũ chip i7 đời 2016-2018 như HP 800G4 hay 800G3 tầm dưới $200 trên eBay cài linux thì code vô tư rồi.

Còn lỉnh kỉnh thì mua con Laptop Macbook i9 16 inch cài vừa Mac và Windowns để Code.
@HamDzui bạn này xài giải pháp gần giống mình, 1 con Dell optiflex dùng code/test nhiều môi trường, cái mac dùng làm IDE, nhiều lúc đi đâu xách cái ipad/phone vpn vô xử lý tạm thời là xong.
@toutou Mình xài HP 800G3 có 2 ổ cứng, Cài Windows 11 và Linux song song.

Nhiều lúc mọi thứ rất đơn giản
Khoảng 1 năm rưỡi nay dev embedded linux trên wsl2 thì mình thấy nó ngốn disk quá, phải xóa bớt toolchain này kia và dữ liệu. Nên giờ chuyển qua setup docker luôn, không sợ cài lại win như b. Dùng chung ổ win hơi ghê tay
wsl thì đa số là các anh IT tay to xài thôi =]]z
chứ dân thường như mình thì cái wsl nó không có cũng được =]]z
Mình thì ko thích powershell vì tốc độ mở terminal chậm 😔
Chứ powershell hơi bị mạnh đấy đừng đùa
@minhhungit powershell cài bản riêng, đừng dùng bản mặc định của win, kết hợp terminal của win, chạy hơi bị kinh
@minhhungit Powershell ai nói nó yếu đâu. Khổ nỗi chú ms chơi mình một kiểu.
táng hẳn vài con mini pc cài linux mà chơi bạn ơi, đâu đó 4-5 triệu 1 con (máy cũ thôi), táng tầm 4 con về vọc/học/làm vô tư luôn
@minhhungit Bên Mỹ mình mua con 800G3 tầm $100. Nâng Ram 16GB, lắp thêm SSD 512GB chạy luôn 2 hệ điều hành song song

Còn mua em Mac Mini Server 2011 có sẵn 2SSD 16Ram tầm 1 tr
Mình cũng thấy có wsl nó tiện lắm luôn í
Yêu quá
Hình như chủ thớt bị lộn: Ảo hóa "Host system" như virtual box, VM Ware workstation thì chậm, Ảo hóa hypervisor như VMWare ESXi, Hyper-V thì nhanh hơn và tùy thuộc vào bare system, bare system của của VMWare ESXi thì rất gọn nhẹ và hỗ trợ giao tiếp rất nhiều thành phần chức năng nên nhanh và xịn xò hơn Hyper-V của Microsoft. Dùng ảo hóa "Hypervisor" thì có thể dùng giao tiếp trực tiếp sử dụng tính năng phần cứng direct-IO mà ko cần thông qua 1 lớp driver của host nên tốc độ đẩy lên cao
@tekar bạn cũng hơi lộn rồi: Hypervisor có 2 loại, Type1 & Type 2.
- Type 1 (gọi là "bare-metal"): nó chạy như 1 OS, giao tiếp trực tiếp với phần cứng nên sẽ nhanh hơn. Hyper-V dùng kiểu này. Khi bật Hyper-V lên thì chính cái Windows đang dùng cũng là 1 "máy ảo" nằm dưới Hyper-V (Type 1).

- Type 2 ("hosted"): Nó chạy như 1 phần mềm bình thường cài vào OS. Loại này chậm hơn vì nó phải mất thêm 1 bước thông qua OS để liên lạc với phần cứng.


Type 1: HW -> Hypervisor -> các máy ảo (clients)
Type 2: HW -> Host OS -> Hypervisor -> các máy ảo (client).

Cả 2 loại trên đều là Hypervisor, nên đều có thể quản lý chia sẻ, "cách ly" (isolate) tài nguyên rất tốt.

Xu hướng

Bài mới








  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2025 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: Số 70 Bà Huyện Thanh Quan, P. Võ Thị Sáu, Quận 3, TPHCM
  • Số điện thoại: 02822460095
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019