text:
Kernel dynamic memory analysis
This page has notes and results from the project Kernel dynamic memory allocation tracking and reduction
[This page is fairly random at the moment...]
- 1 Instrumentation overview
- 2 Using debugfs and ftrace
- 3 Obtaining accurate call sites (or The painstaking task of wrestling against gcc)
- 4 Memory accounting
- 5 Using the trace_analyze.py post-processing script
- 5.1 Getting the script
- 5.2 Using trace_analyze.py for static analysis
- 5.3 Using trace_analyze.py for dynamic analysis
- 6 Internal fragmentation in SLAB allocators: a simple comparison
- 7 Reporting
- 8 Visualization
- 9 Mainline status
- 10 Recommendations for reductions
- 11 Slab account
- 12 Testing feedback
Instrumentation overview
- Slab_accounting patches
- uses __builtin_return_address(0) to record the address of the caller, the same mechanism used by kmem events
- starts from very first allocation
- does not use kernel allocators (instead it uses fixed-size static buffers)
- This increases overhead, but avoids interspersing tracing allocations in the rest of the system allocations
- Ftrace kmem events
- does not start until ftrace system is initialized, after some allocations are already performed
- supported in mainline - no need to add our own instrumentation
These two instrumentation methods are basically the same: trap each kmalloc, kfree, etc. event and produce relevant information with them. The difference between them is that the first post-processes the events in-kernel and create a /proc/slab_account file to access the results. This output is more or less like this:
total bytes allocated: 1256052 total bytes requested: 1077112 slack bytes allocated: 178940 number of allocs: 7414 number of frees: 5022 number of callers: 234 total slack req alloc/free caller 2436 232 2204 29/0 bio_kmalloc+0x33 268 8 260 1/0 pci_alloc_host_bridge+0x1f 32 8 24 1/0 tracepoint_entry_add_probe.isra.2+0x86 44 8 36 1/0 cpuid4_cache_sysfs_init+0x30 0 0 0 0/3 platform_device_add_data+0x33 [...]
On the other hand, analysing ftrace kmem events will defer post-processing to be done at user space, thus achieving much more flexibility.
The disadvantage of the ftrace method is that it needs to be initialized before capturing events. Currently, this initialization is done at fs_initcall and we're working on enabling them earlier. For more information, checkout this upstreamed patch:
trace: Move trace event enable from fs_initcall to core_initcall
This patch allows to enable events at core_initcall. It's also possible to enable it at early_initcall. Another posibility is to create a static ring buffer and then copy the captured events into the real ring buffer.
Also, we must find out if early allocations account for significant memory usage. If not, it may not be that important to capture them. Yet another possibility is to use a printk brute-force approach for very early allocations, and somehow coalesce the data into the final report.
Using debugfs and ftrace
For more information, please refer to the canonical trace documentation at the linux tree:
- Documentation/trace/ftrace.txt
- Documentation/trace/tracepoint-analysis.txt
- and everything else inside Documentation/trace/
(Actually, some of this information has been copied from there.)
The debug filesystem it's a ram-based filesystem that can be used to output a lot of different debugging information. This filesystem is called debugfs and can be enabled with CONFIG_DEBUG_FS:
Kernel hacking [*] Debug filesystem
After you enable this option and boot the built kernel, it creates the directory /sys/kernel/debug as a location for the user to mount the debugfs filesystem. Do this manually:
$ mount -t debugfs none /sys/kernel/debug
You can add a link to type less and get less tired:
$ ln -s /debug /sys/kernel/debug
Once we have enabled debugfs, you need to enable tracing support, selecting CONFIG_TRACING, CONFIG_FUNCTION_TRACER and CONFIG_DYNAMIC_FTRACE options.
Kernel hacking Tracers [*] Kernel Function Tracer [*] enable/disable ftrace tracepoints dynamically
This option will add a /sys/kernel/debug/tracing directory on your mounted debugfs filesystem. Traced events can be read through /sys/kernel/debug/tracing/trace. You can list available events by listing file /sys/kernel/debug/tracing/available_events.
To enable events on bootup you can add them to kernel parameters, for instance to enable kmem events:
Warning: if you use SLOB on non-NUMA systems, where you might expect kmalloc_node not get called, actually it is the only one called. This is due to SLOB implementing only kmalloc_node and having kmalloc call it without a node. Same goes to kem_cache_alloc_node.
Obtaining accurate call sites (or The painstaking task of wrestling against gcc)
The compiler inlines a lot automatically and without warning. In this scenario, it's impossible to get the real call site name based on just calling address.
When some function is inlined, it gets collapsed and it won't get listed as a symbol if you use tools like readelf, objdump, etc.
Does this matter? Well, it matters if you want to obtain an accurate call site report when tracing kernel memory events (which will see later).
However, there is one solution! You can turn off gcc inlining using some gcc options on kernel Makefile. You need to add these to your CFLAGS:
KBUILD_CFLAGS += -fno-default-inline \ -fno-inline \ -fno-inline-small-functions \ -fno-indirect-inlining \ -fno-inline-functions-called-once
It's not yet clear if all of these are needed, or just some of them.
Using ./scripts/bloat-o-meter it's possible to determine the effect of using this gcc flags:
$ ./scripts/bloat-o-meter vmlinux-def vmlinux-no-inline
add/remove: 1574/33 grow/shrink: 154/1099 up/down: 218552/-199352 (19200) function old new delta hidinput_configure_usage - 8672 +8672 do_con_trol - 2955 +2955 do_con_write - 2223 +2223 copy_process - 2078 +2078 [...]
The effect of disable inlining is now very clear:
- There are 1574 new functions, and 33 less functions.
- Some functions have grown, but many more have shrunk.
- Overall, the kernel symbols's size is 19k bigger.
We must keep in mind that no matter what internal mechanisms we use to record call_site, if they're based on __builtin_address, then their accuracy will depend entirely on gcc *not* inlining automatically.
The emphasis is in the automatic part. There will be lots of functions we will need to get inlined in order to determine the caller correctly. These will be marked as __always_inline.
See upstreamed patch:
Makefile: Add option CONFIG_DISABLE_GCC_AUTOMATIC_INLINING)
See https://patchwork.kernel.org/patch/1427211/ for some patch feedback details
Memory accounting
Types of memory
The kernel, being a computer program, can consume memory in two different ways: statically and dynamically.
Static memory can be measured offline, therefore accounted before actually running the kernel using standard binary inspection utilites (readelf, objdump, size, etc). We will explore this utilities in detail.
Dynamic memory cannot be measured offline, and it's not only necessary to probe a running kernel but also to enable aditional probe code to trace each allocation. Fortunately for us, the linux kernel has ftrace which is a tracing framework that allows to trace general events, and in particular memory allocation events. We will explore this framework in detail.
Static memory
A compiled kernel will allocate static memory to store two kinds of symbols: code symbols (a.k.a text) and data symbols (a.k.a data).
For instance, let's look at this piece of C code:
long curr; int max = 10;
int foo(int var) { int i = var + max; if (i < max) curr = i; }
We have three different symbols:
- curr : a variable (data zero initialized)
- max : an initialized variable (data non-zero initialized)
- foo : a function (text)
Once this code is running each of these symbols will need memory for its own storage. However, the zero initialized variable will not use space in the compiled binary. This is due to a special section inside the binary (called bss for no good reason) where all the zero initialized variables are placed. Since they carry no information, they need no space. Static variables have the same life as the executing program.
On the other side, var and i variables are dynamically allocated, since they live in the stack. They are called automatic variables, meaning that they have a life cycle that's not under our control.
Note that when we talk about static memory, the word static has nothing to do with the C-language keyword. This keyword references a visibility class, where static means local, as opposed to global.
The size command
The most simple command to get a binary static size, is the wonderfully called size command. Let's start by seeing it in action:
$ size ./fs/ext2/ext2.o text data bss dec hex filename 51273 68 8 51349 c895 ./fs/ext2/ext2.o
According to this output, this object file has roughly 50k bytes of text and 68 bytes of data. Now, size comes in two flavors: berkeley and sysv. Each of this shows a different output. The default is berkeley, so the previous example was a berkeley output.
However, if we use the same command with sysv output format, we'll find very different results:
$ size --format=sysv ./fs/ext2/ext2.o ./fs/ext2/ext2.o : section size addr .text 43005 0 .init.text 138 0 .exit.text 25 0 .rodata 2304 0 .rodata.str1.1 1656 0 .rodata.str1.4 3485 0 .data 60 0 .exitcall.exit 4 0 .initcall6.init 4 0 .bss 8 0 .note.GNU-stack 0 0 .comment 675 0 [...]
Here we see a more detailed description about each section size. Note the appearence of a .rodata (read-only data) section, of 2k byte large. This section is composed of read-only variables (e.g. marked const) that are not accounted under the data column, but rather as text by the standard size format.
To add even more confusion to this picture, gcc can decide (at his own will) to put inside .rodata section symbols not marked as const. These symbols are not written by anyone, and gcc considers them as read-only (pretty smart, uh?). This means you can have a .rodata section bigger than what you expected to have.
This happens since gcc v4.7 (???)
This two commands can give us any information we need about a binary. In particular, they can output the complete list of symbols with detailed information about each one. Let's see an example of readelf on the same file we used for size. The output is stripped for clarity.
$ readelf -s fs/ext2/ext2.o
Symbol table '.symtab' contains 413 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 SECTION LOCAL DEFAULT 1 [...] 339: 00004da0 286 FUNC GLOBAL DEFAULT 1 ext2_evict_inode 340: 000003e0 76 OBJECT GLOBAL DEFAULT 7 ext2_nobh_aops 341: 00000780 128 OBJECT GLOBAL DEFAULT 7 ext2_symlink_inode_operat 342: 000008d8 20 OBJECT GLOBAL DEFAULT 7 ext2_xattr_acl_default_ha 343: 00000000 0 NOTYPE GLOBAL DEFAULT UND generic_file_aio_write 344: 00000280 128 OBJECT GLOBAL DEFAULT 7 ext2_file_inode_operation 345: 00000000 0 NOTYPE GLOBAL DEFAULT UND __dquot_alloc_space 346: 00000000 0 NOTYPE GLOBAL DEFAULT UND generic_setxattr 347: 00000000 0 NOTYPE GLOBAL DEFAULT UND unlock_buffer 348: 000014c0 36 FUNC GLOBAL DEFAULT 1 ext2_bg_num_gdb 349: 00005240 684 FUNC GLOBAL DEFAULT 1 ext2_setattr [...]
For instance, ext2_nobh_aops is an OBJECT symbol (data) of 76 bytes and ext2_evict_inode is a FUNC symbol (text) of 286 bytes. Notice there are some UND symbols. They are undefined symbols for this file, that are defined elsewhere and therefore not of interest for us when inspecting a file size.
Of course, this output can be combined with grep to get fantastic results. Let's count the numbers of defined functions:
$ readelf -s fs/ext2/ext2.o | grep -v UND | grep FUNC
With a little awk magic we could even sum these sizes and get the size of the .text section. TODO!
Dynamic memory in kernel land is a little different from user land.
In user land, all one needs to do to get a chunk of memory is call malloc(). In kernel land, we have a similar function: kmalloc(). But we also have lots of other functions to alloc memory, and we must have some special considerations.
The first thing it's important to understand is that kernel obtains memory (well, in most architectures) on a fixed-size chunk, that we call a 'page' of memory. This page of memory tipically is 4096 bytes large, but this depends on the architecture.
In order to delivery smaller pieces of memory, the kernel have a few couple of layers that ultimately lets you do kmalloc(100) and get 100 bytes. These layers are called: buddy allocator and slab allocator.
We will focus on the latter. Slab allocator comes in three different flavors: SLAB, SLOB and SLUB. These funny names are historically, but the meaning is:
- SLAB is the traditional (or default in some platforms ?)
- SLOB is aimed at tiny embedded systesm (e.g. without mmu)
- SLUB is the default (on desktop?)
Each of these implement the allocation in a different way, but they all share a common property: internal fragmentation.
Internal fragmentation
For different reasons (alignment, overhead, etc) when we request 100 bytes with kmalloc(100) the slab allocator may really allocate 128 bytes (or 140 bytes, we can't really know). These extra 28 bytes can't be used, and therefore you are wasting them. This is called internal fragmentation, and one of the main goals of the slab allocator is to minimize it. In other words, trying to match as nearly as possible the requested size with the truly allocated size.
Accounting with kmem events trace
Ftrace kmem events are a great source of information. By using them you can trace each kmalloc, getting the requested bytes, the allocated bytes, the caller address and the returned pointer. You can also trace kfree, getting the caller address and the freed pointer.
Once you have the caller address you can use System.map file to get the caller function name. Also, by using the returned pointer and correlating with kfree traces you can keep track of currently used dynamic memory by each kernel function / subsystem.
Let's see this in detail.
Enabling and reading kmem trace
We can activate this on boot up with kernel parameter trace_event. For instance,
or you can activate on-the-fly with:
Once you have enabled events, you can run your favourite program (in order to trigger some allocations). When you're done you may disable events (or not) and read them:
$ cat /sys/kernel/debug/tracing/trace > kmem.log
Let's see a piece of this log:
# tracer: nop # # entries-in-buffer/entries-written: 10500/10500 #P:1 # # _-----=> irqs-off # / _----=> need-resched # | / _---=> hardirq/softirq # || / _--=> preempt-depth # ||| / delay # TASK-PID CPU# |||| TIMESTAMP FUNCTION # | | | |||| | | init-1 [000] .N.. 0.170000: kmalloc: call_site=c104deff ptr=c147dd20 bytes_req=29 bytes_alloc=32 gfp_flags=GFP_KERNEL init-1 [000] .N.. 0.170000: kmalloc: call_site=c104e2ac ptr=c147dd00 bytes_req=24 bytes_alloc=32 gfp_flags=GFP_KERNEL init-1 [000] .N.. 0.170000: kmalloc: call_site=c104deff ptr=c147dce0 bytes_req=22 bytes_alloc=32 gfp_flags=GFP_KERNEL init-1 [000] .N.. 0.170000: kmalloc: call_site=c104e2ac ptr=c147dcc0 bytes_req=24 bytes_alloc=32 gfp_flags=GFP_KERNEL init-1 [000] .N.. 0.170000: kmalloc: call_site=c10c0185 ptr=c14a4ba0 bytes_req=36 bytes_alloc=64 gfp_flags=GFP_KERNEL|GFP_ZERO init-1 [000] .N.. 0.170000: kmalloc: call_site=c10bfa28 ptr=c147dca0 bytes_req=6 bytes_alloc=32 gfp_flags=GFP_KERNEL init-1 [000] .N.. 0.170000: kfree: call_site=c10bfa4a ptr= (null) init-1 [000] .N.. 0.170000: kmalloc: call_site=c10b9619 ptr=c147dc80 bytes_req=6 bytes_alloc=32 gfp_flags=GFP_KERNEL init-1 [000] .N.. 0.180000: kmem_cache_alloc: call_site=c10b963e ptr=c1610c08 bytes_req=64 bytes_alloc=64 gfp_flags=GFP_KERNEL|GFP_ZERO
This log can be post-processed. For your convenience we have a script trace_analyze.py that does exactly this (see below).
About kmem trace events
As we have seen there are a few more events than kmalloc and kfree. Let's see them all:
- kmalloc
- kfree
- kmalloc_node
- kmem_cache_alloc
- kmem_cache_alloc_node
- kmem_cache_free
Pitfall: ringbuffer overrun
Ftrace events (in particular kmem trace events) are stored internally in a ringbuffer. If the kernel keeps writing events to it, eventually it will overrun, replacing the oldest events with the most recent.
If you're doing a bootup analysis, an overrun will trash your test.
There are few ways to avoid this.
- Increase ringbuffer size
By using trace_buf_size kernel parameter it's possible to control the buffer size. Keep in mind that a larger buffer will take longer to get allocated and will need more memory.
- Use a minimal setup and try to stop tracing as soon as possible
When doing bootup analysis, it may make sense to try to minimize the scenario setup, in order to reduce events. Also, you probably want to disable events as soon as possible.
- Perform smaller tests
Besides doing a bootup analysis, it's possible to run small tests, focused on some specific workload. Something like this:
$ echo "1" > tracing_on # enable events $ modprobe ext2 $ mount ... $ fsck $ umount ... $ rmmod ext2 $ echo "0" > tracing_on # disable_events
You can test if the buffer is overrunning by looking at per-cpu tracing stat:
$ cat /sys/kernel/debug/tracing/per_cpu/cpu0/stats entries: 0 overrun: 0 commit overrun: 0 bytes: 0 oldest event ts: 0.000000 now ts: 997.471882
Using the trace_analyze.py post-processing script
Getting the script
You can get script last version from this project's github repository
git clone https://github.com/ezequielgarcia/kmem-probe-framework cd kmem-probe-framework ./post-process/trace_analyze.py -h
Using trace_analyze.py for static analysis
trace_analyze.py typically needs access to: a built kernel tree and an ftrace kmem log.
However, if one lacks the latter but can provide a built kernel tree, the script will fallback to 'static' analysis.
Using it
Usage is fairly simple
$ ./trace_analyze.py -k /usr/src/linux -r rings.png $ ./trace_analyze.py --kernel /usr/src/linux -r rings.png
This should produce a ringchart png file in the current directory.
Of course, you can use absolute and relative paths in that parameter
$ ./trace_analyze.py -k ./torvalds -r rings.png
If you're interested in a specific subsystem you can use a parameter to specify the directory tree branch to take as root
$ ./trace_analyze -k ./torvalds -b fs -r fs.png $ ./trace_analyze -k ./torvalds -b drivers/base -r base.png $ ./trace_analyze -k ./torvalds -b mm -r mm.png
Each of this commands will produce a ringchart png file in the curent directory, named as specified.
Under the hood
The script will perform a directory walk, internally creating a tree matching the provided kernel tree. On each object file found (like fs/inode.o) it will perform a 'readelf --syms' to get a list of symbols contained in it.
Nothing fancy.
- Account for minor differences between running 'size' and using this script
Using trace_analyze.py for dynamic analysis
Producing a kmem trace log file
The purpose of trace_analyze script is to perform dynamic memory analysis. For this to work you need feed it with a kmem trace log file; of course, you also need to give hime a built kernel tree.
Such log must be produced on the running target kernel, but you can post-process it off-box. For instance, you boot your kernel with kmem parameters to enable ftrace kmem events: (it's recommended to enable all events, despite not running a NUMA machine).
This parameter will have linux to start tracing as soon as possible. Of course some early traces will be lost, see below.
(on your target kernel)
# To stop tracing $ echo "0" > /sys/kernel/debug/tracing/tracing_on
# Dump $ cat /sys/kernel/debug/tracing/trace > kmem.log
Now you need to get this file so you can post-process it using trace_analyze.py. In my case, I use qemu with a file backing serial device, so I simply do:
(on your target kernel)
$ cat /sys/kernel/debug/tracing/trace > /dev/ttyS0
And I get the log on qemu's backing file.
Now you have everything you need to start the analysis. The script will post-process the logfile and will produce two kinds of output:
- an account file
- a ringchart png
Let's see how to obtain each of these.
Slab accounting file output
To obtain the account file you need to use --acount-file (-c) parameter, like this:
./trace_analyze.py -k ../torvalds -f kmem.log --account-file kmem_account.txt
This will produce an account file like this:
current bytes allocated: 669696 current bytes requested: 618823 current wasted bytes: 50873 number of allocs: 7649 number of frees: 2563 number of callers: 115 total waste net alloc/free caller --------------------------------------------- 299200 0 298928 1100/1 alloc_inode+0x4fL 189824 0 140544 1483/385 __d_alloc+0x22L 51904 0 47552 811/68 sysfs_new_dirent+0x4eL 16384 8088 16384 1/0 __seq_open_private+0x24L 15936 1328 15936 83/0 device_create_vargs+0x42L 14720 10898 14016 460/22 sysfs_new_dirent+0x29L
You can tell the script to read only kmalloc events (notice the option name is *--malloc*):
./trace_analyze.py -k ../torvalds -f kmem.log -c kmem_account.txt --malloc
Or you can tell the script to read only kmem_cache events:
./trace_analyze.py -k ../torvalds -f kmem.log -c kmem_account.txt --cache
If you want to order the account file you can use --order-by (-o):
./trace_analyze.py -k ../torvalds -f kmem.log -c kmem_account.txt --order-by=waste
The possible options for order-by parameter are:
- total_dynamic: Added allocations size
- current_dynamic: Currently allocated size
- alloc_count: Number of allocations
- free_count: Number of frees
- waste: Currently wasted size
You can pick a directory to get an account file only for the allocations from that directory. This is done with the --branch (-b) option, just like we've done for the static analysis:
$ ./trace_analyze.py -k ../torvalds -f kmem.log -c kmem_account.txt -b drivers
All of these options can be combined. For instance, if you want to get kmalloc events only, coming from fs/ directory and ordered by current size:
$ ./trace_analyze.py -k ../torvalds -f kmem.log -b fs -c kmem_account.txt -o current_dynamic --malloc
Producing a pretty ringchart for dynamic allocations
As already explained in the static analysis section, it's possible to produce a ringchart to get 'the big picture' of dynamic allocations. You will need to have matplotlib installed, which should be as easy as:
$ {your_pkg_manager} install matplotlib
The script usage is very simple, just pass the parameter --rings-file (-r)
$ ./trace_analyze.py -k ../torvalds -f kmem.log --rings-file=foo.png
This command will produce a png file named as specified. The plot will show current dynamic allocations by default. You can control the used attrbute used for the ringchar plot using --rings-attr (-a) parameter. The available options are:
- current: static + current dynamic size
- static: static size
- waste: wasted size
- current_dynamic: current dynamic size
- total_dyamic: added dynamic size
$ ./trace_analyze.py -k ../torvalds -f kmem.log -r foo.png -a waste
You can use --branch (-b) parameter to plot allocations made from just one directory. For instance, if you want to get wasted bytes for ext4 filesystem:
$ ./trace_analyze.py -k ../torvalds -f kmem.log -r ext4_waste.png -a waste -b fs/ext4
Or, if you want to see static footprint of arch-dependent mm code:
$ ./trace_analyze.py -k ../torvalds -f kmem.log -r foo.png -a static -b arch/x86/mm
Also, you can filter kmalloc or kmem_cache traces using either --malloc, or --cache:
$ ./trace_analyze.py -k linux/ -f boot_kmem.log -r malloc.png --malloc
Pitfall: wrongly reported allocation (and how to fix it)
There are a number of functions (kstrdup, kmemdup, krealloc, etc) that do some kind of allocation on behalf of its caller.
Of course, we don't want to get trace reports from these functions, but rather from its caller. To acomplish this, we must use a variant of kmalloc, called kmalloc_track_caller, which does exactly that.
Let's see an example. As of today kvasprintf() implementation looks like this
(see lib/kasprintf.c:14) char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) { /* code removed */ p = kmalloc(len+1, gfp);
And trace_analyze produces the account file
total waste net alloc/free caller --------------------------------------------- 2161 1184 2161 148/0 kvasprintf
The source of this 148 allocations may be a single caller, or it may be multiple callers. We just can't know. However, if we replace kmalloc with kmalloc_track_caller, we're going to find that out.
char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) { /* code removed */ p = kmalloc_track_caller(len+1, gfp);
After running the re-built kernel, and comparing both current and previous account files, we find this is the real caller:
total waste net alloc/free caller --------------------------------------------- 2161 1184 2161 148/0 kobject_set_name_vargs
So, we've accurately tracked this allocation down to the kobject code.
Internal fragmentation in SLAB allocators: a simple comparison
Using trace_analyze tool and a very minimal kernel + rootfs setup it's possible to evaluate allocators wastage.
This analysis is not complete, as it lacks a comparison of memory overhead imposed by the allocator itself.
Kmalloc objects
Strings, when dynamically allocated, are one of the greatest source of fragmentation. This is intrinsic to the 'string' nature: Strings never have a regular size. String are frequently small, with typical sizes between 4 and 16 (?) bytes. This kind of small and irregular allocations can help evaluate each allocator.
The (primary?) source of strings is directory entries: file names, directory names, and such.
Let's compare each allocator and see how they perform.
SLOB prepends a fixed-size header to every kmalloc allocation. On x86 this header is 8 bytes long (how about other arches?).
So, if requested string size is between 4 and 16 bytes, the fragmentation ratio is between 200% and 50%.
SLOB allocator is different from SLAB and SLUB: it doesn't really implement a 'slab cache' concept. For this reason there is no real difference between kmallocing 5 bytes or 100 bytes. The allocator won't search for a cache of a proper size, but instead just allocate a chunk prepended with a fixed-size header.
Since wastage is independent of requested size, small allocations may waste a lot, but the wastage falls with increasing allocations.
When allocating strings SLUB allocator uses its 8, 16 and 32 byte caches. For requested size between 4 and 16 bytes, the fragmentation ratio is between 100 and 0%, the worst cases being 4 and 9 bytes, with fragmentation of 100% and 78% respectively.
SLUB being a cache-based allocator, the fragmentation will depend on how aligned the requested size is to the available size. For instance, requesting 32 bytes allocates 32 bytes, resulting in zero fragmentation. Requesting 33 bytes allocates 64 bytes, resulting in 94% fragmentation.
SLAB operates in a similar way to SLUB, in the sense that allocations are cache-based and fragmentation depends on fitness between requested size and cache size. However, since the smallest SLAB cache is 32 bytes, and strings are typically much smaller, SLAB is the less efficient of the three.
Just to compare, for requested size between 4 and 16 bytes, the fragmentation ratio is between 700% and 100%.
Cache objects
Cache objects fragmentation occurs when each allocated object needs some extra bytes for alignment, debug or other metadata. Let's analyze each case.
Being a very simple allocator, SLOB only needs to reserve extra bytes for rcu-destroyed objects. Currently, each of these objects wastes 12 bytes to store an rcu related struct.
For regular objects the wastage is nil.
It's important to keep in mind that SLOB can leave 'holes' inside slob pages. These holes are unallocated space that is not lost, because it can be used if it fits for some requested allocation.
However this means that, on low memory situations, it's possible to run out of memory for a specific allocation, but still have free space left on these holes.
If compiled without any debug mechanism (poison, redzone, ...) SLAB allocator will only reserve extra bytes to return aligned objects. Of course, the wastage depends on each architecture.
If compiled with debug enabled SLAB will add 24 bytes to each allocated object for red zoning and user store (see comments in mm/slab.c).
If compiled without any debug mechanism (poison, redzone, ...) SLUB allocator will reserve extra bytes for alignment and to store a freelist pointer.
The latter is true only for objects with a defined constructor. In this case, the wastage is fairly small: only 4/8 bytes (depending on the architecture) are needed to store a pointer. However, if many objects are allocated, the wastage can become noticeable.
An example of this is the allocation of inodes. Even on a very minimal system, more than 1k inodes can get allocated, resulting in a total wastage of 8k bytes.
As with SLAB, if compiled with debug enabled, the allocator adds some extra bytes to each object for red zoning and user store.
- extracting data to host
- tool for extraction (perf?, cat /debugfs/tracing/<something>?)
- post-processing the data
- grouping allocations (assigning to different subsystems, processes, or functional areas)
- idea to post-process kmem events and correlate with */built-in.o
- reporting on wasted bytes
- reporting on memory fragmentation
- grouping allocations (assigning to different subsystems, processes, or functional areas)
Matplotlib [[1]]
We will use matplotlib with its Wedge api to create a ring chart (similar to gnome baobab).
We'll get something like this:
Current dynamic footprint
This ring chart shows current dynamic usage, start branch is 'drivers'. Script command line is:
$ trace_analyze.py -f kmem.log -k ../linux-mtd/ -a current_dynamic -b drivers/ -r drivers.png
Static footprint
This ring chart shows static usage, start branch is 'fs' and the kernel is configured with ext2, ubifs, jffs2. Script command line is:
$ trace_analyze.py -f kmem.log -k ../linux-mtd/ -a static -b fs -r fs-static.png
Mainline status
Here's the list of the mainlined (or waiting at linux-next) patches that were produced for this project.
Patches focuses on:
- Improving tracing by enabling ftrace earlier in kernel init sequence
- Improving kmem tracing accuracy by tracking caller correctly
- Improve or fix slob kmem tracing support
- Minor slob cleanups
mm/slob: Use free_page instead of put_page for page-size kmalloc allocations commit 8cf9864b1382851d90c7c505f8441c8928f1469e
mm/sl[aou]b: Move common kmem_cache_size() to slab.h commit 242860a47a75b933a79a30f6a40bf4858f4a3ecc
mm/slob: Use object_size field in kmem_cache_size() commit fe74fe2bf293d061826f0d7afc2ca8456bdbb40e
mm/slob: Drop usage of page->private for storing page-sized allocations commit 999d8795d438d396936811b185428d70b7b7de6d
lib/kasprintf.c: use kmalloc_track_caller() to get accurate traces for kvasprintf commit 3e1aa66bd423950aa69c3d50d91818af1d16e0a7
mm/slab: Fix kmem_cache_alloc_node_trace() declaration commit dffa3f985047979ace185e253da89cabda3f7b31
mm/slab: Fix kmem_cache_alloc_node_trace() declaration commit 1e5965bf1f018cc30a4659fa3f1a40146e4276f6
mm/slab: Fix typo _RET_IP -> _RET_IP_ commit 592f41450d03f74747edd81779ae206a0647152f
mm, slub: Rename slab_alloc() -> slab_alloc_node() to match SLAB commit 2b847c3cb4f8565911bd8ce59b8428e635c90594
mm, slab: Rename __cache_alloc() -> slab_alloc() commit 48356303ff8cce7036f13a23df9119d3f47461ce
mm, slab: Match SLAB and SLUB kmem_cache_alloc_xxx_trace() prototype commit 4052147c0afa1cf05780ed846f37e87cdde9f628
mm, slab: Replace 'caller' type, void* -> unsigned long commit 7c0cb9c64f83dd9bf18b139ac0de00daba6087c2
mm, slob: Add support for kmalloc_track_caller() commit f3f741019595f1e73564d985f5fe8abcbb98c769
mm, slab: Remove silly function slab_buffer_size() commit ff4fcd01ec86d98d15d2fd96f22f19bb1d341b88
mm, slob: Use NUMA_NO_NODE instead of -1 commit 90f2cbbc49a8fe5a49cea1d362d90e377b949d49
trace: Move trace event enable from fs_initcall to core_initcall commit 8781915ad2716adcd8cd5cc52cee791fc8b00fdf
mm: Use __do_krealloc to do the krealloc job commit e21827aadd77e33833eeb393de2e8675e9b399e2
A few patches already sent have been nacked and work is needed in order to submit them again:
[PATCH 05/10] mm, util: Use dup_user to duplicate user memory http://www.spinics.net/lists/linux-mm/msg42351.html
[PATCH v2] Makefile: Add option to disable gcc automatic inlining https://lkml.org/lkml/2012/10/7/209
Latter's usefulness is still to prove.
The truth is if compiler folds some static, once-called, small function we will report a wrong callsite but we will correlate it with the correct subsystem/file.
Moreover, some parts of the kernel implicitly relies on gcc automatic inlining behavior, and turning this off have shown to break compilation.
We paste the patch here, in case someone wants to use it. It should apply on any recent kernel.
Recommendations for reductions
- Avoid the use of constructors
- Avoid to kmalloc / kstrdup small strings
- Remember to use kmalloc_track_caller on sub-system allocator functions. (see mtdcore.c: mtd_kmalloc_up_to)
Move to a section of its own?
We want to answer thes question: When to replace a kmalloc with a kmem_cache?
We can use trace_analyze on kmalloc events, ordered by alloc_count to find frequent allocers. It may be advantageous to replace this allocations with kmem_cache's.
Do it yourself:
$ trace_analyze -k linux/ -f kmem.log -c kmem_acc.txt -o alloc_count --malloc
And the produced account file looks like this:
current bytes allocated: 113128 current bytes requested: 93232 current wasted bytes: 19896 number of allocs: 2217 number of frees: 145 number of callers: 83 total waste net alloc/free caller --------------------------------------------- 5936 1782 5616 523/22 sysfs_new_dirent+0x29L 4104 1173 4104 326/0 __trace_define_field+0x5dL 10432 0 10432 326/0 __trace_define_field+0x34L 3800 1177 3800 326/0 __trace_define_field+0x4aL 1816 513 1816 177/0 kobject_set_name_vargs+0x18L 9216 1536 9216 96/0 device_private_init+0x23L <----------- This one ? 15936 1328 15936 83/0 device_create_vargs+0x46L <----------- This one ? 3040 416 1376 24/16 add_sysfs_param.isra.2+0x46L 3072 0 3072 24/0 con_insert_unipair+0xb5L 1408 0 0 22/22 create_unique_id.isra.50+0x2eL 336 68 200 19/11 add_sysfs_param.isra.2+0x6fL 512 192 512 16/0 event_subsystem_dir+0xddL 152 44 152 16/0 event_subsystem_dir+0x9cL 512 64 512 16/0 event_subsystem_dir+0x64L 120 0 0 13/13 dir_add+0x48L 208 0 0 13/13 dir_add+0x20L 640 160 640 10/0 kset_create+0x31L <----------- This one ?
Being a very minimal setup, the allocations that appear frequently are related to sysfs. Before asserting that it's better use kmem_cache in these call sites, it's necessary to estimate to overhead impose by this, considering a new kmem_cache would be created for each case.
Slab account
Slab accounting is another method of obtaining allocation-related information about the kernel. It is an out-of-tree (as of November 2012) patch that uses static buffers to hold information about allocations and frees.
This is the version of the patch for 3.6:
Testing feedback
There is some testing feedback from Tim on the Talk:Kernel_dynamic_memory_analysis page.


text:
Nearly half of Americans in a survey released Tuesday said it was hard to know which sources of financial advice could be trusted.
Respondents in TIAA-CREF's second annual Financial Advice Survey also pointed to perceived cost and lack of time as factors that prevented them from seeking advice.
Key findings from the survey showed the following:
- 48% said it was hard to know which sources of financial advice could be trusted
- 37% said they didn't like talking to anyone about their finances
- 46% said that more than ever, they needed a trusted place to go for financial advice
- 40% thought good financial advice cost more than they could afford
- 33% said they lacked time to get proper financial advice
- 58% said they would prefer to get financial advice from a single point of contact or location.
KRC Research conducted the telephone survey among a national random sample of 1,000 adults, age 18 years and older, between Aug. 28 and Sept. 2.
Survey results for 2013 also revealed notable differences in the perception of financial advice and management among different segments of the population.
The Gen X segment (ages 35 to 44) led all age groups in seeking advice on retirement, with 80% of those who sought financial advice looking for more guidance. Gen Xers were also the largest segment to rely on financial service provider websites or online tools for financial advice.
The Gen Y segment (ages 18 to 34) was most likely to say it was a little or not at all informed about retirement planning, with 43% claiming they lacked information. Unsurprisingly, Gen Yers were the most likely segment to focus on managing student loans and to rely on friends and family for financial advice.
Fifty-six percent of women in the new survey said they were confident they were saving enough for retirement, compared with 65% of men who were confident. Women continued to rely more on friends and family for financial advice, while men gravitated toward financial service provider websites and online tools.
Eighty-seven percent of respondents 55 to 64 said they were informed about retirement planning, and 85% said they acted on the financial advice they received some or most of the time. Indeed, 53% who received financial advice said they had increased their retirement savings contributions.
TIAA-CREF said this year's survey found notable changes in the kinds of advice Americans sought from financial advisors, compared with 2012 survey results.
In 2013, 63% of Americans who received financial advice wanted information on saving for retirement, versus 52% in 2012. And 54% who received advice said they were looking for how to make their retirement savings last, a nine percentage-point increase over 2012.
In 2013, 40% of Americans sought education-related financial advice, compared with 30% who did in 2012.
Respondents liked financial advice and tools designed specifically for different groups. Forty percent of those seeking advice used financial service provider websites or online tools to find information, a more than a 15 percentage-point increase from 2012.
Forty-seven percent said it would be helpful to receive financial advice through webinars, 46% through live seminars and 45% through interaction with someone online.
Check out The Most Important Ratio in HNW Retirement Planning on ThinkAdvisor.

subset: commoncrawl


text:
WWE Wrestlemania XXVII DVD Set
The biggest event of the year comes to the Atlanta when WrestleMania XXVII hits the Georgia Dome! Every member of the WWE Universe has eagerly anticipated WrestleMania and the biggest Superstars of WWE up their game when they perform on sports entertainment's grandest stage. It's been a pop culture phenomenon for more than a quarter century it is WrestleMania.
- World Hwt. Title
Edge (c) w/Christian vs. Alberto Del Rio (w/Ricardo Rodriguez and Brodus Clay)
- Rey Mysterio vs. Cody Rhodes
- Kane, Big Show, Santino Marella & Kofi Kingston vs. The Corre (Wade Barrett, Ezekiel Jackson, Justin Gabriel & Heath Slater)
- Randy Orton vs. CM Punk
- Michael Cole vs. Jerry Lawler with special referee Steve Austin
- No Holds Barred Match
Undertaker vs. Triple H
- Snookie, Trish Stratus & John Morrison vs. Dolph Ziggler, Layla & Michelle McCool w/Vickie Guerrero
- WWE Championship
The Miz (c) w/Alex Riley vs. John Cena
Bonus Matches
- 22-Man Battle Royal
- US Title Lumberjack Match
Sheamus (c) vs. Daniel Bryan
Average Customer Review: Not yet rated
Write an online review and share your thoughts with others.


text:
Pfizer says concerns about time frame, security contributed to demolition decision
Groton - As Pfizer Inc. offered further explanations of its decision to raze a complex of buildings on its campus here, others were trying to understand why the pharmaceutical giant pulled out of an ongoing sales negotiation for what is known as Building 118.
New York-based Pfizer said last week that it would knock down its former research headquarters, breaking off talks with the state and a developer who had been seeking to use the site as a biotech hub. The sudden decision surprised and angered local and state officials, who had seen Building 118 as a key to the region's economic revival, and prompted some to speculate that Pfizer never had been serious about selling the complex.
The company at first would say only that it had not drawn enough interest from potential buyers, but on Friday it offered more details about its decision.
"Unfortunately, we were unable to find a viable re-use that both ensured the security and preserved the integrity of that operation," spokeswoman Joan Campion said in an email. "In addition, options put forth also required significant public and private investment and didn't have the ability to close within the specified time frame."
Paul Pescatello, departing president of Connecticut United for Research Excellence, said he believes Pfizer was earnest about pursuing the sale, arguing that the company had kept the property in top condition. It's just not a good time to sell laboratory sites with animal-research capabilities, he said, given the glut of vivarium space in the Northeast.
It's also possible, Pescatello said, that concerns over the time it would take to close a deal and the ability of a buyer to handle the maintenance and operation of such a massive research site entered into the equation as well.
George Mathanool, a member of the Groton Economic Development Commission who has been pushing another use involving attracting mature international businesses to the site, said Pfizer rightly wants to keep control over companies that it allowed inside its gates.
"You can't sell a whole complex and all its rights to somebody who has the liberty to sublet to whoever it wants," he said.
Pescatello agreed that leasing space to foreign companies could have led to security concerns - both for Pfizer and for the nearby Electric Boat, which manufactures nuclear submarines for the U.S. Navy.
Mathanool has offered an alternate plan that would address the security concerns by giving Pfizer a stake in a nonprofit entity he is calling the Catalyze Foundation, and by granting the company veto power over any businesses brought onto the site.
"That means Pfizer would have a role in deciding how this complex would evolve," he said.
Under Mathanool's plan, Pfizer would give the building to the nonprofit, allowing the pharmaceutical firm to take a tax write-off for the value of the building and its equipment. At the same time, a for-profit group known as Catalyze LLC would seek tenants and try to fill Building 118.
Mathanool is still hopeful that a solution can be found to allow Building 118 to remain, perhaps by taking the complex off the tax rolls for a time.
But former Pfizer scientist Jim O'Malley, founder of the New London biotech firm Myometrics LLC, said Building 118 is not a viable option. Pfizer already has decided that it is going to raze the building as a way of reducing expenses, he said, and there is nothing that will stop them.
"There's been too much focus on buildings and not enough focus on the people who are going to be in them," O'Malley said. "The whole 118 debacle really demonstrates that (the state Department of Economic and Community Development) and the governor have no idea what they're doing."
O'Malley urged the state to invest whatever money would have gone into saving the research center into initiatives undertaken by the SouthEastern Connecticut Enterprise Region, the local economic development agency.
"The governor has got to start paying attention to the businesses around here that have shown success," O'Malley said. "We can formulate a plan that would be much cheaper than buying 118 that would allow businesses the ability to get started."
O'Malley insists that creating an incubator in New London would be the best way to retain the hundreds of local scientists in the region who have been laid off by Pfizer over the past few years. He said incubator space at the University of Connecticut at Avery Point is insufficient and too expensive and that New London's transportation infrastructure makes the city an attractive place to do business.
"The right city to do this in is New London," he said.
O'Malley and others in the scientific community, including Pescatello of CURE, down played one of the theories being bandied about last week to explain why Pfizer bailed out of a possible deal on the Building 118 property - the idea that Pfizer didn't want to create competition for local scientists by harboring a biotech hub on its 160-acre campus.
But one New York-based headhunter, who asked to remain anonymous because he has worked with Pfizer, said the company has a captive labor pool in the region, a group of current and former scientists who want to remain in the area to raise families. Having a biotech park next door would open up new competition for top scientific talent, he said, and could encourage Pfizer employees to spin off new companies of their own.
"Having a biotech park next to Pfizer will give Pfizer employees options to be poached to these new startups," the headhunter said in an email. "Pfizer will have to spend a lot of money replacing top talent brought to Groton cheaply in years past."
The headhunter, in a follow-up phone interview, said it would cost Pfizer triple a typical scientist's salary to recruit and relocate new talent, as opposed to holding on to its current employees.
"Tear(ing) down a building is a protectionist move and a good move by Pfizer," he said. "They've cut so deep that the people left are the best they have. Why give it away for free by giving them options in their local market?"
Others, though, doubted that Pfizer was seeking to avoid creating competition, pointing out that the company had advertised the 750,000-square-foot complex for scientific uses and noting that biotech firms and pharmaceutical companies work side by side in places such as Cambridge, Mass., without causing concern.
"Who do you think you're going to sell a chemistry lab to unless you're going to sell to a competitor?" state Rep. Ted Moukawsher, D-Groton, said.
Local scientists said Pfizer has cut so many jobs over the past few years that worries about a tight labor pool are unfounded.
What's more, said Pescatello of CURE, scientists have a long history of enjoying the proximity of other companies doing similar work.
"I think they would have liked to have other companies nearby," Pescatello said.
Meanwhile, Pfizer said, it continues to incur significant costs for utilities still in place at Building 118.
"By making this decision, we can reinvest that money into research projects at Groton rather than paying to maintain an empty building," Campion, the Pfizer spokeswoman, said.
Stories that may interest you
State presses ahead with plans for $20 million pedestrian bridge in New London
The National Coast Guard Museum Association has submitted an application to the city for construction of a 400-foot, glass-walled pedestrian bridge to span Water Street and connect the downtown with the waterfront and future Coast Guard museum.
Hygienic hosting weekly arts and music events on Fridays in New London
The Hygienic Art Park has been hosting weekly Dine-In Friday events that feature performances by a variety of local artists and various local artisans selling their wares.
Bozrah Farmers Market takes on a flair of the old fashioned and fanciful
This Friday was steampunk night at the market.
Town and city clerks shift schedules to account for election
Clerks' offices in the region are moving hours around, offering services by appointment and sometimes closing in expectation of an increased workload ahead of this year's general election.


text:
Java SE 8 Beyond Lambdas: The Big Picture
A lot has been written about JDK 8 and Lambdas, to the point where you might think nothing else really changed in this version of Java. In reality, so much has been added or improved, it's difficult to cover it all. In addition to Lambdas, which have been covered extensively, there have been changes to the way annotations are handled, array processing, VM size, garbage collection, and so much more.
I've already discussed parallel array processing and
Spliterators, so let's dive in and explore the rest.
Java Type Annotations
In the past, you could only apply annotations to declarations, such as with class and interface annotations:
@Entity public class Person { //... }
or on a method:
@Override public void run() { //... }
As of Java SE 8, annotations on Java types are now allowed. For instance, you can declare a
String as requiring an entry:
@NonNull String name;
or object creation:
new @Immutable SomeObject();
or even
Exception declarations:
void run() throws @Error SomeThreadException{ //... }
as opposed to something indicating a less severe situation:
void run() throws @Warning LatencyException { //... }
Default Methods
With previous versions of Java, if you added a method to an existing interface, all implementations of that interface would need to change. This naturally makes interface changes very disruptive. With Java SE 8, you can now add default method implementations to interfaces to avoid this situation. For instance, if you have an interface such as:
public interface MessageListener { public void onMessage(Message msg); }
You can now add a default method to avoid compiler errors in all implementing classes:
public interface MessageListener { public void onMessage(Message msg); public void onTextMessage(String msg) { TextMessage txt = new TextMessage(msg); onMessage(txt); } }
The Nashorn JavaScript Engine
Since Java SE 1.6, Java has shipped with a built-in JavaScript engine called "Rhino." Prior to Java SE 7, Rhino suffered the same problem that all JVM-based languages (besides Java) suffered: poor performance. However, with the addition of the
invokedynamic bytecode in Java SE 7, all of these languages (Groovy, Ruby, PHP, JavaScript, and others) were treated as first-class languages and enjoyed the benefits of JVM runtime optimizations, such as JIT compilation and zero performance penalties when calling into Java code or libraries.
Taking this even further, Oracle built an entirely new, fully integrated, JavaScript engine called "Nashorn" with high performance as its primary goal. Thanks to its use of the Metaobject Protocol, JavaScript code in Nashorn can seamlessly call Java code (and vice versa) within the same JVM without any penalty. This allows you to consolidate all of your Java and JavaScript code onto one virtual machine, and leverage the same set of tools for Java development, debugging, profiling, and management.
Security Enhancements
Even with all of the added attention to security via the last set of Java SE 7 updates, Java SE 8 brings many of its own security enhancements to the JVM. This includes Base64 encoding via the new
Base64.Encoder class, an implementation of the new Server Name Implementation (SNI) extension to the TLS/SSL protocol to indicate the hostname of the server a connection request is sent to, better checking of certificate revocation status, stronger algorithms for password-based encryption, and the addition of NSA Suite B cryptography with message digests. Oracle has published details for all of these security enhancements and more.
Library Enhancements
From the beginning of time (which circa 1995 for Java developers), working with date and time in Java has been troublesome. The APIs weren't thread safe, they were difficult to use and understand (that is, year starts at 1900, months start at 1, and days start at 0), and other basic concepts of time (such as time zones) are poorly handled or not supported.
With Java SE 8, Oracle has attempted to address all of this with new, developer-friendly APIs, which while easier to use, also manage to maintain backward compatibility with older versions of Java. Time-based standards are now supported including ISO-8601, BCP47, and CLDR for international date and time support; there are immutable implementations for improved thread safety and concurrency; and there's a domain-driven design to improve the APIs overall. For instance, standard
getter-style APIs make date/time value retrieval much more straightforward:
LocalDateTime now = LocalDateTime.now(); LocalDate theDate = now.toLocalDate(); Month month = now.getMonth(); int day = now.getDayOfMonth(); int second = now.getSecond();


text:
In her own words: living with uterine cancer
Vicki had relocated to southern Florida in February 2002 to be married; 9 months later, she was diagnosed with uterine cancer on her 43rd birthday. She is currently recovering from a radical hysterectomy and working as an artist as she undergoes radiation therapy.
What was your first sign that something was wrong? What symptoms did you experience?
I've always had an irregular menstrual cycle and doctors suspected it was due to fibroids. But in September 1999 I was bleeding so heavily that I needed a new tampon every 10 minutes. After a trip to the emergency room, I was given a hormone shot and told to see my primary care doctor. I was put on a birth control pill, which worked for a while to regulate my cycle.
Then in April 2001, I saw a new gynecologist who expressed concern about the fact that I am a smoker, which can cause problems in people taking the pill. She switched me to Depo Provera hormonal shots, but after about 10 days I began to bleed again. She performed an ultrasound, but it was negative, so I continued with the shots. I bled continuously, but lightly until November 2002. On November 18th, I began to have severe pain, as if someone had "scraped" my insides.
What was the diagnosis experience like?
I was admitted to the hospital on November 20th with low blood pressure and a low hemoglobin level due to blood loss. I received blood transfusions and underwent a dilation and curettage (D&C), which is a surgical test in which the doctor scrapes tissue from the lining of the cervix to check for cancer cells, hyperplasia, or other conditions. I received the news that I had Stage II uterine cancer on my 43rd birthday, November 22nd. Two days later, I had a radical hysterectomy, which involved the removal of my uterus and ovaries.
What was your initial and then longer-term reaction to the diagnosis?
I took the news of cancer much better than I ever thought I would. I think it was because the doctor told me that 85% of people never need any other treatment except a surgical hysterectomy, which removes the uterus and possibly the ovaries. And he also said chemotherapy, which scared me, was not a treatment option for uterine cancer. So, I felt optimistic about my treatment options.
How is uterine cancer treated?
Most women can be treated with surgery alone. In some cases where the cancer may have broken through the uterine wall to enter the blood stream and/or lymph nodes, radiation is advised. In my case, the pathologist suspected that it had gotten into the blood stream, but my lymph nodes were clean. I am now undergoing 6 weeks of radiation and I just finished the 10th treatment of 28.
Did you have to make any lifestyle or dietary changes in response to uterine cancer?
Of course, I have slowed down a little, because of fatigue. But then again, I was anemic for so long, which also made me feel tired. So I don't notice that I'm more tired than I have been all along. I've been slowly recovering from the surgery, trying to allow my abdomen to heal completely before getting back into glass cutting for the mosaics that I create. During the first few days of radiation I felt a little nauseous, but that has subsided. I do have a significant amount of diarrhea as a result of the radiation affecting my bowel, but I am eating a balanced, low-fiber diet along with daily Metamucil supplements to manage that problem.
Did you seek any type of emotional support?
I have received a lot of support over the past several months, mostly from my husband, who took time off from work to help me after my surgery. My mother flew down for a visit from West Virginia to help out as well.
Does uterine cancer have any impact on your family?
It definitely affected my family, especially initially. I felt I was the "calm one" the first few days after they found out I had cancer. They were crying and afraid for me, but I tried to be strong and rational. When I was alone, I would sometimes cry and pray that my lymph nodes would be clear, letting out my negative feelings in private.
What advice would you give to anyone living with uterine cancer?
I can't emphasize enough that you must push your doctor to do a D&C to test for uterine cancer if you're having gynecologic issues such as irregular bleeding. The gynecologist in the hospital was appalled that I hadn't had a D&C after 3 years of bleeding. Hormone therapy takes so long to regulate your cycle that you may lose precious time if you don't investigate your condition thoroughly to treat any hidden cancers that may be growing.
As told to ]]>Diane Voyatzis, RD]]>


text: Thursday, Jan 30, 7-10 PM New Orleans Hempire Mixer w/ Twiler Portis $5.00 Getting there New Orleans, LA Get directions Get a ride with Uber Get a ride with Lyft More Info EventBrite TWILER PORTIS More Very Local Entertainment What's happening in (virtual) New Orleans this week: Sept. 21-25 Bars are closed again and the maximum size of group gatherings has been reduced, but there's still plenty of fun to be had online while getting those COVID cases back... New Orleanians After finding NFL player living under bridge, local photojournalist develops a lifelong friendship From a AP award-winning look at the Desire projects to the chronicle of a two-time Super Bowl player finding himself homeless and on drugs, in his thirty-three and a half... Know Your NOLA, Restaurants Long Chim brings a taste of Thailand's street food to NOLA Although New Orleans boasts cuisine from all over the world, the Thai food scene is limited, mainly because of the lack of necessary ingredients. Business, Restaurants Is the pandemic capable of changing the restaurant industry for the better? That the restaurant industry will be changed forever seems obvious. But the unspoken question looms large: Is the pandemic actually capable of changing the restaurant industry for the better?


text:
/* */
Do you live in Erewash? Or perhaps you are interested in working in Erewash? Either way, if you're seeking rewarding temporary or permanent jobs in the NHS or private sector, you're in the right place.
Regardless of your profession, specialty or grade, ID Medical has a wide range of healthcare jobs in Erewash available daily that need to be filled. Plus, with our industry-leading support, you can feel confident that we'll help you find your ideal role.


text:
Buy CBD San Jose, CA - Where to Buy CBD Oil in San Jose
Buying CBD Oil San Jose, CA: Ultimate Guide to San Jose CBD Oil
Are you searching online for "where to buy CBD oil in San Jose?" Maybe you're looking for the best San Jose CBD shop near you? Buy CBD Online is the largest online CBD store in San Jose, CA that has the best discounts and deals on CBD Oil, CBD Tinctures, CBD Flower, CBD Vape, CBD Gummies, CBD lotion, CBD Pets. We carry Full Spectrum CBD products, Broad Spectrum CBD products and Crystal Isolate CBD products. Before visiting your local City CBD store please read this CBD guide and learn how to get the highest quality and best CBD oil and hemp oil from a CBD shop in San Jose, California.
People in San Jose turn to CBD for all kinds of reasons, including for help sleeping better and dealing with headaches. Some people are just curious about the CBD and cannabis beauty items that are now on the market.
Buy CBD Online carries over 500+ CBD brands such as MedTerra CBD, Green Roads CBD, KOI CBD, Nirvana CBD, CBD MAN, Korent Hemp, Savage CBD, Pacahama CBD, Blue Moon Hemp, ERTH HEMP, CBD FX, ENVY CBD, JUST CBD, CBD MD, Honest Paws, and much more! We carry various strengths and sizes for CBD such as 5mg CBD, 10mg CBD, 25mg CBD, 50mg CBD, 100mg CBD, 300mg CBD, 500mg CBD, 1000mg CBD, 1500mg CBD, 2000mg CBD, 2500mg CBD, 3000mg CBD, 3500 mgCBD, 4000mg CBD, 4500mg CBD, 5000mg CBD, 10000mg CBD. Most of the tinctures come in small sample sizes such as 5mL, 10mL, 30mL (1oz), 60mL (2oz), 120mL (4oz). Our full spectrum and broad spectrum CBD hemp oil gummies usually come in a bottle of 30count gummies.
FREE CBD PREROLL: Click to Claim Your Free CBD in San Jose
What is San Jose CBD and how does it work?
San Jose CBD oil is a blend of naturally occurring hemp oil and a carrier oil such as coconut oil. Hemp oil is extracted from the industrial hemp plant. The plant's trichomes produce a resinous substance that contains many different types of compounds, including cannabidiol (CBD) and tetrahydrocannabinol (THC), in addition to a variety of terpenes, plant proteins, and minerals. We carry CBD oil in the form of tinctures stored in a glass bottle that includes a dropper built into the lid for easy use. Our CBD oil is made from non-GMO, hemp-derived CBD grown in the U.S. using natural farming practices.
Cannabidiol (CBD Oil) has effects on the brain. The exact cause for these effects is not clear. However, cannabidiol seems to prevent the breakdown of a chemical in the brain that affects pain, mood, and mental function. Preventing the breakdown of this chemical and increasing its levels in the blood seems to reduce psychotic symptoms associated with conditions such as schizophrenia. Cannabidiol might also block some of the psychoactive effects of delta-9-tetrahydrocannabinol (THC). Also, cannabidiol seems to reduce pain and anxiety.
Which stores in San Jose, CA sell CBD Oil?
Research on the safest, most effective use of CBD is still emerging. Even so, with stores in San Jose climbing on board, health and wellness products with CBD are getting easier to find in San Jose, CA. And if you're interested in trying them, you're not alone. In a survey conducted by CreakyJoints, part of the Global Living Foundation, more than half of arthritis patients surveyed in San Jose had tried medical marijuana and CBD products in addition to their prescribed medications to cope with symptoms like chronic pain.
Finding the best San Jose CBD Store
Stop in at a CVS Pharmacy in San Jose, CA: Next to standard heat wraps and sports creams, across the aisle from keto snacks, an entire display is devoted to topical products containing CBD oil, a chemical found in cannabis plants. There are also CBD stores in San Juan Bautista and San Joaquin.
In the CVS display and nearby shelves, you can pick up CBD oil at around $39.99 per container or $20 per ounce. Or you could try CBDfx Gummies, among several other brands of CBD-based gummies.
CVS is one of more than 20 CBD stores that have opened around San Jose, CA in the last three years. CBD can't get you high, but it's become a popular health supplement in San Jose, used in hopes it will treat a laundry list of ailments from arthritis pain to anxiety in dogs. San Jose CBD products can also be spotted on the shelves of local stores like Walmart, and at local frozen yogurt shops, gas stations and supermarkets.
Is it safe to take CBD in San Jose?
When taken by mouth: Cannabidiol is POSSIBLY SAFE when taken by mouth or sprayed under the tongue appropriately. Cannabidiol in doses of up to 300 mg daily have been taken by mouth safely for up to 6 months. Higher doses of 1200-1500 mg daily have been taken by mouth safely for up to 4 weeks. A prescription cannabidiol product (Epidiolex) is approved to be taken by mouth in doses of up to 10-20 mg/kg daily. Cannabidiol sprays that are applied under the tongue have been used in doses of 2.5 mg for up to 2 weeks.
Some people in San Jose, CA reported side effects of cannabidiol including dry mouth, low blood pressure, light headedness, and drowsiness. Signs of liver injury have also been reported in some patients, but this is less common.
When applied to the skin: There isn't enough reliable information to know if cannabidiol is safe or what the side effects might be.
What do people in San Jose use CBD for?
Anxiety Disorders:
While most people in San Jose do not think of stress and anxiety as good behaviors, but they are important adaptive responses that can help avoid trouble and deal with threats safely. CBD may reduce the effects of common anxiety-related conditions such as:
- Post-traumatic stress disorder (PTSD)
- Social anxiety
- Generalized anxiety disorder
- Panic disorders
- Moderate depression
CBD For Pain Management:
Pain reduction is one of the main reasons people in San Jose use CBD. In particular, the sporting industry has become a major market for CBD oil and other products used topically to address localized pain. CBD reduces pain and inflammation and speeds up healing when muscles and joints have been exhausted from intense exercise, but it also reduces chronic pain and can be used to treat conditions like arthritis.
Is CBD legal in San Jose, California?
California, believe it or not, is one of the most progressive states in America when it comes to hemp-derived CBD. Back in 2009, the first bill in which industrial hemp was legally defined as containing no more than 1% THC by weight and made legal for cultivation was introduced. It was signed into law in 2014, which is when CBD became legal for medical use. September of 2018 was when the recreational use of hemp-derived CBD became legal in San Jose, a full three months before the passage of the Farm Bill. San Jose, California also doesn't impose the same restrictions that other cities do in regards to CBD in foods or beverages. In fact, in February of 2019, they began allowing the sale of CBD-infused alcohol. So, if you want to purchase or use San Jose CBD that comes from industrial hemp, you have nothing to worry about here.


text:
COI Black Tungsten Carbide Pipe Cut Flat Wedding Band Ring. Comfort fit with inside round shank. A 100% tailor-made ring for you. Classic with delicated details, unsurpassed quality plus incredible value! Perfect as a wedding band, engagement ring or just for everyday wear due to its extreme comfort! Video Display: https://www.youtube.com/watch?v=p5_pcKNi88g
2.0mm(0.07 inches), 2.25mm(0.08 inches) or 2.5mm(0.09 inches)
Tailor Made. Usually ships in 5 - 7 business days.
14-Day Returns. FREE Worldwide Shipping. 100% Quality Guarantee.
We can provide engraving service for up to 12 letters on the ring. Indicate the inscription of your choice during check-out.


text:
Ackley to remain New London police chief; Segar is out
New London - Police Chief Margaret Ackley will remain the city's top cop even though she has threatened to sue the city and has made allegations that a former city councilor meddled in the department and tried to undermine her authority.
Mayor Daryl Justin Finizio announced Wednesday a restructuring of the management of the police department, which includes a contract for Ackley and the retirement of several senior members of the department. Retirement negotiations are under way and will be announced shortly, he said.
Meanwhile, Deputy Chief Marshall Segar, a 21-year veteran of the department, was told his one-year contract was not being renewed. His last day was Wednesday.
An officer in the department, who asked not to be identified because he "might be next," said everyone was stunned by the announcement.
"He was the smartest person in the department,'' the officer said of Segar.
The shake-up in the police department was among several announcements Wednesday from the mayor's office.
Finizio said he will not release a report by a former Superior Court judge - whom the City Council hired last October to investigate Ackley's allegations against Michael Buscetto III - because of attorney-client privilege and ongoing settlement discussions.
The City Council asked the city attorney Tuesday for a copy but was told the report was given to the mayor, who would be the one to release it.
Council President Michael Passero said he was confident the council will receive the report and said he intends to make it available to the public when it does.
"He'll be releasing it,'' Passero said. "He (Finizio) has no right highjacking that report."
In October, the council authorized the law director to hire a third-party investigator to check Ackley's claims and give an unbiased report. Beverly Hodgson was contracted to look into the allegations.
"We commissioned the document. We directed the law director to give it back to us,'' Passero said. "He has a legal obligation to give it to us now."
Finizio said the finished report is confidential because it is part of attorney-client privilege as well as part of pending litigation. Hodgson was hired as an analyst by the law director, and the documents are part of a working file, he said.
When asked when a notice of "intent to sue" was filed, Finizio said he had no comment.
"Settlement discussions are ongoing, and we will not be releasing it at this time,'' Finizio said.
Ackley said publicly last summer that Buscetto, who was running for mayor at the time, was trying to undermine her authority as police chief. A list of specific complaints was given to the law director but was never made public.
The Day filed a Freedom of Information request to obtain the document, which the city denied. The Day's complaint to the Freedom of Information Commission is pending.
Buscetto said Wednesday he has always welcomed an investigation and he, too, wants the report made public.
"From the beginning of these accusations, I've always stated they were done in a vindictive manner," he said. "This has been a smear campaign from the beginning between the mayor and the chief.
"They used it as a campaign tool to discredit my candidacy,'' he said. "It cost me the election and unfortunately, the mayor's and chief's actions are going to cost the city."
Former City Councilor Rob Pero, who was on the council when Ackley brought her complaints to the council and who voted for the independent investigation, said the report should be released.
"It was such a public discussion, in many ways,'' Pero, also a candidate for mayor last fall, said Wednesday. "There were public accusations, public discussions and a public election that indirectly centered around these allegations. Now we have a mayor, who commented at the time that there should be an investigation, and he does not want to release it? All this stuff should be public."
'I wish the department best of luck'
Segar, who served seven terms as police union president, became deputy chief two years ago when Ackley took over the 96-member department.
"I'm a contract employee. They decided not to renew my contract,'' Segar said Wednesday, adding that he did not know his contract was not going to be renewed. He said he was told the department was being restructured.
Segar was the department's spokesman and occasionally filled in for Santa Claus at local Christmas parties for children. He has a bachelor's degree in government and public policy and is a practicing attorney who was admitted to the Connecticut Bar Association in February 2009.
He is also an Army veteran who served in Europe and in Operation Desert Storm.
"I did not expect it, but I wish the department best of luck,'' he said. "I want to make sure the department moves forward."
He said he will pursue his law practice and spend more time with his family.
Under her "employment agreement," Ackley will earn $110,725 a year, about $3,000 more than her current salary, and will be allowed to accrue and take "reasonable amount of compensatory time off subject to the review of the Mayor.''
Stories that may interest you
Police officer, firefighter help finish ramp for Groton woman
Thanks to a group effort and goodwill, town resident Jean Porter now has a finished ramp to her home.
Two recent 'positives' at Foxwoods among few COVID-19 cases at casinos
Union representing Foxwoods' table-games dealers pushing for testing of asymptomatic employees.
How contentious are thy branches?
A Christmas tree in Montville that's annually decorated by a father and daughter has become a lightning rod due to its handcuff ornaments.
Otis Library donors' information part of large cyberattack at fundraising company
Fundraising software company told Otis customers the attack did not include sensitive credit card or bank account information.
Do you support the decision by New London Mayor Daryl Finizio to rehire Police Chief Margaret Ackley?
I don't have an opinion on the decision
Number of votes: 863
Two recent 'positives' at Foxwoods among few COVID-19 cases at casinos
Otis Library donors' information part of large cyberattack at fundraising company
Analysis: Trump likely paid less in federal income tax than average middle class American


text:
Are you looking for the best Facials For Men in Bothwell? Maison Grand is your best choice for Facials For Men.
The Wellness Day Spa at Maison Grand is an unforgettable experience intended to cater to your internal and external wellness. Located minutes from Bothwell, Maison Grand would love to help you with your Facials For Men needs.
Within each person the potential exists for perfect balance, a state of well being that radiates from the inside out.
Enjoy the simple elegance of Maison Grand Wellness Day Spa.
Maison Grand captures a comforting and relaxing atmosphere with a convenient location, which is designed to enhance your vitality and well being.
To learn more about Facials For Men in Bothwell, visit our services page.


text:
Your daily news briefing with the video of the day, top news and quote of the day.
Quote of note"The mother was home at the time of the incident, but she had stepped outside. It's just one of those nightmares -- a quick thing that happens when you turn your back." - Kentucky State Police Public Affairs officer Billy Gregory, talking to CNN about an accidental shooting that left a 2-year-old dead. The little girl was shot by her 5-year-old brother when he was playing with a rifle he got for his birthday. News to know
No human remains were found at a newly discovered 9/11 site, officials said Wednesday. A piece of one of the planes was discovered at the site of an Islamic community center.Hot video Girl born without windpipe gets lifesaving surgery. More Content Now


text:
Despite intense scientific inquiry, there are still major gaps in our knowledge about early human life. One major question that remains unanswered: when humans were first capable of complex cognition? In other words, when did early humans develop sophisticated cognitive abilities, such as prioritization and cultural transmission, that we would recognize today?
A new study in Nature addresses this; after six years of excavation, archaeologists have unearthed technologically-advanced stone tools that were created about 71,000 years ago. This finding enhances our knowledge about the history of human tool use, suggesting that sophisticated cognitive abilities were present relatively early in human history. It also raises the possibility that tools may have given early humans an advantage as they ventured out of Africa.
The ancient tools, called microliths, were found at a site called Pinnacle Point in South Africa. Microliths are small stone tools—less than 50mm in length—that are heat-treated and trimmed into specific shapes. The "bladelets" found at Pinnacle Point closely resemble tools from other sites that were used as the points of arrows and other compound projectile weapons. However, optical dating techniques suggest the Pinnacle Point tools are 6,000 to 10,000 years older than those found at other sites. So humans may have created and used bows and arrows earlier than previously thought.
Not only is this finding interesting in terms of weaponry, but the complex process required to make microliths suggests these early humans had surprisingly modern cognitive abilities. Early humans would have needed to identify and collect the mineral needed for the blade and the wood needed for the heat source, prepare the blades, create and maintain the controlled fire to heat-treat them, reshape the heated blades into microliths, carve wood or bone into shafts, and mount the microlith on the shaft to form a compound tool. Furthermore, the researchers believe microlithic technology persisted at Pinnacle Point for at least 11,000 years, indicating that this intricate process must have been passed down across multiple generations. Following—and passing along—this "recipe" implies microlith-makers living more than 70,000 years ago were capable of foresight, prioritization of tasks, and cultural transmission. All of those are certainly sophisticated cognitive capabilities.
Other studies have used symbolic representation, such as body ornaments and carved decorations, as a proxy for the modern human mind. These types of objects generally appear in the archaeological record between 100,000 and 60,000 years ago. However, critics have argued the thoughts motivating the creation and use of these objects is unclear, and therefore they are not a good proxy for advanced cognition. The authors of the Nature study disagree, saying that complex ideas and transmission are a better way to measure what makes a human mind "modern." Interestingly, the age of the Pinnacle Point microliths—71,000 years—falls squarely in the range of when scientists believe symbolic representation first appeared on the scene.
The researchers assert the skill associated with making microliths would have been hugely beneficial to early humans. Projectile weapons such as bows and arrows would allow them to kill with greater accuracy and from longer distances. Microlithic technology may have given early modern humans an advantage over both prey and Neanderthals, assisting their migration from Africa and perhaps enabling their eventual spread across the globe.
Nature, 2012. DOI: 10.1038/nature11660 (About DOIs).


text:
Owned and Operated by The Torque Network, LLC © 2000 - 2019 Corvette Action Center
© CORVETTE is a registered trademark of the General Motors Corporation & Chevrolet Motor Division. Neither Chevrolet Motor Division nor any subsidiaries of GM© shall bear any responsibility for CorvetteActionCenter.com content, comments, or advertising.
CorvetteActionCenter.com is independent from GM© and is not affiliated with, sponsored or supported by GM©. Copyright/trademark/sales mark infringements are not intended, or implied. All Rights Reserved


text:
T. Rowe Price has launched a free online Social Security calculator designed to help people estimate potential benefits and decide what strategy to use when planning for their financial goals—and to help advisors talk about those goals with their clients.
The Social Security Benefits Evaluator calculates the annual dollar amount of benefits plus the best timing for either single or married individuals to start claiming benefits. T. Rowe's calculator not only estimates Social Security income, but also offers ways to take benefits based on the users' goals and allows them to compare results of different Social Security strategies.
Meanwhile, T. Rowe has launched a campaign to help advisors initiate conversations with clients about social security and to better understand their clients' social security goals. Called "The Social Security Conversation," the campaign includes a video covering the rules, pitfalls and tax effects of Social Security benefits that advisors can share with clients.
In one scenario, T. Rowe offers up the example of a couple, Ken and Barb, who suffer from tunnel vision when it comes to taking benefits too early. Ken, 62, earns an annual salary of $200,000, and Barb, 59, earns $125,000, and they just want to retire and take benefits as soon as possible. Yet they want to get the maximum benefit possible as a couple over both of their lifetimes.
The Benefits Evaluator shows that instead of taking their benefits at 62, both should collect at age 70, with Barb also taking spousal benefits at age 66. If they start claiming Social Security at 62, the couple stands to collect only $1.28 million in their lifetime, but if they wait, they can take in as much as $1.63 million—$350,000 more in benefits.
Benefits Increase 7%-8% Every Year They're Delayed
The "Social Security Conversation" video reveals that 78% of all Americans still claim their benefits at age 62 and consequently receive reduced benefits. A corresponding "investor map" lays out scenarios for both singles and couples, showing how taking benefits before age 70 can be like leaving money on the table.
"One of the biggest decisions when developing your retirement income strategy is when and how to begin collecting Social Security benefits," writes Christine Fahlund, a senior financial planner and vice president of T. Rowe Price Investment Services, in "Social Security: Three Income Strategies." "Although you may begin drawing Social Security at age 62, there is no requirement to do so. In fact, your payment increases by approximately 7% to 8% for every year you delay, up to age 70. And if you're married, there are other good reasons to postpone as well."
Baltimore-based T. Rowe Price Group, with $576.8 billion in assets under management as of Dec. 31, is a global investment management organization offering mutual funds, subadvisory services and separate account management.
Wharton Study Shows Low Social Security Literacy Rate
Often, Social Security recipients don't realize they can receive more income or adjust that stream of income to their needs by choosing one strategy over another. While 70% of respondents surveyed said they felt somewhat or very knowledgeable about Social Security, less than 20% actually scored well on a Social Security literacy test, according to a study by the Wharton School's Pension Research Council.
Considering that the Social Security Handbook has more than 2,700 separate rules governing the program's benefits, advisors can help clients navigate the program's intricacies.
The Social Security Administration's official website offers information and retirement calculators, but it doesn't offer the range of goals that individuals can select on the T. Rowe version. For example, married couples can select one of seven goals in the T. Rowe tool, ranging from "we want to maximize cumulative benefits as a couple" to "we want to minimize the drop in income for the surviving spouse." Singles can select one of three goals.
After users provide some background information and choose a goal, the T. Rowe calculator offers a benefits strategy and estimates Social Security income based on the strategy. Income is shown as an annual cash flow as well as a cumulative total, and users can easily change their goals and compare how different strategies might generate different income streams throughout retirement.
Read Nearing Retirement? Practice Makes Perfect, Fahlund Advises at AdvisorOne.
(CORRECTION: In an earlier version of this story some information provided by T. Rowe Price about the couple in the Benefits Evaluator scenario was incorrect. The corrected version changes the couple's ages, spousal benefits calculation and the dollar amount of benefits they stand to collect.)


text:
Text VOTE to 52000 to donate $10.
With your support, we can reach and inform more voters.
Donate now to spread the word.
Encourage this candidate to share their information on Voter's Edge.
Top contributors that gave money to support the candidate, by organization:
Voter's Edge California neither supports nor opposes political parties, ballot measures, or candidates for public office.


text:
Top4Office does not just offer world class business hardware from the likes of Ricoh, Canon and Sharp at bargain prices. We also offer some of the best after-sales support in the UK, taking pride in our dedication to ensuring every last one of our customers gets the kind of support they need to keep all their hardware running at peak performance throughout ownership. When you purchase MFD's from us you can rest assured that you will get the maximum output at all times. We are the most trusted photocopier suppliers online. So call us today to find out how we can save you money!
One of the most increasingly popular trends in the business hardware market is leasing equipment. More and more companies across the UK now choose to lease copiers and MFDs instead of purchasing outright. There are plenty of upsides to this option. For one thing, as you get to spread the cost across a longer period, the short term costs are not as great. This is terrific for the small start-up that has yet to generate the capital to kit out its office with the hardware it requires to handle its workload. Leasing also allows you to avoid the potential pitfall of purchasing a product that will depreciate in value over time.
Buying the hardware outright is not the only option for the business that wants to add high quality devices to its network. Many offices in the UK now rent their hardware and find it offers several notable benefits. Hiring cuts down on short term costs, meaning you can free up cash in other parts of your budget to move your business forward at a quicker pace. This is great news for the small office that is just starting out and wants to ensure it has the right equipment to tackle its workload. Hiring equipment allows them to add a top-of-the-line document system to their IT infrastructure before they can afford to purchase it outright.
The digital multifunction photocopiers have been truly a godsend for the modern office. These precision engineered devices combine world class printing, copying and scanning on a single, user friendly platform. Centralising all your document handling needs in a single place offers a number of powerful advantages, regardless of your company's size or budget. For one thing, there is the convenience factor. Would you prefer three or four different devices, each with its own control system, footprint and plug, crowding up your work space or do you want a single, compact, user friendly interface? Another factor is cost. If you use a number of different machines for each of your document handling needs, chances are you will be racking up a heavy energy bill in the process. An MFD reduces this consumption to a much more efficient level. For these and a million other reasons, multifunction devices simply make sense. Take a look at our catalogue and we are sure you will quickly agree.
At Top4Office, we stock high quality, colour document systems from all the major brands, including Ricoh, Canon and Sharp. Whether you run a one-man band, a mid-sized department or a huge, multi-site corporation, you will find MFD's that suits your workflow in our extensive catalogue. We have everything from dependable desktop models, ideal for handling the copying, printing and scanning of a small workgroup, to large scale production devices, precision engineered to sit in the centre of a professional print room. Not only that, at Top4Office you will find these machines at the lowest prices in the UK.
If your business does not have a need to regularly print or copy in colour, there are lots of advantages to purchasing a monochrome multifunction device. The most obvious one is cost. A top-of-the-line black and white office copier offers massively reduced price-per-copy when compared with its colour equivalent. This translates into more affordable service agreements, freeing up cash in your budget. In the digital age, a mono machine does not mean a less powerful machine. At Top4Office we stock a ton of muscular black and white MFPs that can match any colour model in their class for output, resolution and capacity.
Top4Office are one of the UK's leading online retailers of digital document products including printers, scanners, photocopiers and multi-functional devices.
Our product portfolio includes best of breed hardware from such industry leaders as Canon, Ricoh, Toshiba, Sharp and Samsung to name but a few.
Our "best for purpose" products are designed to not only meet your business needs but also add value to your digital document workflow. This is achieved through a combination of industry-leading hardware and software, all supported by a brand name you can trust.
From our UK distribution centre in Alton, Hampshire, we offer rapid door-to-door delivery and installation of all our multi-functional products (MFP's), with options for on-going support provided through our parent company Apogee Corporation Ltd.
If equipment leasing is your preferred purchase strategy, we have a range of flexible finance option backed by some of the industry's leading financial solutions providers.
For more information on Top4Office, or to find out how we can help support your digital document needs, please contact one of our dedicated sales account managers on 0800 808 7788.
Canon imaging and optical products featuring the full photocopier and printer spectrum, along with all required consumables and accessories.
Ricoh products range from high end multifunction printing devices to a variety of copier machines. Top4Office is a premium partner, the largest Ricoh distributor in the UK.
Sharp cater for entry level to higher end mono or colour multifunction copiers, perfect for all busy offices.
Samsung focuses on high specification multifunctional printers, most suitable for busy office environments with a need for scan, print, copy and fax as standard.
Brother products feature an unique blend of multi-function centers suitable for any office job, all in one devices that can print, scan, fax and copy.
The latest multifunction printers ideal for office and home use. Browse high quality colour printers, laser printers, all in one printers and wireless printers.
UK photocopier leasing experts, we offer a great range of photocopiers for sale, with all inclusive service contracts and free delivery.
Find the most sophisticated production printers from our range of high fidelity publishing printers. Contact us for competitive prices.
Dedicated black and white Fax machines, We provide machines which can scan and copy at up to 22 cpm
A reliable and cost efficient alternative to toner-based copiers, digital duplicators provide high quality printing at greatly improved speeds.
All printer ink, toner cartridges and inkjet cartridges from brands you know and trust, buy Canon toner, Toshiba toner, Ricoh toner.
The complete online catalog for Canon, Toshiba and Ricoh accessories, a welcomed addition to any office machine.
Brother MFC-8510DN
Printing from the top drawer, 5th August 2013
By Nigel Corkery
Brother HL-8110DN
What a great deal, 5th August 2013
By Happy Shopper
Brother HL-5450DN
Brother Printer, 5th August 2013
By Leonard Stokes
Brother HL-5450DN
Great desktop printer, 5th August 2013
By R. Scott
Brother HL-2135W
Best Mono Printer I've Used, 5th August 2013
By Dillon Daley
Canon i-SENSYS LBP6670DN
Great value, 5th August 2013
By J. Fahey
Brother DCP-J925DW
A happy customer, 5th August 2013
By Marion Collins
Brother HL-6180DWT
A really good deal, 5th August 2013
By Darren Telley
Brother HL-4150CDN
A top printer, 5th August 2013
By Darren Hannity
Brother HL-4570CDWT
Solid, 5th August 2013
By Y.N.


text:
According to The Loop's Jim Dalrymple, Apple Maps' 3-D flyover feature has seen a significant expansion in recent months. Sixteen cities have access to the feature now, which lets map users soar over buildings, down alleys and through cityscapes. Some of the new markets include Baltimore, Cleveland, Green Bay, Minneapolis, Indianapolis, Portland, Buffalo and the Hoover Dam.
Apple also expanded the scale of the 3-D flyover feature in more than a dozen existing cities, including Boston, Houston, London (U.K.), Toronto and many others.
[ For most users, there's no contest. Read 5 Ways Google Maps Beats Apple Maps. ]
Beyond expanding this one feature, Apple has updated the accuracy of the maps. When the app was first released, users in countries outside the U.S. reported gross inaccuracies. The recent updates have resolved some of those issues, particularly in China and Japan.
Some Australian towns continue to suggest that mobile device owners use alternate mapping services. Late last year, some motorists were stranded in remote desert regions after following inaccurate Apple Maps to the middle of nowhere.
Apple Maps has been perhaps the biggest black eye for iOS 6. Apple removed Google Maps, which was baked into iOS since the iPhone's debut in 2007, in favor of its own maps. Apple decided to drop Google Maps because Google wouldn't provide free, step-by-step, voice-guided navigation services to the iPhone. It was a costly mistake.
Apple's product was immediately derided as inferior thanks to mislabeled roads, omitted points of interest and even missing towns. The company was forced to apologize and eventually began to promote mapping products and services made by third-party developers.
Apple eventually relented and allowed Google Maps back on the iPhone. Google Maps was an instant hit with iPhone users and downloaded more than one million times shortly after its release.
The recent updates to Apple Maps are welcome, but it would be nice to hear directly from Apple on the steps it is taking to further improve what has become a table-stakes service for modern smartphones.
The Enterprise Connect conference program covers the full range of platforms, services and applications that comprise modern communications and collaboration systems. Hear case studies from senior enterprise executives, as well as from the leaders of major industry players like Cisco, Microsoft, Avaya, Google and more. Register for Enterprise Connect 2013 today with code IWKPREM to save $200 off a conference pass or get a free Expo Pass. It happens March 18-21 in Orlando, Fla.


text:
You will find below information about Pilot Point Ugashik Bay airport. Use the links below to read detailed information about Pilot Point Ugashik Bay airport: location, route maps, live departures and arrivals etc.
Skyscanner allows you to find the cheapest flights to Pilot Point Ugashik Bay airport without having to enter specific dates or even destinations, making it the best place to find cheap flights for your trip to Pilot Point Ugashik Bay airport. Use the links at the side of the page to browse for flight information or use the flight search controls above to start a new search.
Airports near Pilot Point Ugashik Bay:
- Pilot Point Arpt airport (18km)
- Port Heiden airport (75km)
- Egegik airport (87km)
- Chignik Fisheries airport (129km)
- Chignik Lagoon airport (133km)
- See all airports in United States.