Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| d3463ddb51 | |||
| 14ee811801 | |||
| a8861b1506 | |||
| 6b62306a29 | |||
| 2f9718bfbe | |||
| 3bd704c592 | |||
| c59459f1f0 | |||
| e45211aa7a |
@@ -77,9 +77,9 @@ GEM
|
||||
rb-fsevent (~> 0.10, >= 0.10.3)
|
||||
rb-inotify (~> 0.9, >= 0.9.10)
|
||||
mercenary (0.4.0)
|
||||
mini_portile2 (2.8.5)
|
||||
mini_portile2 (2.8.6)
|
||||
minitest (5.16.3)
|
||||
nokogiri (1.16.4)
|
||||
nokogiri (1.16.5)
|
||||
mini_portile2 (~> 2.8.2)
|
||||
racc (~> 1.4)
|
||||
pathutil (0.16.2)
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
<div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand">
|
||||
{%- include svg/logo.svg -%}
|
||||
<!--{%- include svg/logo.svg -%}-->
|
||||
<img src="{{ site.fakebaseurl }}/assets/favicon-32x32.png" style="margin-right: 5px;">
|
||||
{%- assign _paths_root = site.paths.root | default: site.data.variables.default.paths.root -%}
|
||||
{%- include snippets/get-nav-url.html path=_paths_root -%}
|
||||
{%- if site.title -%}
|
||||
|
||||
@@ -30,7 +30,7 @@ articles:
|
||||
show_cover: true
|
||||
cover_size: md
|
||||
show_excerpt: true
|
||||
show_readmore: true
|
||||
show_readmore: false
|
||||
show_info: true
|
||||
---
|
||||
<div class="layout--home">
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
title: "STSD: Stop Talking Start Doing"
|
||||
date: 2016-10-26 22:50:33 -0400
|
||||
tags: Diary
|
||||
cover: '/static/2024-04/logo.webp'
|
||||
---
|
||||
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "Using charles proxy to monitor mobile SSL traffics"
|
||||
date: 2016-10-27 22:50:33 -0400
|
||||
tags: ["Network", "Charles proxy"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2021-12/charles-proxy-logo.png'
|
||||
cover: '/static/2024-04/charles.webp'
|
||||
---
|
||||
|
||||
In this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn't provide us a method to modify their own certs. For these situation, I still didn't find a good solutions for it. But I'll keep updating this if I get one.
|
||||
|
||||
@@ -3,17 +3,18 @@ title: "Some of my previews experiment works: 2016"
|
||||
date: 2016-10-28 12:27:33 -0400
|
||||
tags: ["Research", "Log", "Miscellanies"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2024-04/research2016.webp'
|
||||
---
|
||||
This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.
|
||||
<!--more-->
|
||||
|
||||
# 2016-10
|
||||
## 2016-10
|
||||
|
||||
## Time Experiment of rsync
|
||||
### Time Experiment of rsync
|
||||
|
||||
Patch is based on rsync with version 3.1.2. \[[Rsync](https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz)\|[Patch](/static/2016-10/rsync/rsync-3.1.2-time.patch)\]
|
||||
|
||||
### How to collect data
|
||||
#### How to collect data
|
||||
|
||||
Basically, everything of transmission time and computation time will be output with overall time will be printed on the console.
|
||||
But we also need some bash script to collect data through different size of random size and with different modification through them.
|
||||
@@ -22,11 +23,11 @@ But we also need some bash script to collect data through different size of rand
|
||||
- Start from 8K to 64M, modify at last, \[[Bash script](/static/2016-10/rsync/small2Big_change_at_last.sh)\]
|
||||
- Start from 8K to 64M, modify at random place with a (slow) python script, \[[Bash script](/static/2016-10/rsync/small2Big_change_at_anyplace.sh)\|[Python program](/static/2016-10/rsync/addbyte.py)\]
|
||||
|
||||
## Time Experiment of seafile
|
||||
### Time Experiment of seafile
|
||||
|
||||
Patch is based on seafile 5.1.4. You can find the release from [seafile official repo](https://github.com/haiwen/seafile/releases). You may follow official compile instructions from [here](https://manual.seafile.com/build_seafile/linux.html). \[[Patch **no longer avaiable, new version at following sections**]()\]
|
||||
|
||||
### How to collect data
|
||||
#### How to collect data
|
||||
|
||||
We also need everything be done using scripting. But this time I only design added some distance between two increasing files' sizes.
|
||||
|
||||
@@ -42,7 +43,7 @@ awk '/CDC|HUT|ALL/ {print $4,$5}' ~/.ccnet/log/seafile.log > results.stat
|
||||
~~~~
|
||||
|
||||
|
||||
### Install Seafile on odroid xu
|
||||
#### Install Seafile on odroid xu
|
||||
|
||||
Due to failure of my cross-compile to seafile on android. I used develop board as a replacement experiment platform for ARM-seafile testing. I used a [odroid xu](http://www.hardkernel.com/main/products/prdt_info.php?g_code=G137510300620) as hardware standard. Because all I need is an ARM platform, only an ARM-Ubuntu is enough for me. But develop prototype on a board is much fun than coding, I won't address much this time. But I'll start a blog telling some really cool stuff I made for a strange aim.
|
||||
|
||||
@@ -60,11 +61,11 @@ sudo dd if=ubuntu-14.04lts-xubuntu-odroid-xu-20140714.img of=/dev/sdb bs=1M conv
|
||||
sync
|
||||
~~~~
|
||||
|
||||
# 2016-11
|
||||
## 2016-11
|
||||
|
||||
## Android Kernel
|
||||
### Android Kernel
|
||||
|
||||
### How to build an Android Kernel?
|
||||
#### How to build an Android Kernel?
|
||||
|
||||
Generally, I won't tell anything in this parts, just mark some related links, and point out some mistakes or error solutions.
|
||||
|
||||
@@ -74,11 +75,11 @@ Generally, I won't tell anything in this parts, just mark some related links, an
|
||||
|
||||
- [Packing and Flashing a Boot.img](https://softwarebakery.com/building-the-android-kernel-on-linux) **[highly recommend]**
|
||||
|
||||
# 2016-12
|
||||
## 2016-12
|
||||
|
||||
## Android Kernel
|
||||
### Android Kernel
|
||||
|
||||
### How to compile with ftrace?
|
||||
#### How to compile with ftrace?
|
||||
|
||||
If we want to debug under android, ftrace is a great tool for working. But, ftrace is not available in android if we used default configure file. Android kernel configuration is in **arch/arm64/kernel/configs**. We need to add few lines under that.
|
||||
|
||||
@@ -94,7 +95,7 @@ CONFIG_SCHED_TRACER=y
|
||||
CONFIG_STACK_TRACER=y
|
||||
~~~~
|
||||
|
||||
### How to extract android images: Dump an image
|
||||
#### How to extract android images: Dump an image
|
||||
|
||||
If we want to hold a rooted status after flashing boot, we need to extract an image from android devices. We can first use following command to find which blocks belongs to. According to some references, [this article](http://forum.xda-developers.com/showthread.php?t=2450045) provide three ways to dump an image, I picked one for easy using.
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "Xv6 introduction"
|
||||
date: 2017-07-28 14:56:55 -0400
|
||||
tags: ["Xv6", "Teaching", "Operating system"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2021-10/Xv6_LS_Command_Output.png'
|
||||
cover: '/static/2024-04/xv6.webp'
|
||||
---
|
||||
|
||||
In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "Generate Word Cloud Figures with Chinese-Tokenization and WordCloud pyt
|
||||
date: 2020-09-15 22:00:14 -0400
|
||||
tags: Visualization
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2020-09/2020-06-28.png'
|
||||
cover: '/static/2024-04/wordcloud.webp'
|
||||
---
|
||||
|
||||
Let's generate a word cloud like this.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "EDDL: How do we train neural networks on limited edge devices - PART 1"
|
||||
date: 2021-10-13 16:53:20 -0400
|
||||
tags: ["Research", "Edge computing"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2021-10/edgelearn-1.png'
|
||||
cover: '/static/2024-04/eddl1.webp'
|
||||
---
|
||||
This post introduces our previous milestone in project "Edge trainer", as the paper "EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment." was published.
|
||||
As the first part of the introductions, I focus only on the motivation and summary of our works.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "EDDL: How do we train neural networks on limited edge devices - PART 2"
|
||||
date: 2021-10-31 13:01:14 -0400
|
||||
tags: ["Research", "Edge computing"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2021-10/f.5_Impl_leader_worker.png'
|
||||
cover: '/static/2024-04/eddl2.webp'
|
||||
mathjax: true
|
||||
---
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "Labs of CS350"
|
||||
date: 2022-02-22 17:08:17 -0400
|
||||
tags: ["Xv6", "Teaching", "Operating system", "Binghamton university"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2022-02/BU.jpeg'
|
||||
cover: '/static/2024-04/bu.webp'
|
||||
---
|
||||
|
||||
This will be a series regarding lab I gave during the spring 2022 semester.
|
||||
|
||||
@@ -3,7 +3,7 @@ title: "Debug Kubelet"
|
||||
date: 2024-04-10 03:34:00 -0400
|
||||
tags: ["Kubernetes", "Kubelet", "Debug"]
|
||||
author: Pengzhan Hao
|
||||
cover: '/static/2024-04/Kubelet.webp'
|
||||
cover: '/static/2024-04/kubelet.webp'
|
||||
---
|
||||
|
||||
## Debug logs
|
||||
@@ -27,4 +27,4 @@ TL;DR: Bumping up to level 5 would satisfy most debugging needs.
|
||||
By the time, this note was written. In `kubelet` related code, level 8 was only used in `pkg/kubelet/prober/prober_manager.go` and level 7 was only used in `pkg/kubelet/logs/container_log_manager.go`. And there are 11 occurrences that level 6 was used, and all of them are not part of workload lifecycle related.
|
||||
|
||||
## Further readings
|
||||
[Inotify watcher leaks in Kubelet]
|
||||
[Inotify watcher leaks in Kubelet](/posts/inotify-watcher-leaks-in-kubelet.html)
|
||||
@@ -1,12 +1,212 @@
|
||||
---
|
||||
layout: post
|
||||
title: Inotify watcher leaks in Kubelet
|
||||
date: 2024-04-11 16:35 -0400
|
||||
date: 2024-04-18 16:35 -0400
|
||||
description:
|
||||
cover:
|
||||
cover: '/static/2024-04/kubelet_inotify_leak_logo.webp'
|
||||
category:
|
||||
tags:
|
||||
published: false
|
||||
tags: ["Kubernetes", "Kubelet", "Debug", "Inotify"]
|
||||
published: true
|
||||
sitemap: true
|
||||
permalink:
|
||||
author: Pengzhan Hao
|
||||
---
|
||||
|
||||
## Symptom
|
||||
Recently, I faced an issue where Kubelet on a node reported error message failed to create file descriptors.
|
||||
|
||||
```bash
|
||||
error creating file watcher: too many open files
|
||||
error creating file watcher: no space left on device
|
||||
```
|
||||
|
||||
After short checking, I found the node has `max_user_watches` of 10000, but the `TotalinotifyWatches` is beyond this value. (P. S still not sure why watcher can initiate more than cap). In order to find which process occupied the most watchers. I used following command[^flbit_ino] to find it out.
|
||||
|
||||
```bash
|
||||
echo -e "COUNT\tPID\tUSER\tCOMMAND"; sudo find /proc/[0-9]*/fdinfo -type f 2>/dev/null | sudo xargs grep ^inotify 2>/dev/null | cut -d/ -f 3 | uniq -c | sort -nr | { while read -rs COUNT PID; do echo -en "$COUNT\t$PID\t"; ps -p $PID -o user=,command=; done}
|
||||
|
||||
COUNT PID USER COMMAND
|
||||
7491 8412 root /home/kubernetes/bin/kubelet --v=2 --cloud-provide=gce --experi
|
||||
2620 1 root /sbin/init
|
||||
....
|
||||
```
|
||||
|
||||
Surprisingly, Kubelet initiated more than 7000 inotify watchers. I assumed there was an inotify leakage in Kubelet.
|
||||
## Leakage check
|
||||
|
||||
### Clean Kubelet
|
||||
To better understand the situation, I created a clean cluster with only 1 clean node on GKE. Roughly 70 inotify watchers were there. I created a single nginx pod and the number increased by 3. Theoretically, these 3 watchers are used by Kubelet to monitor any changes on `rootfs `, `kube-api-access` and `PodSandbox`. But to verify it, we need to check more details on which inodes are monitored by Kubelet.
|
||||
### Check inotify file descriptors
|
||||
To do so, let's take a look how to track a single inotify file descriptor. Opened processes' `fdinfo` folder, we can examine each or them to find an inotify fd.
|
||||
|
||||
```bash
|
||||
# Find kubelet pid
|
||||
ps -aux | grep kubelet
|
||||
KPID=2430
|
||||
|
||||
# File the an example fd
|
||||
sudo ls /proc/2430/fdinfo
|
||||
|
||||
0 1 10 11 12 13 14 2 3 4 5 6 7 8 9
|
||||
|
||||
...
|
||||
|
||||
sudo cat /proc/2430/fdinfo/8
|
||||
|
||||
pos: 0
|
||||
flags: 02004000
|
||||
mnt_id: 15
|
||||
ino: 1057
|
||||
inotify wd:1 ino:3f327 sdev:800001 mask:fc6 ignored_mask:0 fhandle-bytes:8 fhandle-type:1 f_handle:27f30300e5059ea2
|
||||
```
|
||||
|
||||
This is very confusing, so I rely on `man proc`[^man_proc] to understand every piece of them. In given fd, the needed information to continue sit in the last line. It's an inotify entry represents the 1 file or folder to be monitored. And the most useful data is `ino:3f327` which represents the inode number of target file (in hexadecimal). And `sdev:800001`, which represents the ID of device where the inode sit on, and it's also in hex.
|
||||
|
||||
Using `lsblk`, I can see there's only 1 disk I'm using on the node, so finding the target file would be easy.
|
||||
|
||||
```bash
|
||||
# Cast to decimal
|
||||
ino=3f327
|
||||
dec="$((16#${ino}))"
|
||||
|
||||
# Find the target file
|
||||
loc="debugfs -R 'ncheck ${dec}' /dev/sda1"
|
||||
sudo eval $loc 2>/dev/null
|
||||
|
||||
debugfd 1.46.5 (30-Dec-2021)
|
||||
Inode Pathname
|
||||
258855 /etc/srv/kubernetes/pki/ca-certificates.crt
|
||||
```
|
||||
|
||||
Put all processes above into one single script(please see the [updated version in the appendix](#updated-script-to-get-inotify-watchers-initiated-by-kubelet)), I can retrieve all target files, that would help to understand if there's a real leakage. Also, I count the unique inode amount, this could also help to know which inode are monitored multiple times.
|
||||
|
||||
```bash
|
||||
cat << EOF | sudo tee -a test.sh
|
||||
echo "kubelet pid="${PID}
|
||||
in_fds=$(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify | cut -d " " -f 3 | cut -d ":" -f 2)
|
||||
echo ${in_fds}
|
||||
echo "Count: $(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify | wc -l)"
|
||||
|
||||
uniq_fds=$(echo "${in_fds[@]}" | sort | uniq)
|
||||
echo ${uniq_fds}
|
||||
|
||||
while read -r element;
|
||||
do
|
||||
count=$(echo "${in_fds[@]}" | grep -o "${element}" | wc -l)
|
||||
dec="$((16#${element}))"
|
||||
loc="debugfs -R 'ncheck ${dec}' /dev/sda1"
|
||||
loc=$(eval $loc 2>/dev/null | tail -1 | cut -d " " -f 4)
|
||||
printf "%-6s %-10s %-6s %s\n" "${element}" "${dec}" "${count}" "${loc}"
|
||||
done <<< "${uniq_fds}"
|
||||
EOF
|
||||
|
||||
sudo bash test.sh
|
||||
|
||||
kubelet pid=2430
|
||||
3f327 3f321 ...
|
||||
Count: 120
|
||||
1 10b 1259 128a ...
|
||||
1 1 72 Inode Pathname
|
||||
10b 267 1 267 /etc/systemd/system/multi-user.target.wants/snapd.service
|
||||
...
|
||||
```
|
||||
|
||||
The given results are consists by following parts:
|
||||
- One line for get Kubelet pid
|
||||
- One line for all target inode numbers
|
||||
- One line for tell how many unique inode (120)
|
||||
- One line of sorted target
|
||||
- Following 120 lines, each of them represents a unique inode number, its decimal number, count, another time of decimal number and the target file path.
|
||||
|
||||
I used the same script to the problematic node, and it showed the following result. In summary, most Kubelet watchers were targeting `ino:1 `. And there are 6649 targets files, which likely to be leakage, because there were only 150 pods on this pod. Unfortunately, `debugfs` can't find any target files, so the output showed as meaningless string `"Inode Pathname"`.
|
||||
|
||||
```
|
||||
kubelet pid=8412
|
||||
...
|
||||
Count: 7491
|
||||
...
|
||||
1 1 6649 Inode Pathname
|
||||
```
|
||||
|
||||
### Bad apple
|
||||
Why `debugfs` can't help anymore? The reason is simple, each cgroup for a pod is using its own rootfs. This means the watcher are somehow residing on different rootfs and using independent inode index. There are some other ways to do it, I choose the most common tool `grep` to find out.
|
||||
|
||||
```
|
||||
sudo grep / -inum 1
|
||||
/home/kubernetes/containerized_mounter/rootfs/dev
|
||||
/home/kubernetes/containerized_mounter/rootfs/proc
|
||||
...
|
||||
/home/kubernetes/containerized_mounter/rootfs/var/lib/kubelet/pods/5325873d-f2a0-48df-83e2-0b911df2f77f/volumes/kubernetes.io~projected/kube-api-access-227jg
|
||||
...
|
||||
/dev
|
||||
/boot/efi
|
||||
...
|
||||
```
|
||||
|
||||
This turns things easy, because I can just use pod ID to compare between running pods to find out if there are any terminated pods are there. And it did show there's some non-existence pods still being watched somehow.
|
||||
|
||||
## What to expect next
|
||||
|
||||
- [How Kubelet leaked inotify watchers?]()
|
||||
- [debugfs]()
|
||||
|
||||
## Appendix
|
||||
|
||||
### Updated script to get inotify watchers initiated by kubelet
|
||||
|
||||
Thanks for [yujuhong@](https://github.com/yujuhong)'s momentum and helps in finishing updated script.
|
||||
|
||||
```bash
|
||||
PID=$(echo $(ps -aux | grep "/home/kubernetes/bin/kubelet" | head -1) | cut -d " " -f 2)
|
||||
echo "Kubelet Pid:" ${PID}
|
||||
|
||||
inums_raw=$(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify)
|
||||
# echo ${inums_raw}
|
||||
echo "Count: $(find /proc/${PID}/fdinfo -type f 2>/dev/null | xargs grep ^inotify | wc -l)"
|
||||
|
||||
while read -r line;
|
||||
do
|
||||
reg="ino:([0-9a-f]*) sdev:([0-9a-f]*)"
|
||||
if [[ ${line} =~ $reg ]]; then
|
||||
ino="${BASH_REMATCH[1]}"
|
||||
sdev="${BASH_REMATCH[2]}"
|
||||
# echo $ino $sdev
|
||||
else
|
||||
echo "wrong line"
|
||||
fi
|
||||
|
||||
sdev_in_dec=$((16#$sdev))
|
||||
minor=$((sdev_in_dec % 256))
|
||||
major=$((sdev_in_dec / 256))
|
||||
# echo "${major}:${minor}"
|
||||
|
||||
in_fds_sdev+=("${ino}-${major}:${minor}")
|
||||
done <<< "${inums_raw}"
|
||||
|
||||
uniq_pairs=($(echo "${in_fds_sdev[@]}" | sort | uniq))
|
||||
echo "Unique target" ${#uniq_pairs[@]}
|
||||
|
||||
printf "%-10s %-10s %-6s %s\n" "INUM" "DEV" "COUNT" "TARGET"
|
||||
for pair in "${uniq_pairs[@]}"
|
||||
do
|
||||
count=$(echo "${in_fds_sdev[@]}" | grep -o "${pair}" | wc -l)
|
||||
fd_hex=$(echo ${pair} | cut -d "-" -f 1)
|
||||
dev=$(echo ${pair} | cut -d "-" -f 2)
|
||||
fd_dec="$((16#${fd_hex}))"
|
||||
|
||||
mount_info=$(grep ${dev} /proc/$PID/mountinfo)
|
||||
if [[ -z $mount_info ]]; then
|
||||
echo "Can't find mount info for" $dev
|
||||
else
|
||||
tmpfs_path=$(echo $mount_info | cut -d " " -f 5)
|
||||
# echo $tmpfs_path
|
||||
loc=$(find ${tmpfs_path} -inum ${fd_dec})
|
||||
printf "%-10s %-10s %-6s %s\n" "${fd_dec}" "${dev}" "${count}" "${loc}"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
## References
|
||||
|
||||
[^flbit_ino]: [Fluentbit error "cannot adjust chunk size" on GKE](https://stackoverflow.com/a/76712244)
|
||||
[^man_proc]: [proc(5)](https://manpages.courier-mta.org/htmlman5/proc.5.html)
|
||||
[^list_ino]: [Listing the files that are being watched by `inotify` instances](https://unix.stackexchange.com/a/646113)
|
||||
@@ -138,11 +138,11 @@ $button: (
|
||||
);
|
||||
|
||||
$image: (
|
||||
width-xl: 20em,
|
||||
width-lg: 16rem,
|
||||
width: 12rem,
|
||||
width-sm: 8rem,
|
||||
width-xs: 4rem
|
||||
width-xl: 15em,
|
||||
width-lg: 12rem,
|
||||
width: 9rem,
|
||||
width-sm: 6rem,
|
||||
width-xs: 3rem
|
||||
);
|
||||
|
||||
$menu: (
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
.image {
|
||||
max-width: 100%;
|
||||
border-radius: 13px;
|
||||
@extend .image--md;
|
||||
}
|
||||
.image--md {
|
||||
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
@@ -440,7 +442,7 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
<ul class="menu">
|
||||
<li>
|
||||
<button type="button" class="button button--secondary button--pill tag-button tag-button--all" data-encode="">
|
||||
Show All<div class="tag-button__count">9</div>
|
||||
Show All<div class="tag-button__count">10</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Binghamton+university">
|
||||
<span>Binghamton university</span><div class="tag-button__count">1</div>
|
||||
@@ -448,8 +450,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Charles+proxy">
|
||||
<span>Charles proxy</span><div class="tag-button__count">1</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Debug">
|
||||
<span>Debug</span><div class="tag-button__count">1</div>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-2" data-encode="Debug">
|
||||
<span>Debug</span><div class="tag-button__count">2</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Diary">
|
||||
<span>Diary</span><div class="tag-button__count">1</div>
|
||||
@@ -457,11 +459,14 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-2" data-encode="Edge+computing">
|
||||
<span>Edge computing</span><div class="tag-button__count">2</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Kubelet">
|
||||
<span>Kubelet</span><div class="tag-button__count">1</div>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Inotify">
|
||||
<span>Inotify</span><div class="tag-button__count">1</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Kubernetes">
|
||||
<span>Kubernetes</span><div class="tag-button__count">1</div>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-2" data-encode="Kubelet">
|
||||
<span>Kubelet</span><div class="tag-button__count">2</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-2" data-encode="Kubernetes">
|
||||
<span>Kubernetes</span><div class="tag-button__count">2</div>
|
||||
</button>
|
||||
</li><li><button type="button" class="button button--pill tag-button tag-button-1" data-encode="Log">
|
||||
<span>Log</span><div class="tag-button__count">1</div>
|
||||
@@ -489,7 +494,9 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
</button>
|
||||
</li></ul>
|
||||
</div>
|
||||
<div class="js-result layout--archive__result d-none"><div class="article-list items"><section><h2 class="article-list__group-header">2024</h2><ul class="items"><li class="item" itemscope itemtype="http://schema.org/BlogPosting" data-tags="Kubernetes,Kubelet,Debug">
|
||||
<div class="js-result layout--archive__result d-none"><div class="article-list items"><section><h2 class="article-list__group-header">2024</h2><ul class="items"><li class="item" itemscope itemtype="http://schema.org/BlogPosting" data-tags="Kubernetes,Kubelet,Debug,Inotify">
|
||||
<div class="item__content"><span class="item__meta">Apr 18</span><a itemprop="headline" class="item__header" href="/posts/inotify-watcher-leaks-in-kubelet">Inotify watcher leaks in Kubelet</a></div>
|
||||
</li><li class="item" itemscope itemtype="http://schema.org/BlogPosting" data-tags="Kubernetes,Kubelet,Debug">
|
||||
<div class="item__content"><span class="item__meta">Apr 10</span><a itemprop="headline" class="item__header" href="/posts/Debug-kubelet">Debug Kubelet</a></div>
|
||||
</li></ul></section><section><h2 class="article-list__group-header">2022</h2><ul class="items"><li class="item" itemscope itemtype="http://schema.org/BlogPosting" data-tags="Xv6,Teaching,Operating+system,Binghamton+university">
|
||||
<div class="item__content"><span class="item__meta">Feb 22</span><a itemprop="headline" class="item__header" href="/posts/cs350-labs">Labs of CS350</a></div>
|
||||
|
||||
@@ -1051,17 +1051,17 @@ input:focus { outline: none; }
|
||||
|
||||
.button--xl.button--circle, .button--xl.swiper__button { width: 2.8rem; height: 2.8rem; }
|
||||
|
||||
.image { max-width: 100%; }
|
||||
.image { max-width: 100%; border-radius: 13px; }
|
||||
|
||||
.image--md, .image { width: 12rem; }
|
||||
.image--md, .image { width: 9rem; }
|
||||
|
||||
.image--xl { width: 20em; }
|
||||
.image--xl { width: 15em; }
|
||||
|
||||
.image--lg { width: 16rem; }
|
||||
.image--lg { width: 12rem; }
|
||||
|
||||
.image--sm { width: 8rem; }
|
||||
.image--sm { width: 6rem; }
|
||||
|
||||
.image--xs { width: 4rem; }
|
||||
.image--xs { width: 3rem; }
|
||||
|
||||
.card { max-width: 18rem; border-radius: 0.4rem; box-shadow: 0 4px 8px rgba(0, 0, 0, 0.23), 0 1px 3px rgba(0, 0, 0, 0.08), 0 6px 12px rgba(0, 0, 0, 0.02); -webkit-transition: box-shadow 0.4s ease-in-out; transition: box-shadow 0.4s ease-in-out; }
|
||||
|
||||
|
||||
@@ -1 +1 @@
|
||||
window.TEXT_SEARCH_DATA={'posts':[{'title':"STSD: Stop Talking Start Doing",'url':"/posts/welcome-to-my-blog"},{'title':"Using charles proxy to monitor mobile SSL traffics",'url':"/posts/charles-is-not-a-good-tool"},{'title':"Some of my previews experiment works: 2016",'url':"/posts/some-of-my-previews-exper-work"},{'title':"Xv6 introduction",'url':"/posts/intro-xv6"},{'title':"Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries",'url':"/posts/generate-word-cloud-with-chinese-fenci"},{'title':"EDDL: How do we train neural networks on limited edge devices - PART 1",'url':"/posts/eddl-how-do-we-train-on-limited-edge-devices"},{'title':"EDDL: How do we train neural networks on limited edge devices - PART 2",'url':"/posts/eddl-how-do-we-train-on-limited-edge-devices-part2"},{'title':"Labs of CS350",'url':"/posts/cs350-labs"},{'title':"Debug Kubelet",'url':"/posts/Debug-kubelet"}]};
|
||||
window.TEXT_SEARCH_DATA={'posts':[{'title':"STSD: Stop Talking Start Doing",'url':"/posts/welcome-to-my-blog"},{'title':"Using charles proxy to monitor mobile SSL traffics",'url':"/posts/charles-is-not-a-good-tool"},{'title':"Some of my previews experiment works: 2016",'url':"/posts/some-of-my-previews-exper-work"},{'title':"Xv6 introduction",'url':"/posts/intro-xv6"},{'title':"Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries",'url':"/posts/generate-word-cloud-with-chinese-fenci"},{'title':"EDDL: How do we train neural networks on limited edge devices - PART 1",'url':"/posts/eddl-how-do-we-train-on-limited-edge-devices"},{'title':"EDDL: How do we train neural networks on limited edge devices - PART 2",'url':"/posts/eddl-how-do-we-train-on-limited-edge-devices-part2"},{'title':"Labs of CS350",'url':"/posts/cs350-labs"},{'title':"Debug Kubelet",'url':"/posts/Debug-kubelet"},{'title':"Inotify watcher leaks in Kubelet",'url':"/posts/inotify-watcher-leaks-in-kubelet"}]};
|
||||
|
||||
@@ -285,7 +285,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -425,7 +426,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
@@ -437,11 +439,35 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
<div class="col-main cell cell--auto"><!-- start custom main top snippet -->
|
||||
|
||||
<!-- end custom main top snippet -->
|
||||
<article itemscope itemtype="http://schema.org/WebPage"><header style="display:none;"><h1>Home</h1></header><meta itemprop="headline" content="Home"><meta itemprop="author" content="Pengzhan Hao"/><div class="js-article-content"><div class="layout--articles"><div class="article-list items items--divided"><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/Kubelet.webp" /></div><div class="item__content">
|
||||
<article itemscope itemtype="http://schema.org/WebPage"><header style="display:none;"><h1>Home</h1></header><meta itemprop="headline" content="Home"><meta itemprop="author" content="Pengzhan Hao"/><div class="js-article-content"><div class="layout--articles"><div class="article-list items items--divided"><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/kubelet_inotify_leak_logo.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/inotify-watcher-leaks-in-kubelet"><h2 itemprop="headline" class="item__header">Inotify watcher leaks in Kubelet</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">Symptom
|
||||
Recently, I faced an issue where Kubelet on a node reported error message failed to create file descriptors.
|
||||
|
||||
error creating file watcher: too many open files
|
||||
error creating file watcher: no space left on device
|
||||
|
||||
|
||||
After short checking, I found the node has max_user_watches of 10000, but the TotalinotifyWatches is beyond this value. (P. S...</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Kubernetes">Kubernetes</a>
|
||||
</li><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Kubelet">Kubelet</a>
|
||||
</li><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Debug">Debug</a>
|
||||
</li><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Inotify">Inotify</a>
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Apr 18, 2024</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2024-04-18T16:35:00-04:00">
|
||||
<meta itemprop="keywords" content="Kubernetes,Kubelet,Debug,Inotify"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/kubelet.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/Debug-kubelet"><h2 itemprop="headline" class="item__header">Debug Kubelet</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">Debug logs
|
||||
|
||||
Like all others program’s debugging, the most straightforward way for newbies and the easiest way for advanced developer is relying on logs. Same to debug kubelet, bumping up verbosity to show more logs is the most intuitive approach when facing an issue. Like most component in Kubernetes, kubelet uses klog for logging and there are ...</div><p><a href="/posts/Debug-kubelet">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
Like all others program’s debugging, the most straightforward way for newbies and the easiest way for advanced developer is relying on logs. Same to debug kubelet, bumping up verbosity to show more logs is the most intuitive approach when facing an issue. Like most component in Kubernetes, kubelet uses klog for logging and there are ...</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Kubernetes">Kubernetes</a>
|
||||
</li><li>
|
||||
@@ -453,13 +479,13 @@ Like all others program’s debugging, the most straightforward way for newbies
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Apr 10, 2024</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2024-04-10T03:34:00-04:00">
|
||||
<meta itemprop="keywords" content="Kubernetes,Kubelet,Debug"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2022-02/BU.jpeg" /></div><div class="item__content">
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/bu.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/cs350-labs"><h2 itemprop="headline" class="item__header">Labs of CS350</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">This will be a series regarding lab I gave during the spring 2022 semester.
|
||||
|
||||
The reason why I am writing this down is because it has been a week and no students ask for the solution of the last Lab.
|
||||
I realise that learning gap between students are huge, especially when a non-profit university is admitting more and more students.
|
||||
To help all stud...</div><p><a href="/posts/cs350-labs">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
To help all stud...</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Xv6">Xv6</a>
|
||||
</li><li>
|
||||
@@ -474,7 +500,7 @@ To help all stud...</div><p><a href="/posts/cs350-labs">Read more</a></p></div><
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Feb 22, 2022</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2022-02-22T16:08:17-05:00">
|
||||
<meta itemprop="keywords" content="Xv6,Teaching,Operating system,Binghamton university"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2021-10/f.5_Impl_leader_worker.png" /></div><div class="item__content">
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/eddl2.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/eddl-how-do-we-train-on-limited-edge-devices-part2"><h2 itemprop="headline" class="item__header">EDDL: How do we train neural networks on limited edge devices - PART 2</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">In the last post, part1, our idea of distributed learning on edge environment was generally addressed.
|
||||
I introduced the reason why edge distributed learning is needed and what improvements it can achieve.
|
||||
@@ -482,7 +508,7 @@ In this post, I will talk about our motivation study and how our framework works
|
||||
|
||||
How does data support us training on edge?
|
||||
|
||||
Before designin...</div><p><a href="/posts/eddl-how-do-we-train-on-limited-edge-devices-part2">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
Before designin...</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Research">Research</a>
|
||||
</li><li>
|
||||
@@ -491,11 +517,11 @@ Before designin...</div><p><a href="/posts/eddl-how-do-we-train-on-limited-edge-
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Oct 31, 2021</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2021-10-31T13:01:14-04:00">
|
||||
<meta itemprop="keywords" content="Research,Edge computing"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2021-10/edgelearn-1.png" /></div><div class="item__content">
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/eddl1.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/eddl-how-do-we-train-on-limited-edge-devices"><h2 itemprop="headline" class="item__header">EDDL: How do we train neural networks on limited edge devices - PART 1</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">This post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment.” was published.
|
||||
As the first part of the introductions, I focus only on the motivation and summary of our works.
|
||||
More details in design and implementation can be found in l...</div><p><a href="/posts/eddl-how-do-we-train-on-limited-edge-devices">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
More details in design and implementation can be found in l...</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Research">Research</a>
|
||||
</li><li>
|
||||
@@ -504,21 +530,21 @@ More details in design and implementation can be found in l...</div><p><a href="
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Oct 13, 2021</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2021-10-13T16:53:20-04:00">
|
||||
<meta itemprop="keywords" content="Research,Edge computing"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2020-09/2020-06-28.png" /></div><div class="item__content">
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/wordcloud.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/generate-word-cloud-with-chinese-fenci"><h2 itemprop="headline" class="item__header">Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">Let’s generate a word cloud like this.
|
||||
Don’t understand the language is not a big deal.
|
||||
If your written language is based on latin alphabet(or other language has space between words), skip tokenization.</div><p><a href="/posts/generate-word-cloud-with-chinese-fenci">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
If your written language is based on latin alphabet(or other language has space between words), skip tokenization.</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Visualization">Visualization</a>
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Sep 15, 2020</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2020-09-15T22:00:14-04:00">
|
||||
<meta itemprop="keywords" content="Visualization"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2021-10/Xv6_LS_Command_Output.png" /></div><div class="item__content">
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/xv6.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/intro-xv6"><h2 itemprop="headline" class="item__header">Xv6 introduction</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes.
|
||||
Understand system call and know how to implement a simple one will be coved as the first half.
|
||||
In the second half of this post, I will discuss a little bit more on how to debug ...</div><p><a href="/posts/intro-xv6">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
In the second half of this post, I will discuss a little bit more on how to debug ...</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Xv6">Xv6</a>
|
||||
</li><li>
|
||||
@@ -530,9 +556,9 @@ In the second half of this post, I will discuss a little bit more on how to debu
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Jul 28, 2017</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2017-07-28T14:56:55-04:00">
|
||||
<meta itemprop="keywords" content="Xv6,Teaching,Operating system"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__content">
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2024-04/research2016.webp" /></div><div class="item__content">
|
||||
<header><a href="/posts/some-of-my-previews-exper-work"><h2 itemprop="headline" class="item__header">Some of my previews experiment works: 2016</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.</div><p><a href="/posts/some-of-my-previews-exper-work">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.</div></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Research">Research</a>
|
||||
</li><li>
|
||||
@@ -544,19 +570,8 @@ In the second half of this post, I will discuss a little bit more on how to debu
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Oct 28, 2016</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2016-10-28T12:27:33-04:00">
|
||||
<meta itemprop="keywords" content="Research,Log,Miscellanies"></div>
|
||||
</article><article class="item" itemscope itemtype="http://schema.org/BlogPosting"><div class="item__image" style="vertical-align: middle"><img class="image" src="/static/2021-12/charles-proxy-logo.png" /></div><div class="item__content">
|
||||
<header><a href="/posts/charles-is-not-a-good-tool"><h2 itemprop="headline" class="item__header">Using charles proxy to monitor mobile SSL traffics</h2></a></header>
|
||||
<div class="item__description"><div class="article__content" itemprop="description articleBody">In this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn’t provide us a method to modify their own certs. For these situation, I still did...</div><p><a href="/posts/charles-is-not-a-good-tool">Read more</a></p></div><div class="article__info clearfix"><ul class="left-col menu"><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Network">Network</a>
|
||||
</li><li>
|
||||
<a class="button button--secondary button--pill button--sm"
|
||||
href="/archive.html?tag=Charles+proxy">Charles proxy</a>
|
||||
</li></ul><ul class="right-col menu"><li><i class="fas fa-user"></i> <span>Pengzhan Hao</span></li><li><i class="far fa-calendar-alt"></i> <span>Oct 27, 2016</span>
|
||||
</li></ul></div><meta itemprop="author" content="Pengzhan Hao"/><meta itemprop="datePublished" content="2016-10-27T22:50:33-04:00">
|
||||
<meta itemprop="keywords" content="Network,Charles proxy"></div>
|
||||
</article></div>
|
||||
</div><div class="layout--home"><div class="pagination"><p>9 post articles, 2 pages.</p>
|
||||
</div><div class="layout--home"><div class="pagination"><p>10 post articles, 2 pages.</p>
|
||||
<div class="pagination__menu">
|
||||
<ul class="menu menu--nowrap"><li><div class="button button--secondary button--circle disabled">
|
||||
<i class="fas fa-angle-left"></i>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="Using charles proxy to monitor mobile SSL traffics" />
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-12-11T13:35:39-05:00","datePublished":"2016-10-27T22:50:33-04:00","description":"In this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn’t provide us a method to modify their own certs. For these situation, I still didn’t find a good solutions for it. But I’ll keep updating this if I get one. My current solution is using AP to forward all SSL traffic to a proxy, charles proxy is my first choice (Prof asked). It’s a non-free software which still update new versions now. So mainly, I’ll talk about how to charles SSL proxy.","headline":"Using charles proxy to monitor mobile SSL traffics","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"},"url":"https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"}</script>
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2016-10-27T22:50:33-04:00","description":"In this blog, I will generally talk about how to use proper tools to monitor SSL traffics of a mobile devices. Currently, I only can dealing with those SSL traffics which use an obviously certification. Some applications may not using system root cert or they doesn’t provide us a method to modify their own certs. For these situation, I still didn’t find a good solutions for it. But I’ll keep updating this if I get one. My current solution is using AP to forward all SSL traffic to a proxy, charles proxy is my first choice (Prof asked). It’s a non-free software which still update new versions now. So mainly, I’ll talk about how to charles SSL proxy.","headline":"Using charles proxy to monitor mobile SSL traffics","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"},"url":"https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"}</script>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="EDDL: How do we train neural networks on limited edge devices - PART 1" />
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-12-11T13:35:39-05:00","datePublished":"2021-10-13T16:53:20-04:00","description":"This post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment.” was published. As the first part of the introductions, I focus only on the motivation and summary of our works. More details in design and implementation can be found in late posts.","headline":"EDDL: How do we train neural networks on limited edge devices - PART 1","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"},"url":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"}</script>
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2021-10-13T16:53:20-04:00","description":"This post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Computing Environment.” was published. As the first part of the introductions, I focus only on the motivation and summary of our works. More details in design and implementation can be found in late posts.","headline":"EDDL: How do we train neural networks on limited edge devices - PART 1","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"},"url":"https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"}</script>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries" />
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-12-11T13:35:39-05:00","datePublished":"2020-09-15T22:00:14-04:00","description":"Let’s generate a word cloud like this. Don’t understand the language is not a big deal. If your written language is based on latin alphabet(or other language has space between words), skip tokenization.","headline":"Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"},"url":"https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"}</script>
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2020-09-15T22:00:14-04:00","description":"Let’s generate a word cloud like this. Don’t understand the language is not a big deal. If your written language is based on latin alphabet(or other language has space between words), skip tokenization.","headline":"Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"},"url":"https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"}</script>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="Xv6 introduction" />
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-12-11T13:35:39-05:00","datePublished":"2017-07-28T14:56:55-04:00","description":"In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes. Understand system call and know how to implement a simple one will be coved as the first half. In the second half of this post, I will discuss a little bit more on how to debug xv6 using gdb.","headline":"Xv6 introduction","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/intro-xv6"},"url":"https://blog.pengzhan.dev/posts/intro-xv6"}</script>
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2017-07-28T14:56:55-04:00","description":"In this post, you will learn a few basic concepts of xv6. Learning path will be closed coupled to first project assignment I gave when I assisted in teaching OS classes. Understand system call and know how to implement a simple one will be coved as the first half. In the second half of this post, I will discuss a little bit more on how to debug xv6 using gdb.","headline":"Xv6 introduction","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/intro-xv6"},"url":"https://blog.pengzhan.dev/posts/intro-xv6"}</script>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="Some of my previews experiment works: 2016" />
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-12-11T13:35:39-05:00","datePublished":"2016-10-28T12:27:33-04:00","description":"This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.","headline":"Some of my previews experiment works: 2016","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"},"url":"https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"}</script>
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2016-10-28T12:27:33-04:00","description":"This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.","headline":"Some of my previews experiment works: 2016","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"},"url":"https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"}</script>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
@@ -454,13 +456,13 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
<div class="article__content" itemprop="articleBody"><p>This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.
|
||||
<!--more--></p>
|
||||
|
||||
<h1 id="2016-10">2016-10</h1>
|
||||
<h2 id="2016-10">2016-10</h2>
|
||||
|
||||
<h2 id="time-experiment-of-rsync">Time Experiment of rsync</h2>
|
||||
<h3 id="time-experiment-of-rsync">Time Experiment of rsync</h3>
|
||||
|
||||
<p>Patch is based on rsync with version 3.1.2. [<a href="https://download.samba.org/pub/rsync/rsync-3.1.2.tar.gz">Rsync</a>|<a href="/static/2016-10/rsync/rsync-3.1.2-time.patch">Patch</a>]</p>
|
||||
|
||||
<h3 id="how-to-collect-data">How to collect data</h3>
|
||||
<h4 id="how-to-collect-data">How to collect data</h4>
|
||||
|
||||
<p>Basically, everything of transmission time and computation time will be output with overall time will be printed on the console.
|
||||
But we also need some bash script to collect data through different size of random size and with different modification through them.</p>
|
||||
@@ -471,11 +473,11 @@ But we also need some bash script to collect data through different size of rand
|
||||
<li>Start from 8K to 64M, modify at random place with a (slow) python script, [<a href="/static/2016-10/rsync/small2Big_change_at_anyplace.sh">Bash script</a>|<a href="/static/2016-10/rsync/addbyte.py">Python program</a>]</li>
|
||||
</ul>
|
||||
|
||||
<h2 id="time-experiment-of-seafile">Time Experiment of seafile</h2>
|
||||
<h3 id="time-experiment-of-seafile">Time Experiment of seafile</h3>
|
||||
|
||||
<p>Patch is based on seafile 5.1.4. You can find the release from <a href="https://github.com/haiwen/seafile/releases">seafile official repo</a>. You may follow official compile instructions from <a href="https://manual.seafile.com/build_seafile/linux.html">here</a>. [<a href="">Patch <strong>no longer avaiable, new version at following sections</strong></a>]</p>
|
||||
|
||||
<h3 id="how-to-collect-data-1">How to collect data</h3>
|
||||
<h4 id="how-to-collect-data-1">How to collect data</h4>
|
||||
|
||||
<p>We also need everything be done using scripting. But this time I only design added some distance between two increasing files’ sizes.</p>
|
||||
|
||||
@@ -491,7 +493,7 @@ But we also need some bash script to collect data through different size of rand
|
||||
<span class="nb">awk</span> <span class="s1">'/CDC|HUT|ALL/ {print $4,$5}'</span> ~/.ccnet/log/seafile.log <span class="o">></span> results.stat
|
||||
</code></pre></div></div>
|
||||
|
||||
<h3 id="install-seafile-on-odroid-xu">Install Seafile on odroid xu</h3>
|
||||
<h4 id="install-seafile-on-odroid-xu">Install Seafile on odroid xu</h4>
|
||||
|
||||
<p>Due to failure of my cross-compile to seafile on android. I used develop board as a replacement experiment platform for ARM-seafile testing. I used a <a href="http://www.hardkernel.com/main/products/prdt_info.php?g_code=G137510300620">odroid xu</a> as hardware standard. Because all I need is an ARM platform, only an ARM-Ubuntu is enough for me. But develop prototype on a board is much fun than coding, I won’t address much this time. But I’ll start a blog telling some really cool stuff I made for a strange aim.</p>
|
||||
|
||||
@@ -513,11 +515,11 @@ unxz ubuntu-14.04lts-xubuntu-odroid-xu-20140714.img.xz
|
||||
<span class="nb">sync</span>
|
||||
</code></pre></div></div>
|
||||
|
||||
<h1 id="2016-11">2016-11</h1>
|
||||
<h2 id="2016-11">2016-11</h2>
|
||||
|
||||
<h2 id="android-kernel">Android Kernel</h2>
|
||||
<h3 id="android-kernel">Android Kernel</h3>
|
||||
|
||||
<h3 id="how-to-build-an-android-kernel">How to build an Android Kernel?</h3>
|
||||
<h4 id="how-to-build-an-android-kernel">How to build an Android Kernel?</h4>
|
||||
|
||||
<p>Generally, I won’t tell anything in this parts, just mark some related links, and point out some mistakes or error solutions.</p>
|
||||
|
||||
@@ -532,11 +534,11 @@ unxz ubuntu-14.04lts-xubuntu-odroid-xu-20140714.img.xz
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h1 id="2016-12">2016-12</h1>
|
||||
<h2 id="2016-12">2016-12</h2>
|
||||
|
||||
<h2 id="android-kernel-1">Android Kernel</h2>
|
||||
<h3 id="android-kernel-1">Android Kernel</h3>
|
||||
|
||||
<h3 id="how-to-compile-with-ftrace">How to compile with ftrace?</h3>
|
||||
<h4 id="how-to-compile-with-ftrace">How to compile with ftrace?</h4>
|
||||
|
||||
<p>If we want to debug under android, ftrace is a great tool for working. But, ftrace is not available in android if we used default configure file. Android kernel configuration is in <strong>arch/arm64/kernel/configs</strong>. We need to add few lines under that.</p>
|
||||
|
||||
@@ -551,7 +553,7 @@ unxz ubuntu-14.04lts-xubuntu-odroid-xu-20140714.img.xz
|
||||
<span class="nv">CONFIG_STACK_TRACER</span><span class="o">=</span>y
|
||||
</code></pre></div></div>
|
||||
|
||||
<h3 id="how-to-extract-android-images-dump-an-image">How to extract android images: Dump an image</h3>
|
||||
<h4 id="how-to-extract-android-images-dump-an-image">How to extract android images: Dump an image</h4>
|
||||
|
||||
<p>If we want to hold a rooted status after flashing boot, we need to extract an image from android devices. We can first use following command to find which blocks belongs to. According to some references, <a href="http://forum.xda-developers.com/showthread.php?t=2450045">this article</a> provide three ways to dump an image, I picked one for easy using.</p>
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
<meta name="twitter:card" content="summary" />
|
||||
<meta property="twitter:title" content="STSD: Stop Talking Start Doing" />
|
||||
<script type="application/ld+json">
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-03T18:23:31-04:00","datePublished":"2016-10-26T22:50:33-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD: Stop Talking Start Doing","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/welcome-to-my-blog"},"url":"https://blog.pengzhan.dev/posts/welcome-to-my-blog"}</script>
|
||||
{"@context":"https://schema.org","@type":"BlogPosting","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2024-04-24T00:32:03-04:00","datePublished":"2016-10-26T22:50:33-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD: Stop Talking Start Doing","mainEntityOfPage":{"@type":"WebPage","@id":"https://blog.pengzhan.dev/posts/welcome-to-my-blog"},"url":"https://blog.pengzhan.dev/posts/welcome-to-my-blog"}</script>
|
||||
<!-- End Jekyll SEO tag -->
|
||||
|
||||
<!-- end custom head snippets -->
|
||||
@@ -284,7 +284,8 @@
|
||||
|
||||
<div class="page__main-inner"><div class="page__header d-print-none"><header class="header"><div class="main">
|
||||
<div class="header__title">
|
||||
<div class="header__brand"><?xml version="1.0" standalone="no"?>
|
||||
<div class="header__brand">
|
||||
<!--<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
|
||||
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
|
||||
@@ -424,7 +425,8 @@ c13 9 26 20 30 26 7 11 -9 26 -27 26 -5 0 -3 -5 5 -10 9 -6 10 -10 3 -10 -24
|
||||
-3 -12 5 -8 2 -9 -12 -3 -33 13 -88 15 -108 2z"/>
|
||||
</g>
|
||||
</svg>
|
||||
<a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
-->
|
||||
<img src="/assets/favicon-32x32.png" style="margin-right: 5px;"><a title="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
|
||||
" href="/">STSD</a></div><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></div><nav class="navigation">
|
||||
<ul><li class="navigation__item"><a href="/archive.html">Archive</a></li><li class="navigation__item"><a href="https://pengzhan.dev">About</a></li><li><button class="button button--secondary button--circle search-button js-search-toggle"><i class="fas fa-search"></i></button></li></ul>
|
||||
</nav></div>
|
||||
|
||||
@@ -2,39 +2,43 @@
|
||||
<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/welcome-to-my-blog</loc>
|
||||
<lastmod>2024-04-03T18:23:31-04:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool</loc>
|
||||
<lastmod>2021-12-11T13:35:39-05:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work</loc>
|
||||
<lastmod>2021-12-11T13:35:39-05:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/intro-xv6</loc>
|
||||
<lastmod>2021-12-11T13:35:39-05:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci</loc>
|
||||
<lastmod>2021-12-11T13:35:39-05:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices</loc>
|
||||
<lastmod>2021-12-11T13:35:39-05:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices-part2</loc>
|
||||
<lastmod>2021-12-11T13:35:39-05:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/cs350-labs</loc>
|
||||
<lastmod>2022-05-04T19:45:56-04:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/Debug-kubelet</loc>
|
||||
<lastmod>2024-04-10T23:51:19-04:00</lastmod>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/posts/inotify-watcher-leaks-in-kubelet</loc>
|
||||
<lastmod>2024-04-24T00:32:03-04:00</lastmod>
|
||||
</url>
|
||||
<url>
|
||||
<loc>https://blog.pengzhan.dev/archive</loc>
|
||||
|
||||
|
After Width: | Height: | Size: 359 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 299 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 131 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 188 KiB |
|
After Width: | Height: | Size: 31 KiB |
|
After Width: | Height: | Size: 162 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 59 KiB |
|
After Width: | Height: | Size: 6.5 KiB |
|
After Width: | Height: | Size: 268 KiB |
|
After Width: | Height: | Size: 42 KiB |
|
After Width: | Height: | Size: 171 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 139 KiB |
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 497 KiB |
|
After Width: | Height: | Size: 63 KiB |