Monday, 24 December 2018

Chia sẻ file nhạc/ảnh/video trong mạng nội bộ (UPnP/DLNA)

Thời điểm này, mỗi gia đình đều có vài thiết bị "thông minh", TiVi, điện thoại, laptop, máy chơi game PlayStation... mà dữ liệu nhạc / film có thể nằm mỗi cái ở một chỗ. Có nhiều cách để chia sẻ file giữa các thiết bị này với nhau mà người ta đã làm cả chục năm nay rồi.

Một cái tên trông không đẹp cho lắm nhưng đã dùng thì rất tiện: UPnP (Universal Plug and Play)

Universal Plug and Play is a set of networking protocols that permits networked devices, such as personal computers, printers, Internet gateways, Wi-Fi access points and mobile devices to seamlessly discover each other's presence on the network and establish functional network services for data sharing, communications, and entertainment.

UPnP là một bộ giao thức mạng cho phép các thiết bị trong mạng tự khám phá ra nhau và chia sẻ dữ liệu.
Giao thức mạng tức là như HTTP, FTP ...

DLNA (Digital Living Network Alliance) là tên một "guideline"/bộ hướng dẫn, bao gồm nhiều thứ và có cả UPnP.

Cài đặt:
sudo apt install -y minidlna

(UPnP có sẵn trên Windows, khỏi cài đặt gì)

Saturday, 22 December 2018

Làm full tất cả CPU bằng 1 câu lệnh

Cách nào để làm CPU chạy full load ?

Khi mang em laptop bị nóng rồi tự tắt đi sửa, các anh kỹ thuật dùng cách vào youtube và tìm video 4k rồi mở fullscreen để xem...

Cách này chưa chắc đã làm full CPU, lại yêu cầu phải có mạng internet đủ nhanh.
Những options nào khác?

1. Dùng bash
while true; do true; done
2. Dùng Python
python -c 'while True: pass'


Hai cách này nghe có vẻ ổn, nhưng chúng chỉ làm full 01 CPU. Trong khi máy bạn có thể có nhiều CPU - ngay cả các Android smartphone của năm 2016 cũng đã có 4 CPU rồi.

Lấy số CPU của máy

Khái niệm CPU được hiểu theo nghĩa khác nhau trong các hòan cảnh khác nhau.
Nếu hiểu theo nghĩa: số chương trình chạy đồng thời cùng lúc (thực sự - chứ không phải giả đồng thời bằng cách chuyển nhanh qua các chương trình khác nhau chạy mỗi cái 1 tí như cách 1 CPU làm để chạy nhiều chương trình), ta có thể gõ `top` rồi bấm 1.


Trên Linux, mọi thứ đều là file , thông tin CPU nằm trong /proc/cpuinfo
$ grep 'core id' /proc/cpuinfo
core id        : 0
core id        : 0
core id        : 1
core id        : 1
getconf là câu lệnh đi kèm glibc, chuẩn POSIX tức có trên cả OSX, BSD ...
$ getconf -a | grep processor -i
_NPROCESSORS_CONF                  4
_NPROCESSORS_ONLN                  4
$ getconf _NPROCESSORS_ONLN
4

Ở đây có tất cả 4 processor (CPU).
Với 2 core, mỗi core 2 processor -> 2 x 2 = 4

$ sysctl -a | grep cpu
...
cũng sẽ hiện thông tin lần lượt cho các CPU0 1 2 3

Trên Linux, lệnh lscpu sẽ cho thông tin
chi tiết:

$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 69
Model name:            Intel(R) Core(TM) i5-4200U CPU @ 1.60GHz
Với 1 socket, với 2 core, mỗi core có 2 thread, => 1 x 2 x 2 = 4

CPUs = Threads per core X cores per socket X sockets
Vậy cách làm đúng ở đây là mở 4 cửa sổ và chạy theo cách python hoặc cách bash nói trên.
Với máy tính có 128 CPU thì chúc bạn vui vẻ nhé!

Chạy lệnh song song với xargs

xargs là câu lệnh giải quyết bài tóan chạy song song các câu lệnh ở đây.

Đầu tiên lấy số CPU online (khái niệm offline xuất hiện trên máy tính có nhiều khe cắm CPU - các máy server)
$ getconf _NPROCESSORS_ONLN
4

Tạo ra dãy số từ 1 đến 4 với lệnh seq

$ seq $(getconf _NPROCESSORS_ONLN)
1
2
3
4

Biến 4 dòng này thành 4 đầu vào cho chương trình, mỗi chương trình có nhiệm vụ chạy full CPU
seq $(getconf _NPROCESSORS_ONLN) | xargs -n1 -P$(getconf _NPROCESSORS_ONLN) yes > /dev/null
yes là câu lệnh in ra màn hình liên tục dòng chữ `y`, nó có tác dụng như 1 vòng lặp vô hạn.

export CPUS=$(getconf _NPROCESSORS_ONLN); seq $CPUS | xargs -n1 -P $CPUS python -c 'while True: pass'

Sử dụng chương trình `psensor`, nhiệt độ của các Core được hiển thị trên biểu đồ, tăng từ ~45 nhiệt độ bình thường lên 69, 70 độ C (nóng).



Các thiết bị làm mát phải vào cuộc, đảm bảo nhiệt độ không cao hơn, nếu không sẽ xảy ra cháy thiết bị - sau một vài phút ta có thể bắt đầu nghe thấy tiếng quạt CPU kêu khi nó bắt đầu hoạt động. Nếu quạt hỏng không quay, nhiệt độ sẽ tăng cao và hệ điều hành thường sẽ tắt thiết bị để đảm bảo không có cháy nổ.

Các option của lệnh xargs:
- n 1 : số argument gửi tới mỗi chương trình, ở đây là 1
- P : số process tối đa được chạy đồng thời - ở đây set bằng số CPU online = 4
python -c 'while True: pass' - câu lệnh được chạy, như thấy ở hình top, các chương trình này lần lượt nhận đầu vào là 1 2 3 4.

4 chương trình sau sẽ được chạy song song
python -c 'while True: pass' 1
python -c 'while True: pass' 2
python -c 'while True: pass' 3
python -c 'while True: pass' 4
Với máy có lệnh `nproc`, có thể dùng lệnh này
seq $(nproc) | xargs -n1 -P $(nproc) python -c 'while True: pass'
$ whatis nproc
nproc (1)            - print the number of processing units available
$ dpkg -S `which nproc`
coreutils: /usr/bin/nproc
 Tham khảo:
- CPU count: https://unix.stackexchange.com/a/279354

Hết.
HVN at https://pymi.vn and https://www.familug.org

Monday, 17 December 2018

Random notes

Đi làm không có nhiều thời gian để ngồi nắn nót từng bài blog, từng chủ đề từ à tớ ê.
Vậy nên để khởi động lại việc viết lách, những bài random notes sẽ note lại những thứ nhỏ bé học được gần đây mà không sắp xếp theo chủ đề nào cả.

0. Bấm gì thay TAB để auto-complete?

Ctrl i sẽ cho hiệu ứng auto-complete tương tự.

$ bind -p | grep \\C-i
"\C-i": complete
"\e\C-i": dynamic-complete-history


1. rxvt VS other terminal?