12 Commits

Author SHA1 Message Date
dependabot[bot] 132878604d Bump rexml from 3.2.5 to 3.3.3
Bumps [rexml](https://github.com/ruby/rexml) from 3.2.5 to 3.3.3.
- [Release notes](https://github.com/ruby/rexml/releases)
- [Changelog](https://github.com/ruby/rexml/blob/master/NEWS.md)
- [Commits](https://github.com/ruby/rexml/compare/v3.2.5...v3.3.3)

---
updated-dependencies:
- dependency-name: rexml
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-01 23:48:20 +00:00
haopengzhan 14ee811801 Updated inotify leak in kubelet post 2024-04-24 05:01:29 +00:00
haopengzhan a8861b1506 Remove read more links and replace photos with webp format for better
seo
2024-04-24 04:32:03 +00:00
haopengzhan 6b62306a29 Updated all covers and small css change 2024-04-19 04:41:23 +00:00
haopengzhan 2f9718bfbe Fixed the local test path 2024-04-19 01:19:57 +00:00
haopengzhan 3bd704c592 Added new post about inotify leaking in kubelet 2024-04-19 01:14:15 +00:00
haopengzhan c59459f1f0 Fix margin of the logo 2024-04-13 21:17:21 +00:00
haopengzhan e45211aa7a Updated logo on header 2024-04-13 21:06:39 +00:00
haopengzhan 6df208b82c Merge pull request #22 from CoderSherlock/dependabot/bundler/nokogiri-1.16.4 2024-04-13 01:20:50 -07:00
haopengzhan 9f54571b22 Update favicon and fix gem issues 2024-04-13 07:52:14 +00:00
haopengzhan 65d3d957ff Change favicon 2024-04-13 07:17:13 +00:00
dependabot[bot] dfd260de71 Bump nokogiri from 1.15.3 to 1.16.4
Bumps [nokogiri](https://github.com/sparklemotion/nokogiri) from 1.15.3 to 1.16.4.
- [Release notes](https://github.com/sparklemotion/nokogiri/releases)
- [Changelog](https://github.com/sparklemotion/nokogiri/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sparklemotion/nokogiri/compare/v1.15.3...v1.16.4)

---
updated-dependencies:
- dependency-name: nokogiri
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-11 20:57:51 +00:00
71 changed files with 684 additions and 255 deletions
@@ -1 +1 @@
I"{"source"=>"/home/coder/share/CoderSherlock.github.io", "destination"=>"/home/coder/share/CoderSherlock.github.io/_site", "collections_dir"=>"", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/posts/:title"}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>["CHANGELOG.md", "HOW_TO_RELEASE.md", "Gemfile", "Gemfile.lock", "LICENSE", "README-*.md", "README.md", "gulpfile.js", "jekyll-text-theme.gemspec", "package-lock.json", "package.json", "/docs", "/node_modules", "/screenshots", "/test", "/vendor", "configure.sh", ".sass-cache", ".jekyll-cache", "gemfiles", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed", "jekyll-paginate", "jekyll-sitemap", "jemoji", "jekyll-last-modified-at", "jekyll-seo-tag"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"<!--more-->", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>"", "show_dir_listing"=>false, "permalink"=>"/posts/:title", "paginate_path"=>"/page:num", "timezone"=>"America/New_York", "quiet"=>false, "verbose"=>false, "defaults"=>[{"scope"=>{"path"=>"", "type"=>"posts"}, "values"=>{"layout"=>"article", "sharing"=>true, "license"=>true, "aside"=>{"toc"=>true}, "show_edit_on_github"=>false, "show_subscribe"=>true, "pageview"=>true}}], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>[1, 2, 3, 4, 5, 6], "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false}, "text_skin"=>"default", "highlight_theme"=>"default", "url"=>"https://blog.pengzhan.dev", "fakebaseurl"=>"", "title"=>"STSD: A Pretended Tech Blog", "description"=>"My personal blog, some contents are useful, the others are not. Just like my mediocre life.\n", "lang"=>"en", "author"=>{"type"=>nil, "name"=>"Pengzhan Hao", "url"=>nil, "avatar"=>"/static/avatar.jpg", "bio"=>nil, "email"=>"haopengzhan@gmail.com", "facebook"=>nil, "twitter"=>nil, "weibo"=>nil, "googleplus"=>nil, "telegram"=>nil, "medium"=>nil, "zhihu"=>nil, "douban"=>nil, "linkedin"=>"pengzhanhao", "github"=>"codersherlock", "npm"=>nil}, "repository"=>"CoderSherlock/CoderSherlock.github.io", "repository_tree"=>"master", "paths"=>{"root"=>nil, "home"=>nil, "archive"=>nil, "rss"=>nil}, "license"=>nil, "toc"=>{"selectors"=>nil}, "mathjax"=>nil, "mathjax_autoNumber"=>nil, "mermaid"=>nil, "chart"=>nil, "paginate"=>8, "sources"=>nil, "sharing"=>{"provider"=>false, "addthis"=>{"id"=>nil}}, "comments"=>{"provider"=>"disqus", "disqus"=>{"shortname"=>"codersherlockblog"}, "gitalk"=>{"clientID"=>nil, "clientSecret"=>nil, "repository"=>nil, "owner"=>nil, "admin"=>nil}, "valine"=>{"app_id"=>nil, "app_key"=>nil, "placeholder"=>nil, "visitor"=>nil, "meta"=>nil}}, "pageview"=>{"provider"=>false, "leancloud"=>{"app_id"=>nil, "app_key"=>nil, "app_class"=>nil}}, "search"=>{"provider"=>"default", "google"=>{"custom_search_engine_id"=>nil}}, "analytics"=>{"provider"=>"google", "google"=>{"tracking_id"=>"UA-82637164-1", "anonymize_ip"=>false}}, "jekyll_compose"=>{"default_front_matter"=>{"posts"=>{"description"=>nil, "cover"=>nil, "category"=>nil, "tags"=>nil, "published"=>false, "sitemap"=>true, "permalink"=>nil}}}, "serving"=>false}:ET
I"v{"source"=>"/home/coder/share/CoderSherlock.github.io", "destination"=>"/home/coder/share/CoderSherlock.github.io/_site", "collections_dir"=>"", "cache_dir"=>".jekyll-cache", "plugins_dir"=>"_plugins", "layouts_dir"=>"_layouts", "data_dir"=>"_data", "includes_dir"=>"_includes", "collections"=>{"posts"=>{"output"=>true, "permalink"=>"/posts/:title"}}, "safe"=>false, "include"=>[".htaccess"], "exclude"=>["CHANGELOG.md", "HOW_TO_RELEASE.md", "Gemfile", "Gemfile.lock", "LICENSE", "README-*.md", "README.md", "gulpfile.js", "jekyll-text-theme.gemspec", "package-lock.json", "package.json", "/docs", "/node_modules", "/screenshots", "/test", "/vendor", "configure.sh", ".sass-cache", ".jekyll-cache", "gemfiles", "node_modules", "vendor/bundle/", "vendor/cache/", "vendor/gems/", "vendor/ruby/"], "keep_files"=>[".git", ".svn"], "encoding"=>"utf-8", "markdown_ext"=>"markdown,mkdown,mkdn,mkd,md", "strict_front_matter"=>false, "show_drafts"=>nil, "limit_posts"=>0, "future"=>false, "unpublished"=>false, "whitelist"=>[], "plugins"=>["jekyll-feed", "jekyll-paginate", "jekyll-sitemap", "jemoji", "jekyll-last-modified-at", "jekyll-seo-tag"], "markdown"=>"kramdown", "highlighter"=>"rouge", "lsi"=>false, "excerpt_separator"=>"<!--more-->", "incremental"=>false, "detach"=>false, "port"=>"4000", "host"=>"127.0.0.1", "baseurl"=>"", "show_dir_listing"=>false, "permalink"=>"/posts/:title", "paginate_path"=>"/page:num", "timezone"=>"America/New_York", "quiet"=>false, "verbose"=>false, "defaults"=>[{"scope"=>{"path"=>"", "type"=>"posts"}, "values"=>{"layout"=>"article", "sharing"=>true, "license"=>true, "aside"=>{"toc"=>true}, "show_edit_on_github"=>false, "show_subscribe"=>true, "pageview"=>true}}], "liquid"=>{"error_mode"=>"warn", "strict_filters"=>false, "strict_variables"=>false}, "kramdown"=>{"auto_ids"=>true, "toc_levels"=>[1, 2, 3, 4, 5, 6], "entity_output"=>"as_char", "smart_quotes"=>"lsquo,rsquo,ldquo,rdquo", "input"=>"GFM", "hard_wrap"=>false, "guess_lang"=>true, "footnote_nr"=>1, "show_warnings"=>false}, "text_skin"=>"default", "highlight_theme"=>"default", "url"=>"https://blog.pengzhan.dev", "fakebaseurl"=>"", "title"=>"STSD", "description"=>"My personal blog, some contents are useful, the others are not. Just like my mediocre life.\n", "lang"=>"en", "author"=>{"type"=>nil, "name"=>"Pengzhan Hao", "url"=>nil, "avatar"=>"/static/avatar.jpg", "bio"=>nil, "email"=>"haopengzhan@gmail.com", "facebook"=>nil, "twitter"=>nil, "weibo"=>nil, "googleplus"=>nil, "telegram"=>nil, "medium"=>nil, "zhihu"=>nil, "douban"=>nil, "linkedin"=>"pengzhanhao", "github"=>"codersherlock", "npm"=>nil}, "repository"=>"CoderSherlock/CoderSherlock.github.io", "repository_tree"=>"master", "paths"=>{"root"=>nil, "home"=>nil, "archive"=>nil, "rss"=>nil}, "license"=>nil, "toc"=>{"selectors"=>nil}, "mathjax"=>nil, "mathjax_autoNumber"=>nil, "mermaid"=>nil, "chart"=>nil, "paginate"=>8, "sources"=>nil, "sharing"=>{"provider"=>false, "addthis"=>{"id"=>nil}}, "comments"=>{"provider"=>"disqus", "disqus"=>{"shortname"=>"codersherlockblog"}, "gitalk"=>{"clientID"=>nil, "clientSecret"=>nil, "repository"=>nil, "owner"=>nil, "admin"=>nil}, "valine"=>{"app_id"=>nil, "app_key"=>nil, "placeholder"=>nil, "visitor"=>nil, "meta"=>nil}}, "pageview"=>{"provider"=>false, "leancloud"=>{"app_id"=>nil, "app_key"=>nil, "app_class"=>nil}}, "search"=>{"provider"=>"default", "google"=>{"custom_search_engine_id"=>nil}}, "analytics"=>{"provider"=>"google", "google"=>{"tracking_id"=>"UA-82637164-1", "anonymize_ip"=>false}}, "jekyll_compose"=>{"default_front_matter"=>{"posts"=>{"description"=>nil, "cover"=>nil, "category"=>nil, "tags"=>nil, "published"=>false, "sitemap"=>true, "permalink"=>nil}}}, "serving"=>false}:ET
+6 -4
View File
@@ -77,25 +77,27 @@ GEM
rb-fsevent (~> 0.10, >= 0.10.3)
rb-inotify (~> 0.9, >= 0.9.10)
mercenary (0.4.0)
mini_portile2 (2.8.2)
mini_portile2 (2.8.5)
minitest (5.16.3)
nokogiri (1.15.3)
nokogiri (1.16.4)
mini_portile2 (~> 2.8.2)
racc (~> 1.4)
pathutil (0.16.2)
forwardable-extended (~> 2.6)
posix-spawn (0.3.15)
public_suffix (5.0.0)
racc (1.7.1)
racc (1.7.3)
rake (12.3.3)
rb-fsevent (0.11.2)
rb-inotify (0.10.1)
ffi (~> 1.0)
rexml (3.2.5)
rexml (3.3.3)
strscan
rouge (3.30.0)
safe_yaml (1.0.5)
sassc (2.4.0)
ffi (~> 1.9)
strscan (3.1.0)
terminal-table (2.0.0)
unicode-display_width (~> 1.1, >= 1.1.1)
tzinfo (2.0.6)
+1 -1
View File
@@ -21,7 +21,7 @@ highlight_theme: default # "default" (default), "tomorrow", "tomorrow-night", "t
url : "https://blog.pengzhan.dev" # "https://dev.pengzhan.dev"
baseurl : ""
fakebaseurl: "" # "/proxy/4000"
title : "STSD: A Pretended Tech Blog"
title : "STSD"
description: > # this means to ignore newlines until "Language & timezone"
My personal blog, some contents are useful, the others are not. Just like my mediocre life.
+2 -1
View File
@@ -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 -%}
+1 -1
View File
@@ -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.
+1 -1
View File
@@ -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
---
+1 -1
View File
@@ -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.
+2 -2
View File
@@ -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)
+5 -5
View File
@@ -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
View File
@@ -1,5 +1,6 @@
.image {
max-width: 100%;
border-radius: 13px;
@extend .image--md;
}
.image--md {
+10 -8
View File
@@ -1,11 +1,11 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Page Not Found - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Page Not Found - STSD</title>
<meta name="description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
">
<link rel="canonical" href="https://blog.pengzhan.dev/404.html"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/404.html"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -20,7 +20,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Page Not Found | STSD: A Pretended Tech Blog</title>
<title>Page Not Found | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="Page Not Found" />
<meta name="author" content="Pengzhan Hao" />
@@ -29,7 +29,7 @@
<meta property="og:description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life." />
<link rel="canonical" href="https://blog.pengzhan.dev/404.html" />
<meta property="og:url" content="https://blog.pengzhan.dev/404.html" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Page Not Found" />
@@ -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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -472,7 +474,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
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
+26 -19
View File
@@ -1,11 +1,11 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Archive - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Archive - STSD</title>
<meta name="description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
">
<link rel="canonical" href="https://blog.pengzhan.dev/archive"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/archive"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -20,21 +20,21 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>STSD: A Pretended Tech Blog | My personal blog, some contents are useful, the others are not. Just like my mediocre life.</title>
<title>STSD | My personal blog, some contents are useful, the others are not. Just like my mediocre life.</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="STSD: A Pretended Tech Blog" />
<meta property="og:title" content="STSD" />
<meta name="author" content="Pengzhan Hao" />
<meta property="og:locale" content="en" />
<meta name="description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life." />
<meta property="og:description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life." />
<link rel="canonical" href="https://blog.pengzhan.dev/archive" />
<meta property="og:url" content="https://blog.pengzhan.dev/archive" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="STSD: A Pretended Tech Blog" />
<meta property="twitter:title" content="STSD" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-10-25T14:53:15-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD: A Pretended Tech Blog","url":"https://blog.pengzhan.dev/archive"}</script>
{"@context":"https://schema.org","@type":"WebPage","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-10-25T14:53:15-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD","url":"https://blog.pengzhan.dev/archive"}</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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -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>
@@ -684,7 +691,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
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 61 KiB

+1 -1
View File
@@ -2,7 +2,7 @@
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/assets/mstile-150x150.png"/>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>
+6 -6
View File
@@ -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; }
File diff suppressed because one or more lines are too long
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 38 KiB

-15
View File
@@ -1,15 +0,0 @@
<?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"
width="231.000000pt" height="231.000000pt" viewBox="0 0 231.000000 231.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,231.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 1160 l0 -1090 1155 0 1155 0 0 1090 0 1090 -1155 0 -1155 0 0
-1090z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 603 B

+1 -1
View File
@@ -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"}]};
+6 -1
View File
@@ -3,9 +3,14 @@
"short_name": "",
"icons": [
{
"src": "/assets/android-chrome-192x192.png",
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
+224 -23
View File
File diff suppressed because one or more lines are too long
+52 -37
View File
@@ -1,11 +1,11 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Home - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Home - STSD</title>
<meta name="description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life.
">
<link rel="canonical" href="https://blog.pengzhan.dev/"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -20,22 +20,22 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>STSD: A Pretended Tech Blog | My personal blog, some contents are useful, the others are not. Just like my mediocre life.</title>
<title>STSD | My personal blog, some contents are useful, the others are not. Just like my mediocre life.</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="STSD: A Pretended Tech Blog" />
<meta property="og:title" content="STSD" />
<meta name="author" content="Pengzhan Hao" />
<meta property="og:locale" content="en" />
<meta name="description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life." />
<meta property="og:description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life." />
<link rel="canonical" href="https://blog.pengzhan.dev/" />
<meta property="og:url" content="https://blog.pengzhan.dev/" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="website" />
<link rel="next" href="https://blog.pengzhan.dev/page2" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="STSD: A Pretended Tech Blog" />
<meta property="twitter:title" content="STSD" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-10-25T14:53:15-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD: A Pretended Tech Blog","name":"STSD: A Pretended Tech Blog","url":"https://blog.pengzhan.dev/"}</script>
{"@context":"https://schema.org","@type":"WebSite","author":{"@type":"Person","name":"Pengzhan Hao"},"dateModified":"2021-10-25T14:53:15-04:00","description":"My personal blog, some contents are useful, the others are not. Just like my mediocre life.","headline":"STSD","name":"STSD","url":"https://blog.pengzhan.dev/"}</script>
<!-- End Jekyll SEO tag -->
<!-- end custom head snippets -->
@@ -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,8 +426,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -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 programs 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 programs 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 programs 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">Lets generate a word cloud like this.
Dont 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 doesnt 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>
@@ -611,7 +626,7 @@ In the second half of this post, I will discuss a little bit more on how to debu
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
+11 -9
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Using charles proxy to monitor mobile SSL traffics - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Using charles proxy to monitor mobile SSL traffics - STSD</title>
<meta name="description" content="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 t...">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -19,7 +19,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Using charles proxy to monitor mobile SSL traffics | STSD: A Pretended Tech Blog</title>
<title>Using charles proxy to monitor mobile SSL traffics | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="Using charles proxy to monitor mobile SSL traffics" />
<meta name="author" content="Pengzhan Hao" />
@@ -28,13 +28,13 @@
<meta property="og:description" content="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 doesnt provide us a method to modify their own certs. For these situation, I still didnt find a good solutions for it. But Ill 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). Its a non-free software which still update new versions now. So mainly, Ill talk about how to charles SSL proxy." />
<link rel="canonical" href="https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool" />
<meta property="og:url" content="https://blog.pengzhan.dev/posts/charles-is-not-a-good-tool" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2016-10-27T22:50:33-04:00" />
<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 doesnt provide us a method to modify their own certs. For these situation, I still didnt find a good solutions for it. But Ill 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). Its a non-free software which still update new versions now. So mainly, Ill 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 doesnt provide us a method to modify their own certs. For these situation, I still didnt find a good solutions for it. But Ill 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). Its a non-free software which still update new versions now. So mainly, Ill 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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -547,7 +549,7 @@ You also need to save charles Root Certificate, it also contains in the same men
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
File diff suppressed because one or more lines are too long
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>EDDL: How do we train neural networks on limited edge devices - PART 1 - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>EDDL: How do we train neural networks on limited edge devices - PART 1 - STSD</title>
<meta name="description" content="This post introduces our previous milestone in project “Edge trainer”, as the paper “EDDL: A Distributed Deep Learning System for Resource-limited Edge Compu...">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -19,7 +19,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>EDDL: How do we train neural networks on limited edge devices - PART 1 | STSD: A Pretended Tech Blog</title>
<title>EDDL: How do we train neural networks on limited edge devices - PART 1 | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="EDDL: How do we train neural networks on limited edge devices - PART 1" />
<meta name="author" content="Pengzhan Hao" />
@@ -28,13 +28,13 @@
<meta property="og:description" content="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." />
<link rel="canonical" href="https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices" />
<meta property="og:url" content="https://blog.pengzhan.dev/posts/eddl-how-do-we-train-on-limited-edge-devices" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2021-10-13T16:53:20-04:00" />
<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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -595,7 +597,7 @@ Smartly schedule work balance and handle join/exit issues also need under consid
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries - STSD</title>
<meta name="description" content="Lets generate a word cloud like this. Dont understand the language is not a big deal.If your written language is based on latin alphabet(or other language ...">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -19,7 +19,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries | STSD: A Pretended Tech Blog</title>
<title>Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="Generate Word Cloud Figures with Chinese-Tokenization and WordCloud python libraries" />
<meta name="author" content="Pengzhan Hao" />
@@ -28,13 +28,13 @@
<meta property="og:description" content="Lets generate a word cloud like this. Dont 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." />
<link rel="canonical" href="https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci" />
<meta property="og:url" content="https://blog.pengzhan.dev/posts/generate-word-cloud-with-chinese-fenci" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2020-09-15T22:00:14-04:00" />
<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":"Lets generate a word cloud like this. Dont 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":"Lets generate a word cloud like this. Dont 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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -675,7 +677,7 @@ If your written language is based on latin alphabet(or other language has space
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
+11 -9
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Xv6 introduction - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Xv6 introduction - STSD</title>
<meta name="description" content="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...">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/intro-xv6"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/intro-xv6"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -19,7 +19,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Xv6 introduction | STSD: A Pretended Tech Blog</title>
<title>Xv6 introduction | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="Xv6 introduction" />
<meta name="author" content="Pengzhan Hao" />
@@ -28,13 +28,13 @@
<meta property="og:description" content="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." />
<link rel="canonical" href="https://blog.pengzhan.dev/posts/intro-xv6" />
<meta property="og:url" content="https://blog.pengzhan.dev/posts/intro-xv6" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2017-07-28T14:56:55-04:00" />
<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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -596,7 +598,7 @@ Using ssh may connect to different physical devices under same domain name, this
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
+24 -22
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Some of my previews experiment works: 2016 - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>Some of my previews experiment works: 2016 - STSD</title>
<meta name="description" content="This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics.">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -19,7 +19,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Some of my previews experiment works: 2016 | STSD: A Pretended Tech Blog</title>
<title>Some of my previews experiment works: 2016 | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="Some of my previews experiment works: 2016" />
<meta name="author" content="Pengzhan Hao" />
@@ -28,13 +28,13 @@
<meta property="og:description" content="This blog contains only some basic record of my works. For some details, I will write a unique blog just for some specific topics." />
<link rel="canonical" href="https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work" />
<meta property="og:url" content="https://blog.pengzhan.dev/posts/some-of-my-previews-exper-work" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2016-10-28T12:27:33-04:00" />
<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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -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">&gt;</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 wont address much this time. But Ill 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 wont 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>
@@ -631,7 +633,7 @@ su
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
+11 -9
View File
@@ -1,10 +1,10 @@
<!DOCTYPE html><html lang="en">
<head><meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>STSD: Stop Talking Start Doing - STSD: A Pretended Tech Blog</title>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"><title>STSD: Stop Talking Start Doing - STSD</title>
<meta name="description" content="">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/welcome-to-my-blog"><link rel="alternate" type="application/rss+xml" title="STSD: A Pretended Tech Blog" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="canonical" href="https://blog.pengzhan.dev/posts/welcome-to-my-blog"><link rel="alternate" type="application/rss+xml" title="STSD" href="/feed.xml"><link rel="apple-touch-icon" sizes="180x180" href="/assets/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="32x32" href="/assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/assets/favicon-16x16.png">
<link rel="manifest" href="/assets/site.webmanifest">
@@ -19,7 +19,7 @@
@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&family=Roboto+Slab:wght@100..900&family=ZCOOL+XiaoWei&display=swap')
</style><!-- start custom head snippets -->
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>STSD: Stop Talking Start Doing | STSD: A Pretended Tech Blog</title>
<title>STSD: Stop Talking Start Doing | STSD</title>
<meta name="generator" content="Jekyll v4.2.2" />
<meta property="og:title" content="STSD: Stop Talking Start Doing" />
<meta name="author" content="Pengzhan Hao" />
@@ -28,13 +28,13 @@
<meta property="og:description" content="My personal blog, some contents are useful, the others are not. Just like my mediocre life." />
<link rel="canonical" href="https://blog.pengzhan.dev/posts/welcome-to-my-blog" />
<meta property="og:url" content="https://blog.pengzhan.dev/posts/welcome-to-my-blog" />
<meta property="og:site_name" content="STSD: A Pretended Tech Blog" />
<meta property="og:site_name" content="STSD" />
<meta property="og:type" content="article" />
<meta property="article:published_time" content="2016-10-26T22:50:33-04:00" />
<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,8 +425,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
-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.
" href="/">STSD: A Pretended Tech Blog</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">
-->
<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>
</header>
@@ -515,7 +517,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
</div>
</div>
</div><div class="site-info mt-2">
<div>© STSD: A Pretended Tech Blog 2021,
<div>© STSD 2021,
Powered by <a title="Jekyll is a simple, blog-aware, static site generator." href="http://jekyllrb.com/">Jekyll</a> & <a
title="TeXt is a super customizable Jekyll theme." href="https://github.com/kitian616/jekyll-TeXt-theme">TeXt Theme</a>.
</div>
+13 -9
View File
@@ -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>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 68 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 423 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 61 KiB

+1 -1
View File
@@ -2,7 +2,7 @@
<browserconfig>
<msapplication>
<tile>
<square150x150logo src="/assets/mstile-150x150.png"/>
<square150x150logo src="/mstile-150x150.png"/>
<TileColor>#da532c</TileColor>
</tile>
</msapplication>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 38 KiB

-15
View File
@@ -1,15 +0,0 @@
<?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"
width="231.000000pt" height="231.000000pt" viewBox="0 0 231.000000 231.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,231.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M0 1160 l0 -1090 1155 0 1155 0 0 1090 0 1090 -1155 0 -1155 0 0
-1090z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 603 B

+6 -1
View File
@@ -3,9 +3,14 @@
"short_name": "",
"icons": [
{
"src": "/assets/android-chrome-192x192.png",
"src": "/android-chrome-192x192.png",
"sizes": "192x192",
"type": "image/png"
},
{
"src": "/android-chrome-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#ffffff",
Binary file not shown.

After

Width:  |  Height:  |  Size: 359 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 131 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 188 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 162 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 268 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 171 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 139 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 497 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB