While these schedulers try to improve total throughput, they might leave some unlucky requests waiting for a very long time. As an example, imagine the majority of processes make requests at the beginning of the storage space while an unlucky process makes a request at the other end of storage. This potentially infinite postponement of the process is called starvation. To improve fairness, the deadline algorithm was developed. It has a queue ordered by address, similar to the elevator, but if some request sits in this queue for too long then it moves to an "expired" queue ordered by expire time. The scheduler checks the expire queue first and processes requests from there and only then moves to the elevator queue. Note that this fairness has a negative impact on overall throughput.
By default the kernel scheduler will load balance all threads across allavailable cores. To stop system threads from interfering with your applicationthreads from you can use the kernel command line option isolcpus. It disablesscheduler load balancing for the isolated cores and causes threads to berestricted to the non-isolated cores by default. Note that your criticalapplication threads needs to be specifically pinned to the isolated cores inorder to run there.
How to check your governor and I O scheduler from the command line
Download File: https://ssurll.com/2vAfYU
The scheduler runs regularly on each core in order to switch between runnablethreads. This will introduce jitter for latency critical applications. If youhave isolated your application cores and are running a single application threadper isolated core you can use the nohz_full kernel command line optionin order to suppress the timer interrupts.
Reduce jitter from interrupt processing by changing the CPU affinity of theinterrupts. This can easily be done by runningirqbalance. By defaultirqbalance will automatically isolate the cores specified by the kernelcommand line parameter isolcpus. You can also specify cores to isolate usingthe IRQBALANCE_BANNED_CPUS environment variable.
This is application dependent, but consider disabling mitigations for CPUvulnerabilities. The mitigations can have considerable performanceimpact on system performance. Addmitigations=off to your kernel command line to disable allmitigations.
You need to have a Kubernetes cluster, and the kubectl command-line tool mustbe configured to communicate with your cluster. It is recommended to run this tutorial on a cluster with at least two nodes that are not acting as control plane hosts. If you do not already have acluster, you can create one by usingminikubeor you can use one of these Kubernetes playgrounds:
[ 0.000000] Booting Linux on physical CPU 0x0[ 0.000000] Linux version 4.19.79-g77dfab56c6 (xxx@xxx-MS-7A69) (gcc version 8.3.0 (GNU Toolchain for the A-profile Architecture 8.3-2019.03 (arm-rel-8.36))) #1 SMP PREEMPT Tue Jan 21 13:57:55 MSK 2020[ 0.000000] CPU: ARMv7 Processor [412fc0f2] revision 2 (ARMv7), cr=30c5387d[ 0.000000] CPU: div instructions available: patching division code[ 0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache[ 0.000000] OF: fdt: Machine model: Board AM5708[ 0.000000] Memory policy: Data cache writealloc[ 0.000000] efi: Getting EFI parameters from FDT:[ 0.000000] efi: UEFI not found.[ 0.000000] Reserved memory: created CMA memory pool at 0x0000000095800000, size 56 MiB[ 0.000000] OF: reserved mem: initialized node ipu2-memory@95800000, compatible id shared-dma-pool[ 0.000000] Reserved memory: created CMA memory pool at 0x0000000099000000, size 64 MiB[ 0.000000] OF: reserved mem: initialized node dsp1-memory@99000000, compatible id shared-dma-pool[ 0.000000] Reserved memory: created CMA memory pool at 0x000000009d000000, size 32 MiB[ 0.000000] OF: reserved mem: initialized node ipu1-memory@9d000000, compatible id shared-dma-pool[ 0.000000] cma: Reserved 24 MiB at 0x00000000be400000[ 0.000000] OMAP4: Map 0x00000000bfd00000 to (ptrval) for dram barrier[ 0.000000] DRA722 ES2.1[ 0.000000] random: get_random_bytes called from start_kernel+0xb4/0x470 with crng_init=0[ 0.000000] percpu: Embedded 15 pages/cpu s30860 r8192 d22388 u61440[ 0.000000] Built 1 zonelists, mobility grouping on. Total pages: 259648[ 0.000000] Kernel command line: console=ttyS2,115200n8 root=PARTUUID=76a81069-02 rw rootfstype=ext4 rootwait[ 0.000000] Dentry cache hash table entries: 131072 (order: 7, 524288 bytes)[ 0.000000] Inode-cache hash table entries: 65536 (order: 6, 262144 bytes)[ 0.000000] Memory: 841772K/1045504K available (6144K kernel code, 248K rwdata, 2116K rodata, 2048K init, 238K bss, 23508K reserved, 180224K cma-reserved, 234496K highmem)[ 0.000000] Virtual kernel memory layout:[ 0.000000] vector : 0xffff0000 - 0xffff1000 ( 4 kB)[ 0.000000] fixmap : 0xffc00000 - 0xfff00000 (3072 kB)[ 0.000000] vmalloc : 0xf0800000 - 0xff800000 ( 240 MB)[ 0.000000] lowmem : 0xc0000000 - 0xf0000000 ( 768 MB)[ 0.000000] pkmap : 0xbfe00000 - 0xc0000000 ( 2 MB)[ 0.000000] modules : 0xbf000000 - 0xbfe00000 ( 14 MB)[ 0.000000] .text : 0x(ptrval) - 0x(ptrval) (8160 kB)[ 0.000000] .init : 0x(ptrval) - 0x(ptrval) (2048 kB)[ 0.000000] .data : 0x(ptrval) - 0x(ptrval) ( 249 kB)[ 0.000000] .bss : 0x(ptrval) - 0x(ptrval) ( 239 kB)[ 0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=1, Nodes=1[ 0.000000] rcu: Preemptible hierarchical RCU implementation.[ 0.000000] rcu: RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.[ 0.000000] Tasks RCU enabled.[ 0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1[ 0.000000] NR_IRQS: 16, nr_irqs: 16, preallocated irqs: 16[ 0.000000] GIC: Using split EOI/Deactivate mode[ 0.000000] OMAP clockevent source: timer1 at 32786 Hz[ 0.000000] arch_timer: cp15 timer(s) running at 6.14MHz (phys).[ 0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff max_cycles: 0x16af5adb9, max_idle_ns: 440795202250 ns[ 0.000005] sched_clock: 56 bits at 6MHz, resolution 162ns, wraps every 4398046511023ns[ 0.000019] Switching to timer-based delay loop, resolution 162ns[ 0.000293] clocksource: 32k_counter: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 58327039986419 ns[ 0.000303] OMAP clocksource: 32k_counter at 32768 Hz[ 0.000690] Console: colour dummy device 80x30[ 0.000736] Calibrating delay loop (skipped), value calculated using timer frequency.. 12.29 BogoMIPS (lpj=61475)[ 0.000753] pid_max: default: 32768 minimum: 301[ 0.000881] Mount-cache hash table entries: 2048 (order: 1, 8192 bytes)[ 0.000896] Mountpoint-cache hash table entries: 2048 (order: 1, 8192 bytes)[ 0.001457] CPU: Testing write buffer coherency: ok[ 0.001496] CPU0: Spectre v2: using ICIALLU workaround[ 0.001714] /cpus/cpu@0 missing clock-frequency property[ 0.001728] CPU0: thread -1, cpu 0, socket 0, mpidr 80000000[ 0.059932] Setting up static identity map for 0x80200000 - 0x80200060[ 0.079939] rcu: Hierarchical SRCU implementation.[ 0.100124] EFI services will not be available.[ 0.119999] smp: Bringing up secondary CPUs ...[ 0.120010] smp: Brought up 1 node, 1 CPU[ 0.120020] SMP: Total of 1 processors activated (12.29 BogoMIPS).[ 0.120028] CPU: All CPU(s) started in HYP mode.[ 0.120036] CPU: Virtualization extensions available.[ 0.120494] devtmpfs: initialized[ 0.135357] VFP support v0.3: implementor 41 architecture 4 part 30 variant f rev 0[ 0.135674] clocksource: jiffies: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 19112604462750000 ns[ 0.135693] futex hash table entries: 256 (order: 2, 16384 bytes)[ 0.138754] pinctrl core: initialized pinctrl subsystem[ 0.139303] DMI not present or invalid.[ 0.140282] DMA: preallocated 256 KiB pool for atomic coherent allocations[ 0.141176] omap_hwmod: l3_main_2 using broken dt data from ocp[ 0.330321] cpuidle: using governor ladder[ 0.330359] cpuidle: using governor menu[ 0.340949] OMAP GPIO hardware version 0.1[ 0.364194] No ATAGs?[ 0.364240] hw-breakpoint: found 5 (+1 reserved) breakpoint and 4 watchpoint registers.[ 0.364256] hw-breakpoint: maximum watchpoint size is 8 bytes.[ 0.365117] OMAP DMA hardware revision 0.0[ 0.402507] edma 43300000.edma: memcpy is disabled[ 0.405902] edma 43300000.edma: TI EDMA DMA engine driver[ 0.413185] omap-dma-engine 4a056000.dma-controller: OMAP DMA engine driver (LinkedList1/2/3 supported)[ 0.414009] evm_5v0: supplied by evm_12v0[ 0.414293] vsys_3v3: supplied by evm_12v0[ 0.417241] omap-iommu 40d01000.mmu: 40d01000.mmu registered[ 0.417428] omap-iommu 40d02000.mmu: 40d02000.mmu registered[ 0.417674] omap-iommu 58882000.mmu: 58882000.mmu registered[ 0.417919] omap-iommu 55082000.mmu: 55082000.mmu registered[ 0.418258] iommu: Adding device 58820000.ipu to group 1[ 0.418345] iommu: Adding device 55020000.ipu to group 2[ 0.418473] iommu: Adding device 40800000.dsp to group 0[ 0.419662] SCSI subsystem initialized[ 0.420981] palmas 0-0058: IRQ missing: skipping irq request[ 0.450855] palmas 0-0058: Muxing GPIO 51, PWM 0, LED 2[ 0.452173] SMPS1: supplied by vsys_3v3[ 0.453744] SMPS2: supplied by vsys_3v3[ 0.455140] SMPS3: supplied by vsys_3v3[ 0.456675] SMPS4: supplied by vsys_3v3[ 0.457794] SMPS5: supplied by regulator-dummy[ 0.458752] SMPS12: supplied by vsys_3v3[ 0.459658] LDO1: supplied by vsys_3v3[ 0.461679] LDO2: supplied by vsys_3v3[ 0.471145] LDO3: supplied by regulator-dummy[ 0.471797] LDO4: supplied by evm_5v0[ 0.481133] LDO5: supplied by vsys_3v3[ 0.491581] omap_i2c 48070000.i2c: bus 0 rev0.12 at 400 kHz[ 0.491780] media: Linux media interface: v0.10[ 0.491820] videodev: Linux video capture interface: v2.00[ 0.491897] pps_core: LinuxPPS API ver. 1 registered[ 0.491906] pps_core: Software ver. 5.3.6 - Copyright 2005-2007 Rodolfo Giometti [ 0.491940] EDAC MC: Ver: 3.0.0[ 0.501263] omap-mailbox 48840000.mailbox: omap mailbox rev 0x400[ 0.501449] omap-mailbox 48842000.mailbox: omap mailbox rev 0x400[ 0.510989] clocksource: Switched to clocksource arch_sys_counter[ 0.520046] hw perfevents: enabled with armv7_cortex_a15 PMU driver, 7 counters available[ 0.521190] Initialise system trusted keyrings[ 0.521344] workingset: timestamp_bits=14 max_order=18 bucket_order=4[ 0.525589] squashfs: version 4.0 (2009/01/31) Phillip Lougher[ 0.525715] ntfs: driver 2.1.32 [Flags: R/O].[ 0.527641] Key type asymmetric registered[ 0.527654] Asymmetric key parser 'x509' registered[ 0.527704] bounce: pool size: 64 pages[ 0.527739] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 246)[ 0.527750] io scheduler noop registered[ 0.527760] io scheduler deadline registered[ 0.527860] io scheduler cfq registered (default)[ 0.527872] io scheduler mq-deadline registered[ 0.527881] io scheduler kyber registered[ 0.533178] pinctrl-single 4a003400.pinmux: 282 pins, size 1128[ 0.533344] pinctrl-single 4a002e8c.pinmux: please update dts to use #pinctrl-cells = [ 0.533396] pinctrl-single 4a002e8c.pinmux: initialized with no interrupts[ 0.533407] pinctrl-single 4a002e8c.pinmux: 1 pins, size 4[ 0.583900] Serial: 8250/16550 driver, 10 ports, IRQ sharing enabled[ 0.587400] console [ttyS2] disabled[ 0.587459] 48020000.serial: ttyS2 at MMIO 0x48020000 (irq = 45, base_baud = 3000000) is a 8250[ 1.395031] console [ttyS2] enabled[ 1.400608] omap_rng 48090000.rng: Random Number Generator ver. 20[ 1.406862] random: fast init done[ 1.410418] random: crng init done[ 1.414721] omapdss_dss 58000000.dss: Linked as a consumer to regulator.16[ 1.422128] DSS: OMAP DSS rev 6.1[ 1.427931] OF: graph: no port node found in /ocp/dss@58000000/encoder@58060000[ 1.435562] omapdss_hdmi5 58040000.encoder: 58040000.encoder supply vdda not found, using dummy regulator[ 1.445260] omapdss_hdmi5 58040000.encoder: Linked as a consumer to regulator.0[ 1.452624] OF: graph: no port node found in /ocp/dss@58000000/encoder@58060000[ 1.460390] omapdss_dss 58000000.dss: bound 58001000.dispc (ops dispc_component_ops)[ 1.468441] omapdss_dss 58000000.dss: bound 58040000.encoder (ops hdmi5_component_ops)[ 1.488300] brd: module loaded[ 1.497800] loop: module loaded[ 1.504409] i2c /dev entries driver[ 1.512908] cpu cpu0: Linked as a consumer to regulator.6[ 1.518410] cpu cpu0: Linked as a consumer to regulator.21[ 1.525286] sdhci: Secure Digital Host Controller Interface driver[ 1.531555] sdhci: Copyright(c) Pierre Ossman[ 1.536783] sdhci-pltfm: SDHCI platform and OF driver helper[ 1.543142] omap_gpio 4805d000.gpio: Could not set line 27 debounce to 200000 microseconds (-22)[ 1.552018] sdhci-omap 4809c000.mmc: Got CD GPIO[ 1.556904] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.20[ 1.564008] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.12[ 1.570904] sdhci-omap 4809c000.mmc: Dropping the link to regulator.12[ 1.577612] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.3[ 1.584623] sdhci-omap 4809c000.mmc: Linked as a consumer to regulator.12[ 1.591618] sdhci-omap 4809c000.mmc: no pinctrl state for ddr_3_3v mode[ 1.624016] mmc0: SDHCI controller on 4809c000.mmc [4809c000.mmc] using ADMA[ 1.631980] sdhci-omap 480b4000.mmc: Linked as a consumer to regulator.3[ 1.638800] sdhci-omap 480b4000.mmc: Dropping the link to regulator.3[ 1.645491] sdhci-omap 480b4000.mmc: Linked as a consumer to regulator.3[ 1.678055] mmc1: SDHCI controller on 480b4000.mmc [480b4000.mmc] using ADMA[ 1.686155] ledtrig-cpu: registered to indicate activity on CPUs[ 1.692264] mmc0: host does not support reading read-only switch, assuming write-enable[ 1.702359] mmc0: new high speed SDHC card at address 59b4[ 1.709663] Registering SWP/SWPB emulation handler[ 1.715175] omap_voltage_late_init: Voltage driver support not added[ 1.721703] Power Management for TI OMAP4+ devices.[ 1.727191] mmcblk0: mmc0:59b4 USD00 14.7 GiB[ 1.732685] Loading compiled-in X.509 certificates[ 1.748899] mmcblk0: p1 p2[ 1.770334] dmm 4e000000.dmm: workaround for errata i878 in use[ 1.778278] dmm 4e000000.dmm: initialized all PAT entries[ 1.784782] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).[ 1.791500] [drm] No driver support for vblank timestamp query.[ 1.798547] [drm] Initialized omapdrm 1.0.0 20110917 for omapdrm.0 on minor 0[ 1.806257] hctosys: unable to open rtc device (rtc0)[ 1.889830] EXT4-fs (mmcblk0p2): mounted filesystem with ordered data mode. Opts: (null)[ 1.898019] VFS: Mounted root (ext4 filesystem) on device 179:2.[ 1.913012] devtmpfs: mounted[ 1.917292] Freeing unused kernel memory: 2048K[ 1.921971] Run /sbin/init as init processINIT: version 2.88 bootingFramebuffer /dev/fb0 not detectedBoot splashscreen disabled[ 2.426861] EXT4-fs (mmcblk0p2): re-mounted. Opts: (null)hwclock: can't open '/dev/misc/rtc': No such file or directorySat Oct 19 22:15:06 UTC 2019hwclock: can't open '/dev/misc/rtc': No such file or directoryINIT: Entering runlevel: 5Configuring network interfaces... ifconfig: socket: Function not implementedifconfig: socket: Function not implementeddone.hwclock: can't open '/dev/misc/rtc': No such file or directoryStarting syslogd/klogd: doneumount: /mnt/.psplash: not mounted. 2ff7e9595c
コメント