| CARVIEW |
Select Language
HTTP/2 200
date: Sun, 28 Dec 2025 20:22:11 GMT
content-type: text/html; charset=utf-8
vary: X-PJAX, X-PJAX-Container, Turbo-Visit, Turbo-Frame, X-Requested-With,Accept-Encoding, Accept, X-Requested-With
etag: W/"70af5c44d5f78729c588ff566aac9717"
cache-control: max-age=0, private, must-revalidate
strict-transport-security: max-age=31536000; includeSubdomains; preload
x-frame-options: deny
x-content-type-options: nosniff
x-xss-protection: 0
referrer-policy: no-referrer-when-downgrade
content-security-policy: default-src 'none'; base-uri 'self'; child-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/; connect-src 'self' uploads.github.com www.githubstatus.com collector.github.com raw.githubusercontent.com api.github.com github-cloud.s3.amazonaws.com github-production-repository-file-5c1aeb.s3.amazonaws.com github-production-upload-manifest-file-7fdce7.s3.amazonaws.com github-production-user-asset-6210df.s3.amazonaws.com *.rel.tunnels.api.visualstudio.com wss://*.rel.tunnels.api.visualstudio.com github.githubassets.com objects-origin.githubusercontent.com copilot-proxy.githubusercontent.com proxy.individual.githubcopilot.com proxy.business.githubcopilot.com proxy.enterprise.githubcopilot.com *.actions.githubusercontent.com wss://*.actions.githubusercontent.com productionresultssa0.blob.core.windows.net/ productionresultssa1.blob.core.windows.net/ productionresultssa2.blob.core.windows.net/ productionresultssa3.blob.core.windows.net/ productionresultssa4.blob.core.windows.net/ productionresultssa5.blob.core.windows.net/ productionresultssa6.blob.core.windows.net/ productionresultssa7.blob.core.windows.net/ productionresultssa8.blob.core.windows.net/ productionresultssa9.blob.core.windows.net/ productionresultssa10.blob.core.windows.net/ productionresultssa11.blob.core.windows.net/ productionresultssa12.blob.core.windows.net/ productionresultssa13.blob.core.windows.net/ productionresultssa14.blob.core.windows.net/ productionresultssa15.blob.core.windows.net/ productionresultssa16.blob.core.windows.net/ productionresultssa17.blob.core.windows.net/ productionresultssa18.blob.core.windows.net/ productionresultssa19.blob.core.windows.net/ github-production-repository-image-32fea6.s3.amazonaws.com github-production-release-asset-2e65be.s3.amazonaws.com insights.github.com wss://alive.github.com wss://alive-staging.github.com api.githubcopilot.com api.individual.githubcopilot.com api.business.githubcopilot.com api.enterprise.githubcopilot.com; font-src github.githubassets.com; form-action 'self' github.com gist.github.com copilot-workspace.githubnext.com objects-origin.githubusercontent.com; frame-ancestors 'none'; frame-src viewscreen.githubusercontent.com notebooks.githubusercontent.com; img-src 'self' data: blob: github.githubassets.com media.githubusercontent.com camo.githubusercontent.com identicons.github.com avatars.githubusercontent.com private-avatars.githubusercontent.com github-cloud.s3.amazonaws.com objects.githubusercontent.com release-assets.githubusercontent.com secured-user-images.githubusercontent.com/ user-images.githubusercontent.com/ private-user-images.githubusercontent.com opengraph.githubassets.com marketplace-screenshots.githubusercontent.com/ copilotprodattachments.blob.core.windows.net/github-production-copilot-attachments/ github-production-user-asset-6210df.s3.amazonaws.com customer-stories-feed.github.com spotlights-feed.github.com objects-origin.githubusercontent.com *.githubusercontent.com; manifest-src 'self'; media-src github.com user-images.githubusercontent.com/ secured-user-images.githubusercontent.com/ private-user-images.githubusercontent.com github-production-user-asset-6210df.s3.amazonaws.com gist.github.com github.githubassets.com; script-src github.githubassets.com; style-src 'unsafe-inline' github.githubassets.com; upgrade-insecure-requests; worker-src github.githubassets.com github.com/assets-cdn/worker/ github.com/assets/ gist.github.com/assets-cdn/worker/
server: github.com
content-encoding: gzip
accept-ranges: bytes
set-cookie: _gh_sess=fYZp3xZ2hHGDF3%2FlmOVQJKEc1XAUPVthf%2BkZw%2B5HuIBqRPc9PhSQdFy6gfdikxXKqRO6xLZkaGkpAvbIsFl%2BUP07a9bnsCKmkPH9EM%2F%2BdYTNfC%2FHPSrpSoz8C9dAT6p%2BHZ%2BONoMNF8Dr87oHbW8BOrNwX9Do%2FFWDTyuX1CQ2A3JExaYy%2BL3epEct3Js0tTZybG5Eoo4gPTYnuTLFnyuSLUOQj5whD8dWBgdi9hrZXk6%2BTmBirdAZ%2B%2FptjZ%2BQCuWvROjx%2Bq%2FHFu3YHjr8dP6hFQ%3D%3D--pF%2BPmnbxXAsP%2Bnl2--FxqQJkfyBfzMQZuyItU50Q%3D%3D; Path=/; HttpOnly; Secure; SameSite=Lax
set-cookie: _octo=GH1.1.1797043722.1766953328; Path=/; Domain=github.com; Expires=Mon, 28 Dec 2026 20:22:08 GMT; Secure; SameSite=Lax
set-cookie: logged_in=no; Path=/; Domain=github.com; Expires=Mon, 28 Dec 2026 20:22:08 GMT; HttpOnly; Secure; SameSite=Lax
x-github-request-id: BC28:13ACF:5411462:65A0499:69519170
GitHub - dormando/mc-crusher: ENSIGN CRUSHER
Skip to content
Navigation Menu
{{ message }}
forked from memcached/mc-crusher
-
Notifications
You must be signed in to change notification settings - Fork 3
ENSIGN CRUSHER
License
dormando/mc-crusher
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
An extremely rough but extremely damaging benchmark utility for memcached. Does not use a client library, does not use threads (though it will). Uses event based sockets via libevent. Building -------- $ (install libevent + headers) $ ./compile Usage ----- Look in the conf/ directory for example configuration files. $ ./mc-crusher ./conf/loadconf [host] [port] defaults: host: 127.0.0.1 port: 11211 Running ------- This tool is extremely rough. First, run it for a few seconds with a config like "conf/loadconf", this will seed the instance with some values to fetch later. Now, kill it. You can also use the bench-warmer.pl tool to preload some keys. Pick a config file, and start it as above. You should start a fresh memcached, and run the "sample" script that comes with mc-crusher. mc-crusher makes no attempt to care about what it does. It flails tiredlessly against the fanged defenses of the cache daemon. Modify bench-sample to print what you are most interested in examining. You can change the "default" destination ip/port by adding extra arguments: $ ./mc-crusher ./conf/loadconf 192.168.1.1 11211 Configuration ------------- mc-crusher reads a configuration file then executes. These configurations describe a "type" of connection, one per line. Each "type" can spawn N connections. This allows you to mix setters and getters, getters of different sizes, binprot + asciiprot. It's very limited right now, but I wanted to build this in as a base. Config Options -------------- send : defines what function to use to send requests to memcached - ascii_get : one get per request via asciiprot - ascii_set : one set per request via asciiprot - ascii_delete : one delete per request via asciiprot - ascii_mget : multiget test via asciiprot - bin_get : one get per req via binprot - bin_getq : endless streaming multiget from hell - bin_set : one set per req via binprot - bin_setq : unleash cthulu upon the cache_lock recv : same, but for received data - blind_recv : mindlessly slurp any responses without inspecting them mget_count : set this to the number of keys to fetch per get in ascii_mget key_prefix : a string to prefix before each key's number (default 'foo') value_size : size of the value to set expire : the expiration value (default 0) flags : client flags (raw number, default 0) value : define a value by hand. Must be shortish and a string. host : define a host to connect to port : define a port to connect to key_prealloc : pre-create key strings in memory to reduce bench cpu usage key_count : number of keys to iterate across. use with key_prealloc=0 to iterate over large numbers of keys key_randomize : if using prealloc'ed keys, shuffle the list after generating usleep : fire one write event (up to pipeline count) with a microsecond sleep after. the sleep is per-connection (so conns=2 will write twice per usleep) stop_after : stop all conns for this test after N writes have been made. Caveats ------- - I bundled the protocol_binary.h header. It will need to be copied from the primary repo for updates. - Does not make any attempt to safely parse the config file. If you don't type it exactly right you will end up with bizarre failures. - It only works well with small values - It makes no attempt to reconcile with errors in the protocol, and can break if memcached throws errors. It will also stop if the connections are closed. - It's a ton of fun! Future Features --------------- A short list of things I intend to change or add: - Fix the command generators to have a *little* error handling - Switch to writev and use iovectors + pregenerated keys for almost everything - Add back some routines which are sprintf only, for doing tests with extremely wide keyspaces where performance is less of an issue. - Add a "run_every" option which fires a conn every N microseconds instead of endlessly. - Add a "timer" option which times the commands it runs and periodically dumps a histogram of response times. Mainly to be used with "run_every" - Add missing protocol commands. *_incr, *_decr, *_delete, etc. - Make the iteration loop per-connection, and randomizeable. - Add commands to iterate over different value sizes - Add multithreading to ease management. - Allow running timer conns in their own thread (or just define if a conn template should use a thread, then define conns=1?) - Bundle a better perl util for printing stats - Write/bundle a better util for running iterative benchmarks.
About
ENSIGN CRUSHER
Resources
License
Stars
Watchers
Forks
Packages 0
No packages published
Languages
- C 67.6%
- Perl 31.7%
- Other 0.7%
You can’t perform that action at this time.